0


Django设置权限管理

这篇文章写的比较急,很多地方不够完善,博主会不断更新和完善这篇文章,如有不懂的可以直接评论找博主,博主看到就会回答

整体思路

    1.使用django后台添加用户和权限

    2.用户登录绑定

    3.编写中间件进行访问网页的验证

1.使用django自带的后台功能添加组和用户

启动django服务后,在Django终端添加一个账号

            python manage.py createsuperuser

            ![](https://img-blog.csdnimg.cn/a9ef9ab79a784fd3959f7fad8982c30e.png)

            按照提示一个一个输入即可

            密码不要设置太简单,这里为了演示就随便设置了

在网页上输入网址,跳转到登录页面

            http://127.0.0.1:8000/admin/login

            ![](https://img-blog.csdnimg.cn/b2a29c0234e24a039094c3ab6c7f06f0.png)

            这里主要介绍一下两个功能,Groups和Users

            这里简单介绍一下groups和users,user对应的就是每一个账号,grouop对应的一组,一组里面可以包含多个账号,只要给组设置了权限,该组下的所有账号都有对应的权限,也可以为每一个账号设置不同的权限

            ![](https://img-blog.csdnimg.cn/d28105afe38842c08c377ed1b6dd7c5c.png)

Groups

新增组,设置组的名字,对应的权限Save即可

            这里演示**添加的组名为【group1】,后面会用到**

            ![](https://img-blog.csdnimg.cn/eea92b449c534fd8a4d470e2ed5f4bd3.png)

Users

            对所有账号进行管理

            ![](https://img-blog.csdnimg.cn/8c79370b320e44539a721fd80b893277.png)

将用户绑定组或单独设置权限

            已当前账号111为演示,将111账号添加到group1下

            ![](https://img-blog.csdnimg.cn/caf0ade760a84cb6b8d5f03fe1c41ff3.png)

至此通过django后台添加用户和权限就设置完成,但到这只是设置的对应的账号,那如何在页面上实现只有属于该组的才能访问该组的页面的功能呢,下面将介绍代码部分

2.用户的登录绑定

     login(request, user)能够将对应的用户信息给记录,django已经帮我们封装好了,不需要我们再做其他处理,其已经完成这部分功能
from django.shortcuts import render, redirect
from django.utils.timezone import now
from django.contrib.auth import authenticate, login, logout

# 登录页面
def project_login(request):
    if request.method == "GET":
        return render(request, '登录页面的html')
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return render(request, '登录成功后的html')

    return render(request, '登录页面的html')

3.用户权限的验证

    可以在每个view加一个装饰器,但这样太麻烦,不利于维护,这里就已组来设置权限,只要用户属于对应的组就能访问对应的view,这里使用的方法是添加中间件,使其访问任何网页前都先进行判断,是否满足特定的组

    新建一个py文件,输入下面代码,**最后记得在settings.py里面注册中间件,注册中间件的顺序也是有讲究的**,不明白的话,自行搜索,为了减少篇幅,这里不过多解释
from django.shortcuts import redirect
from django.urls import reverse

class GroupPermissionMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 在每个请求之前进行组权限判断
        if not self.check_group_permission(request):
            return redirect(reverse('需要返回的url地址(一般是登录页,自行决定)'))

        response = self.get_response(request)
        return response

    def check_group_permission(self, request):
        # 获取当前请求的用户对象
        user = request.user
        # 获取当前请求的路径
        path = request.path

        # 设置需要进行限制访问的路径列表和对应的组
        restricted_paths = {
            'url存在的路径': '对应的组名',
            # 拿刚才创建的group1来举例
            '/only_group1/': 'group1',

            '/jd/': '对应的组名',
            '/vips/': '对应的组名',
        }

        # 检查用户是否属于指定组,并判断是否允许访问特定页面
        for restricted_path, restricted_group in restricted_paths.items():
            if restricted_path in path and not user.groups.filter(name=restricted_group).exists():
                return False

        return True
    代码解释

    例如我要访问的url是http://127.0.0.1:8000/only_group1/show/group1/data/那就可以在设置成下面的样子,只要有url里面存在 【/only_group1/】就需要【group1】该组的权限,如果该用户不属于group1组那就无法访问

    restricted_paths = {
                 'url存在的路径': '对应的组名',
                # 拿刚才创建的group1来举例
                 '/only_group1/': 'group1',

                '/jd/': '对应的组名',
                 '/vips/': '对应的组名',
             }
标签: django python 后端

本文转载自: https://blog.csdn.net/gongzairen/article/details/131822029
版权归原作者 gongzairen 所有, 如有侵权,请联系我们删除。

“Django设置权限管理”的评论:

还没有评论