赞
踩
之前这个基础版有其局限性,当我们进行更细粒度的权限控制时会显得比较乏力。所以在这进阶篇中,我们进行了改进。对数据库表以及表字段进行了增加完善。所以看不懂的话,可以先看看基础版
现在开始正题:
首先我们先对 app01/views.py中的这两个函数进行修改
def user(request):
user_obj = User.objects.all()
return render(request, 'user.html', {'user_obj': user_obj})
def role(request):
user_obj = User.objects.all()
role_obj = user_obj.values('name', 'roles__title')
print(role_obj)
return render(request, 'role.html', {'role_obj': role_obj})
然后我们也对静态html模板进行了优化使用了模板继承:
base.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 最新版本的 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- 可选的 Bootstrap 主题文件(一般不用引入) --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> <!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <style> .header{ height: 60px; width: 100%; background-color: deepskyblue; } .menu{ width: 200px; top: 60px; bottom: 0px; background-color: khaki; position: fixed; float: left; } .content{ position: fixed; left: 220px; right: 0px; top: 60px; bottom: 0px; overflow: auto; } </style> <title>user</title> </head> <body> <div class="header"> </div> <div class="con"> <div class="menu"> menu </div> <div class="content"> {% block content %} {% endblock %} </div> </div> </body> </html>
user.html:
{% extends 'base.html' %} {% block content %} <table class="table table-bordered table-hover"> <thead> <tr> <th>序号</th> <th>名字</th> <th>操作</th> </tr> </thead> <tbody> {% for user in user_obj %} <tr> <td>{{ forloop.counter }}</td> <td>{{ user.name }}</td> <td> <a class="btn btn-info" href="">编辑</a> <a class="btn btn-danger" href="">删除</a> </td> </tr> {% endfor %} </tbody> </table> {% endblock %}
role.html:
{% extends 'base.html' %} {% block content %} <table class="table table-bordered table-hover"> <thead> <tr> <th>序号</th> <th>名字</th> <th>角色</th> <th>操作</th> </tr> </thead> <tbody> {% for role in role_obj %} <tr> <td>{{ forloop.counter }}</td> <td>{{ role.name }}</td> <td>{{ role.roles__title }}</td> <td> <a class="btn btn-info" href="">编辑</a> <a class="btn btn-danger" href="">删除</a> </td> </tr> {% endfor %} </tbody> </table> {% endblock %}
然后我们就要进行逻辑代码编写了。
**首先:**我们需要在我们模型表中添加多一个权限组表,然后在权限表中添加字段:
class Permission(models.Model):
title = models.CharField(max_length=32)
url = models.CharField(max_length=128)
action = models.CharField(max_length=16, default='') # 设置一下默认值,免得报错
group = models.ForeignKey(to='PermissionGroup', default='1') # 设置一下默认值,免得报错
def __str__(self):
return self.title
class PermissionGroup(models.Model):
title = models.CharField(max_length=32,) # 设置一下默认值,免得报错
def __str__(self): return self.title
添加完成后进行makemigrations和migrate。
先把新增的表添加到admin中,后登录admin管理系统进行一些操作:
在权限组中添加两个:
然后在permission中进行改动
用户相关的亦是如此:
这里不再一一列举了。
然后: 表进行完善后就需要进行代码重构了:
首先我们需要在login中的initial_permission(request, user_obj)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。