二 Django入门( 八 )

{% else %}log in{% endif %}
{% block content %}{% endblock content %}
使用超级用户登录
注册页面
下面使用提供的表单来创建一个让新用户能够注册的页面 。
# 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'),# 注册页面re_path(r'^register/$', views.register, name='register'),]
这个模式与URL:8000/users//匹配 , 并将请求发送给我们即将编写的函数() 。
在注册页面首次被请求时 , 视图函数()需要显示一个空的注册表单 , 并在用户提交填写好的注册表单时对其进行处理 。如果注册成功 , 这个函数还需让用户自动登录 。
# vim users/views.py
from django.shortcuts import renderfrom django.http import HttpResponseRedirectfrom django.urls import reversefrom django.contrib.auth import login, logout, authenfrom django.contrib.auth.forms import UserCreationFormdef logout_view(request):"""注销用户"""logout(request)return HttpResponseRedirect(reverse('learning_logs:index'))def register(request):"""注册新用户"""if request.method != 'POST':# 显示空的注册表单form = UserCreationForm()else:# 处理填写好的表单form = UserCreationForm(data=http://www.kingceram.com/post/request.POST)if form.is_valid():new_user = form.save()# 让用户自动登录 , 再重定向到主页authenticated_user = authenticate(username=new_user.username, password = request.POST['password1'])login(request, authenticated_user)return HttpResponseRedirect(reverse('learning_logs:index'))context = {'form': form}return render(request, 'users/register.html', context)
首先导入了函数login()和() , 以便在用户正确地填写了注册信息时让其自动登录 。还导入了默认表单 。在函数()中 , 我们检查要响应的是否是POST请求 。如果不是 , 就创建一个实例 , 且不给它提供任何初始数据 。
如果响应的是POST请求 , 我们就根据提交的数据创建一个实例 , 并检查这些数据是否有效:就这里而言 , 是用户名未包含非法字符 , 输入的两个密码相同 , 以及用户没有试图做恶意的事情 。如果提交的数据有效 , 我们就调用表单的方法save() , 将用户名和密码的散列值保存到数据库中 。方法save()返回新创建的用户对象 , 我们将其存储在中 。
保存用户的信息后 , 我们让用户自动登录 , 这包含两个步骤 。首先 , 我们调用() , 并将实参. 和密码传递给它 。用户注册时 , 被要求输入密码两次;由于表单是有效的 , 我们知道输入的这两个密码是相同的 , 因此可以使用其中任何一个 。在这里 , 我们从表单的POST数据中获取与键’’相关联的值 。如果用户名和密码无误 , 方法()将返回一个通过了身份验证的用户对象 , 而我们将其存储在变量中 。
接下来 , 我们调用函数login() , 并将对象和传递给它 , 这将为新用户创建有效的会话 。最后 , 我们将用户重定向到主页 , 其页眉中显示了一条个性化的问候语 , 让用户知道注册成功了 。