修改urls.py
"""为应用程序users定义URL模式"""
from django.conf.urls import url
from django.contrib.auth.views import login
from . import views
urlpatterns = [
# 登录页面
url(r'^login/$', login, {'template_name' : 'users/login.html'}, name='login'),
]
模板login.html
{% extends "learning_logs/base.html" %}
{% block content %}
{% if form.errors %}
Your username and password didn't match. Please try again.
{% endif %}
{% endblock content %}
创建一个login.html
这个模板继承了base.html,注意一个应用程序中的模板可以继承另一个应用程序中的模板
learning Log -
Topics -
{% if user.is_authenticated %}
Hello, {{user.username}}.
{% else %}
log in
{% endif %}
{% block content %}{% endblock content %}
之后进入index主页面,显示了一条个性化问候语,其中包含你的用户名
注销
需要提供一个让用户注销的途径。我们不创建用于注销的页面,而让用户只需要单击一个链接就能注销并返回到主页
。为此,我们将为注销链接定义一个URL模式,编写一个视图函数,并在base.html中添加一个注销链接
注销URL
该模式与URL http://localhost:8000/users/logout/匹配
修改users/urls.py
urls.py
from django.conf.urls import url
from django.contrib.auth.views import login
from . import views
urlpatterns = [
# 登录页面
url(r'^login/$', login, {'template_name' : 'users/login.html'}, name='login'),
# 注销
url(r'^logout/$', views.logout_view, name="logout"),
]
视图函数logout_view()
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.contrib.auth import logout
def logout_view(request):
"""注销用户"""
logout(request) # 调用Django函数logout()
# 重定向到主页
return HttpResponseRedirect(reverse('learning_logs:index'))
链接到注销视图
修改base.html 我们将注销链接放到{% if user.is_authenticated %}中,使得仅当用户登录后才能看见它
learning Log -
Topics -
{% if user.is_authenticated %}
Hello, {{user.username}}.
log out
{% else %}
log in
{% endif %}
{% block content %}{% endblock content %}
输入http://localhost:8000/
注册页面
来创建一个让新用户能够注册的页面 我们将使用Django提供的表单UserCreationForm,但
编写自己的视图函数和模板
users/urls.py
"""为应用程序users定义URL模式"""
from django.conf.urls import url
from django.contrib.auth.views import login
from . import views
urlpatterns = [
# 登录页面
url(r'^login/$', login, {'template_name' : 'users/login.html'}, name='login'),
# 注销
url(r'^logout/$', views.logout_view, name="logout"),
# 注册页面
url(r'^register/$', views.register, name='register'),
]
这个模式与URLhttp:localhost:8000/users/register匹配,并将请求发送给我们即将编写的函数register()
视图函数register()
def register(request):
"""注册新用户"""
if request.method != 'POST':
# 显示空的注册表单
form = UserCreationForm()
else:
# 处理填写好的表单
form = UserCreationForm(data = 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)
{% extends "learning_logs/base.html" %}
{% block content %}
{% endblock content %}
链接到注册页面
修改base.html
learning Log -
Topics -
{% if user.is_authenticated %}
Hello, {{user.username}}.
log out
{% else %}
register -
log in
{% endif %}
{% block content %}{% endblock content %}
点击注册按钮,包含用户名和密码就会被检查是否合法,然后保存到数据库中,最后重定向到主页,并提示你已经登录