python自动化运维学习第四十一天--登录后数据需求分析

接上篇,配置django后台admin,进入管理后台。添加一些数据,首先添加用户,分别添加3个用户,添加3个岗位开发、测试和运维;再添加权限表,权限路径根据django中的url填写,显示名字分别为增、删、改、查/主机、用户、菜单等;添加权限组,组名为主机、用户、菜单;最后添加菜单,菜单填写页面左侧要显示的菜单名,如主机、用户等。添加数据后还要把这些数据关联起来,如用户设置岗位,岗位配置权限,权限配置权限组,权限组再和菜单关联。
python自动化运维学习第四十一天--登录后数据需求分析
用户表,关联职位表的职位
python自动化运维学习第四十一天--登录后数据需求分析
职位表,关联权限表的权限,可以多选
python自动化运维学习第四十一天--登录后数据需求分析
权限表,关联权限组表
python自动化运维学习第四十一天--登录后数据需求分析
权限组表,关联菜单表

表中添加了数据,再写个demo
urls.py设置路由,主页需要登录

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.login),
]

views.py登录数据处理

def login(request):
    if request.method == "GET":
        return render(request, "login.html")
    user = request.POST.get("username", False)
    pwd = request.POST.get("password", False)
    if not user or not pwd:
        error = "用户名或密码不能为空!"
        return render(request, "login.html", locals())
    else:
        user_obj = models.Users.objects.filter(username=user, password=pwd)    #获取到QuerySetList
        if user_obj.first():
            request.session['login'] = user_obj.first().username
            obj = user_obj.values('position__auth__name',
                                  'position__auth__url',
                                  'position__auth__group__name',
                                  'position__auth__group__title__title')    #获取到QuerySetList的values,分别为权限名字、权限路径、权限组名字、菜单名
            for i in obj:
                print(i.get('position__auth__name'),
                      i.get('position__auth__url'),
                      i.get('position__auth__group__name'),
                      i.get('position__auth__group__title__title'),
                      )
            return redirect("/hosts/")
        else:
            error = "用户名或密码不正确,请重新输入!"
            return render(request, "login.html", locals())

login.html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="/" method="post">
    {% csrf_token %}
用户名: <input type="text" name="username">
密  码: <input type="password" name="password">
    {{ error }}
<input type="submit" value="登录">
</form>
</body>
</html>

权限主要是url路径,url路径作用一个是菜单页面跳转,另一个是验证用户是否有该url的访问权限。
在页面的左侧菜单中显示权限菜单,权限菜单中,菜单下有子菜单,可以是查看权限、查看权限组、查看岗位、查看菜单、查看用户;然后在每个子菜单中的查看页面再设置添加、编辑和删除相关的按钮来实现这些功能,这些查看、添加、编辑和删除都是通过url路径来达到权限的设置。这些url和要显示的菜单名通过views中获取的数据组成dict和list,方便数据处理。
另外,还有一个需求是当点击进入某个菜单时,菜单要有个特殊的样式,表明进入的页面是该菜单项。当对子菜单内显示的数据进行添加、编辑和删除操作时,该子菜单依然有特殊样式。
对models.py中auth权限表添加一个字段

class Auth(models.Model):
    url = models.CharField(max_length=32, blank=True, null=True, verbose_name="路径")
    name = models.CharField(max_length=32, blank=True, null=True, verbose_name="显示")
    group = models.ForeignKey(to='AuthGroup', blank=True, null=True, verbose_name="权限组", related_name="authgroup")
    to_display = models.ForeignKey(to='Auth', blank=True, null=True, verbose_name="显示", related_name="authtoauth")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "权限表"

auth表添加了一个to_display字段,自己来关联自己,代码的功能实现下篇介绍