码迷,mamicode.com
首页 > 其他好文 > 详细

django 权限功能(根据不同的用户,设置不同的显示和访问权限)

时间:2020-04-27 17:05:35      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:with   官方文档   功能   dmi   blog   进入   dex   none   pass   

简单的认证

@Login_required 装饰器

判断是否登陆,没有就自动重定向某个地方

用法:(局限于装饰函数)(如果要装饰一个类,则不能,要使用method_decorator)

@login_required(login_url=users:login)
def index_fn(reuqest):
    return HttpResponse(大家都是大牛)

自动跳转到login页面

登陆后:

技术图片

@method_decorator装饰器

@method_decorator(login_required(login_url=users:login),name=dispatch)
class Index(View):
    def get(self, request):
        return render(request, admin/index.html, context={request: request})

用法基本一样也就是一个是类视图一个是函数视图。

但是是否每一个都需要添加呢?不符合优秀程序员的做法(手动滑稽)因为实在是太丑了。

Minxin认证

LoginRequired Mixin

需要设定重定向的URL(有一点restful的风格)

class Index(LoginRequiredMixin,View):
    login_url = users:login
    def get(self, request):
        return render(request, admin/index.html, context={request: request})

聪明的看得出来了,是否每一次都添加login_url呢,这里显然不是的,可以将login_url设置在Settings里面,我的Mixin会自动去settings里面寻找LOGIN_URL的参数。

 技术图片

?next=/admin/        可以自定义next 

@login_required(redirect_field_name=‘my_redirect_field‘) 这样就可以代替next

自动帮我们添加一个查询的参数在URL上面。

user_passes_test 

这个比较通用于函数视图

以下为官方文档。 描述为判断登陆的用户的邮箱以‘@example.com’结尾,就为True,允许访问,如果相反,那么就禁止访问。可自定义

技术图片

userPassesTestMixin

这个通用于类视图。

class Index(UserPassesTestMixin,View):
    def test_func(self):
        return self.request.user.username.endswith(son)

    def get(self, request):
        return render(request, admin/index.html, context={request: request})

test_func为Mixin所定的。测试是否通过,为TRUE则可以进入,FALSE为相反。

权限

permission_required decorator 

首先这里要注意权限和认证的区别,认证给你登陆了,但不一定给你看某些好看的东西。除非微信转钱。

permission_required(perm.login_url=None,raise_exception=False)

perm为权限多个权限就可以用一个列表或者元组都行。放在函数视图里面。

技术图片

 perm 第一部分模型名字    第二部分为codename

permissionRequiredMixin mixin 

使用于类视图里面。

lass TagManage(PermissionRequiredMixin,View):
    """
    create tags manage view
    route: admin/tags/int
    """
    permission_required = (news.add_tag, news.view_tag)
    raise_exception = True # 403
    def get(self, request):

没有权限直接403

 技术图片

未完待续。https://docs.djangoproject.com/en/3.0/topics/auth/default/

 

 

django 权限功能(根据不同的用户,设置不同的显示和访问权限)

标签:with   官方文档   功能   dmi   blog   进入   dex   none   pass   

原文地址:https://www.cnblogs.com/jackson669/p/12787676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!