本篇介绍django的后台管理,以及使用后台默认的用户账号,实现用户登录身份验证。


1、创建管理员账户

python manage.py createsuperuser

输入用户名,邮箱,密码

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第1张图片

2、登录管理页面

http://localhost:8000/admin

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第2张图片

3、创建用户组与用户

创建用户组,并且对用户组授予权限。

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第3张图片

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第4张图片

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第5张图片

创建用户,划入用户组,并且启用账户。

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第6张图片

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第7张图片

注销,使用用户账户登录尝试。

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第8张图片

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第9张图片

4、修改views.py

我们计划调用django admin自带的用户管理与登录认证,这样就不需要自己重写。

导入对应的包

django.http HttpResponseRedirect
django.contrib auth
django.contrib.auth.decorators login_requiredpermission_required

然后编写login_action函数

(request):
    request.method == :
        username = request.POST.get()                                       #从前端的POST请求获取用户名
        password = request.POST.get()                                       #从前端的POST请求获取密码
        userinfo = auth.authenticate(=username=password)            #利用django admin的auth模块认证鉴权
        userinfo :
            auth.login(requestuserinfo)                            #利用auth模块获取当前已登录的用户session
            request.session[] = username
            stuinfo = student.objects.filter(=username)     #判断认证成功的用户是否在学生表里面存在,是则是学生,否则是老师
            stuinfo:
                HttpResponseRedirect()             #跳转到老师个人信息页
            :
                HttpResponseRedirect()             #跳转到老师个人信息页
        :
            render_to_response(())        #用户名密码不正确,跳转回index.html页

上述代码,其实就是用前段页面的POST动作获取username与password,先认证用户名密码是否正确。如果正确,正面django用户数据库有此用户。

再判断该用户是否存在student表里面,如果是,就是学生,则利用HttpResponseRedirect重定向页面到学生个人信息页(stuinfo),如果不存在student表里面,那么肯定是老师,就跳转tchinfo的老师个人信息页。

如果用户名密码认证不通过,就依然跳转回index.html登录页。

#注意记得将之前测试的login函数删除了,还有原来index.html里面增加的测试代码需要删除。

5、修改urls

老规矩,增加了函数,必须到urls里面添加路由。

url(r'^login_action/', login_action),

6、修改前端页面

index.html的

,如果只设置method='post',表单提交的数据,默认是提交到index函数的。

现在需要手动指定将数据提交给login_action函数,需要增加action并且指向login_action函数。


7、数据库手动修改数据

我们将django admin里面创建的用户,student1\student2分别手动添加到student表,以及teacher1和teacher2手动添加到teacher表。

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第10张图片

然后测试index.html输入student1用户名密码,尝试登录验证跳转。发现用户名密码正确后,能够成功跳转。

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第11张图片

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第12张图片

问题是,如果我们记下来url,不输入用户名密码,当前是可以直接访问127.0.0.1:8000/stuinfo的,那么怎么强制必须要登录了。

只需要在views里面,在stuinfo函数前面加上装饰器@login_required即可。这样就会强制必须要登录后才能访问页面了。

(request):


目前由于没有做注销功能,使用某个账户登录后,如何注销测试下一项呢?只能手动访问127.0.0.1:8000/admin,注销后再测试。

注销后直接访问127.0.0.1:8000/stuinf,发现已经页面已经不能不登录匿名访问了。

【实战演练】Python+Django网站开发系列07-django后台管理与身份验证_第13张图片