在这一节,我们将建立一个用户注册和身份验证系统,让用户能够注册账户,进而登录和注销。我们将创建一个新的应用程序,其中包含与处理用户账户相关的所有功能。我们还将对模型Topic 稍做修改,让每个主题都归属于特定用户。
应用程序users
我们首先使用命令startapp 来创建一个名为users 的应用程序:
(ll_env) nanimatoMacBook-Air:learning_log heguanlin$ python3 manage.py startapp users
1.将应用程序users 添加到settings.py中
在settings.py中,我们需要将这个新的应用程序添加到INSTALLED_APPS 中
2.包含应用程序users 的URL
接下来,我们需要修改项目根目录中的urls.py,使其包含我们将为应用程序users 定义的URL:
from django.conf.urls import url
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
url(r'', include(('learning_logs.urls', 'learning_logs'), namespace='learning_logs')),
url(r'^users/', include('users.urls', namespace='users')),
]
这行代码与任何以单词users打头的URL(如http://localhost:8000/users/login/)都匹配。我们还创建了命名空 间’users’ ,以便将应用程序learning_logs 的URL同应用程序users 的URL区分开来。
登录页面
我们首先来实现登录页面的功能。为此,我们将使用Django提供的默认登录视图,因此URL模式会稍有不同。在目录learning_log/users/中,新建一个名为urls.py的文件,并在其中添加如下代码:
from django.conf.urls import url
from django.contrib.auth.views import LoginView
urlpatterns = [
#登录界面 LoginView.as_view后面要加上()
url(r'^login/$',LoginView.as_view(template_name='users/login.html'),name='login')
]
我们首先导入了默认视图login。登录页面的URL模式与URL http://localhost:8000/users/login/匹配。这个URL中的单词users让Django在users/urls.py中查找,而单词login让它将请求发送给Django默认视图login (请注意,视图实参为login ,而不是views.login )。鉴于我们没有编写自己的视图函数,我们传递了一个字典,告诉Django去哪里查找我们将编写的模板。这个模板包含在应用程序users而不是learning_logs 中。
1.模板login.html
用户请求登录页面时,Django将使用其默认视图login ,但我们依然需要为这个页面提供模板。为此,在目录learning_log/users/中,创建一个名为templates的目录,并在其中创建一个名为users的目录。以下是模板login.html,你应将其存储到目录learning_log/users/templates/users/中:
{
% extends 'learning_logs/base.html' %}
{
% block content %}
{
% if form.errors %}
<p>Your username and password didn't match