Django设置权限管理
目录
这篇文章写的比较急,很多地方不够完善,博主会不断更新和完善这篇文章,如有不懂的可以直接评论找博主,博主看到就会回答
整体思路
1.使用django后台添加用户和权限
2.用户登录绑定
3.编写中间件进行访问网页的验证
1.使用django自带的后台功能添加组和用户
启动django服务后,在Django终端添加一个账号
python manage.py createsuperuser
按照提示一个一个输入即可
密码不要设置太简单,这里为了演示就随便设置了
在网页上输入网址,跳转到登录页面
http://127.0.0.1:8000/admin/login
这里主要介绍一下两个功能,Groups和Users
这里简单介绍一下groups和users,user对应的就是每一个账号,grouop对应的一组,一组里面可以包含多个账号,只要给组设置了权限,该组下的所有账号都有对应的权限,也可以为每一个账号设置不同的权限
Groups
新增组,设置组的名字,对应的权限Save即可
这里演示添加的组名为【group1】,后面会用到
Users
对所有账号进行管理
将用户绑定组或单独设置权限
已当前账号111为演示,将111账号添加到group1下
至此通过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/': '对应的组名',
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhibfgak
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22