二 Django入门( 七 )


如果表单的属性被设置 , 我们就显示一条错误消息 , 指出输入的用户名—密码对与数据库中存储的任何用户名—密码对都不匹配 。
我们要让登录视图处理表单 , 因此将实参设置为登录页面的URL 。登录视图将一个表单发送给模板 , 在模板中 , 我们显示这个表单并添加一个提交按钮 。后面包含了一个隐藏的表单元素’next’ , 其中的实参value告诉在用户成功登录后将其重定向到主页 。
# vim learning_logs/templates/learning_logs/base.html
Learning Log -Topics - {% if user.is_authenticated %}Hello, {{ user.username }}.{% else %}log in{% endif %}
{% block content %}{% endblock content %}

在身份验证系统中 , 每个模板都可使用变量user , 该变量有一个属性:如果用户已登录 , 该属性将为True , 否则为False 。
在这里向已登录的用户显示一条问候语 。对于已通过身份验证的用户设置了属性 , 我们使用这个属性来个性化问候语 , 让用户知道他已经登录 。而对于还未通过身份验证的用户 , 我们再显示一个到登录页面的链接 。
访问192.168.30.128:8000/users/login/ 。如果之前使用超级用户登录的 , 注销之后再访问 。
注销
现在需要提供一个让用户注销的途径 。我们不需要创建用于注销的页面 , 而让用户只需单击一个链接就能注销并返回到主页 。为此 , 我们将为注销链接定义一个URL模式 , 编写一个视图函数 , 并在base.html中添加一个注销链接 。
# vim users/urls.py
"""定义users的URL模式"""from django.urls import path, re_pathfrom django.contrib.auth.views import LoginViewfrom . import viewsapp_name='users'urlpatterns = [# 登录主页re_path(r'^login/$', LoginView.as_view(template_name='users/login.html'), name='login'),# 注销re_path(r'^logout/$', views.logout_view, name='logout'),]
这个URL模式将请求发送给函数() , 要将其与我们下面在其中调用的函数()区分开来 。
# vim users/views.py
from django.shortcuts import renderfrom django.http import HttpResponseRedirectfrom django.urls import reversefrom django.contrib.auth import logoutdef logout_view(request):"""注销用户"""logout(request)return HttpResponseRedirect(reverse('learning_logs:index'))
先从..auth中导入了函数();然后调用了函数() , 它要求将对象作为实参;最后重定向到主页 。
现在需要在base.html中添加注销链接 , 让每个页面都包含它;将它放在标签{% if user. %}中 , 使得仅当用户登录后才能看到它 。
# vim learning_logs/templates/learning_logs/base.html
Learning Log -Topics -{% if user.is_authenticated %}Hello, {{ user.username }}.log out