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

Posted jackson669

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 权限功能(根据不同的用户,设置不同的显示和访问权限)相关的知识,希望对你有一定的参考价值。

简单的认证

@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 权限功能(根据不同的用户,设置不同的显示和访问权限)的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中为特定视图设置用户权限

django的权限组件

django实现不同用户查看不同菜单

MFC怎么设置不同用户的不同用户权限,下面的情况具体要怎么做

用啥方法实现根据用户权限不同,主菜单显示不同的项?

Django中不同的用户级别