提高怎样做网站的外链,风兰网络,怎么对页面颜色进行设计,建设银行网上营业厅官方网站下载目录
19.2.3 注销
1. 注销URL
urls.py
2. 视图函数logout_view()
views.py
3. 链接到注销视图
base.html
19.2.4 注册页面
1. 注册页面的URL模式
urls.py
2. 视图函数register()
views.py
3. 注册模板
register.html
4. 链接到注册页面
base.html
注意
19.3 …
目录
19.2.3 注销
1. 注销URL
urls.py
2. 视图函数logout_view()
views.py
3. 链接到注销视图
base.html
19.2.4 注册页面
1. 注册页面的URL模式
urls.py
2. 视图函数register()
views.py
3. 注册模板
register.html
4. 链接到注册页面
base.html
注意
19.3 让用户拥有自己的数据
19.3.1 使用login_required 限制访问
1. 限制对topics页面的访问
views.py
settings.py
2. 全面限制对项目“学习笔记”的访问
views.py
往期快速传送门在文章最后
感谢大家的支持欢迎订阅收藏专栏将持续更新 19.2.3 注销 现在需要提供一个让用户注销的途径。我们不创建用于注销的页面而让用户只需单击一个 链接就能注销并返回到主页。为此我们将为注销链接定义一个URL模式编写一个视图函数 并在base.html中添加一个注销链接。 1. 注销URL 下面的代码为注销定义了URL模式该模式与URL http://locallwst:8000/users/logout/匹配。修 改后的users/urls.py如下 urls.py --snip--
urlpatterns [# 登录页面--snip--# 注销url(r^logout/$, views.logout_view, namelogout),
] 这个URL模式将请求发送给函数logout_view()。这样给这个函数命名旨在将其与我们将在 其中调用的函数logout()区分开来请确保你修改的是users/urls.py而不是learning_log/ urls.py 2. 视图函数logout_view() 函数logout_view()很简单只是导入Django函数logout()并调用它再重定向到主页。请 打开users/views.py并输入下面的代码 views.py from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
1 from django.contrib.auth import logout
def logout_view(request):注销用户
2 logout(request)
3 return HttpResponseRedirect(reverse(learning_logs:index)) 我们从django.contrib.auth中导入了函数logout()见1。在2处我们调用了函数logout() 它要求将request对象作为实参。然后我们重定向到主页见3。 3. 链接到注销视图 现在我们需要添加一个注销链接。我们在base.html中添加这种链接让每个页面都包含它 我们将它放在标签{% if user.is_authenticated %}中使得仅当用户登录后才能看到它 base.html --snip—{% if user.is_authenticated %}Hello, {{ user.username }}.a href{% url users:logout %}log out/a{% else %}a href{% url users:login %}log in/a{% endif %}
--snip-- 图19-5显示了用户登录后看到的主页。这里的重点是创建能够正确工作的网站因此几乎没 有设置任何样式。确定所需的功能都能正确运行后我们将设置这个网站的样式使其看起来更 专业。 19.2.4 注册页面 下面来创建一个让新用户能够注册的页面。我们将使用Django提供的表单UserCreationForm 但编写自己的视图函数和模板 1. 注册页面的URL模式 下面的代码定义了注册页面的URL模式它也包含在users/urls.py中 urls.py --snip--
urlpatterns [# 登录页面--snip--# 注册页面url(r^register/$, views.register, nameregister),
] 这个模式与URL http://localhost:8000/users/register/匹配并将请求发送给我们即将编写的函 数register()。 2. 视图函数register() 在注册页面首次被请求时视图函数register()需要显示一个空的注册表单并在用户提交 填写好的注册表单时对其进行处理。如果注册成功这个函数还需让用户自动登录。请在 users/views.py中添加如下代码 views.py from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.forms import UserCreationForm
def logout_view(request):
--snip--
def register(request):注册新用户if request.method ! POST:# 显示空的注册表单
1 form UserCreationForm()else:# 处理填写好的表单
2 form UserCreationForm(datarequest.POST)
3 if form.is_valid():
4 new_user form.save()# 让用户自动登录再重定向到主页
5 authenticated_user authenticate(usernamenew_user.username,passwordrequest.POST[password1])
6 login(request, authenticated_user)
7 return HttpResponseRedirect(reverse(learning_logs:index))context {form: form}return render(request, users/register.html, context) 我们首先导入了函数render()然后导入了函数login()和authenticate()以便在用户正确 地填写了注册信息时让其自动登录。我们还导入了默认表单UserCreationForm。在函数register() 中我们检查要响应的是否是POST请求。如果不是就创建一个UserCreationForm实例且不给 它提供任何初始数据见1。 如果响应的是POST请求我们就根据提交的数据创建一个UserCreationForm实例见2 并检查这些数据是否有效就这里而言是用户名未包含非法字符输入的两个密码相同以及 用户没有试图做恶意的事情。 如果提交的数据有效我们就调用表单的方法save()将用户名和密码的散列值保存到数据 库中见4。方法save()返回新创建的用户对象我们将其存储在new_user中。 保存用户的信息后我们让用户自动登录这包含两个步骤。首先我们调用authenticate() 并将实参new_user.username和密码传递给它见5。用户注册时被要求输入密码两次由于 表单是有效的我们知道输入的这两个密码是相同的因此可以使用其中任何一个。在这里我 们从表单的POST数据中获取与键password1相关联的值。如果用户名和密码无误方法 authenticate()将返回一个通过了身份验证的用户对象而我们将其存储在authenticated_user 中。接下来我们调用函数login()并将对象request和authenticated_user传递给它见6 这将为新用户创建有效的会话。最后我们将用户重定向到主页见7其页眉中显示了一条 个性化的问候语让用户知道注册成功了。 3. 注册模板 注册页面的模板与登录页面的模板类似请务必将其保存到login.html所在的目录中 register.html {% extends learning_logs/base.html %}
{% block content %}form methodpost action{% url users:register %}{% csrf_token %}{{ form.as_p }}button namesubmitregister/buttoninput typehidden namenext value{% url learning_logs:index %} //form
{% endblock content %} 这里也使用了方法as_p让Django在表单中正确地显示所有的字段包括错误消息——如果 用户没有正确地填写表单。 4. 链接到注册页面 接下来我们添加这样的代码即在用户没有登录时显示到注册页面的链接 base.html --snip--{% if user.is_authenticated %}Hello, {{ user.username }}.a href{% url users:logout %}log out/a{% else %}a href{% url users:register %}register/a -a href{% url users:login %}log in/a{% endif %}
--snip-- 现在已登录的用户看到的是个性化的问候语和注销链接而未登录的用户看到的是注册链 接和登录链接。请尝试使用注册页面创建几个用户名各不相同的用户账户。 在下一节我们将对一些页面进行限制仅让已登录的用户访问它们我们还将确保每个主 题都属于特定用户。 注意
这里的注册系统允许用户创建任意数量的账户。有些系统要求用户确认其身份发送一 封确认邮件用户回复后其账户才生效。通过这样做系统生成的垃圾账户将比这里使 用的简单系统少。然而学习创建应用程序时完全可以像这里所做的那样使用简单 的用户注册系统。 19.3 让用户拥有自己的数据 用户应该能够输入其专有的数据因此我们将创建一个系统确定各项数据所属的用户再 限制对页面的访问让用户只能使用自己的数据。 在本节中我们将修改模型Topic让每个主题都归属于特定用户。这也将影响条目因为 每个条目都属于特定的主题。我们先来限制对一些页面的访问。 19.3.1 使用login_required 限制访问 Django提供了装饰器login_required让你能够轻松地实现这样的目标对于某些页面只 允许已登录的用户访问它们。装饰器decorator是放在函数定义前面的指令Python在函数运行前根据它来修改函数代码的行为。下面来看一个示例。 1. 限制对topics页面的访问 每个主题都归特定用户所有因此应只允许已登录的用户请求topics页面。为此在 learning_logs/views.py中添加如下代码 views.py --snip--
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from .models import Topic, Entry
--snip--
login_required
def topics(request):显示所有的主题--snip-- 我们首先导入了函数login_required()。我们将login_required()作为装饰器用于视图函数 topics()——在它前面加上符号和login_required让Python在运行topics()的代码前先运行 login_required()的代码。 login_required()的代码检查用户是否已登录仅当用户已登录时Django才运行topics() 的代码。如果用户未登录就重定向到登录页面。 为实现这种重定向我们需要修改settings.py让Django知道到哪里去查找登录页面。请在 settings.py末尾添加如下代码 settings.py 项目learning_log的Django设置
--snip--
# 我的设置
LOGIN_URL /users/login/ 现在如果未登录的用户请求装饰器login_required的保护页面Django将重定向到 settings.py中的LOGIN_URL指定的URL。 要测试这个设置可注销并进入主页。然后单击链接Topics这将重定向到登录页面。接 下来使用你的账户登录并再次单击主页中的Topics链接你将看到topics页面。 2. 全面限制对项目“学习笔记”的访问 Django让你能够轻松地限制对页面的访问但你必须针对要保护哪些页面做出决定。最好先 确定项目的哪些页面不需要保护再限制对其他所有页面的访问。你可以轻松地修改过于严格的 访问限制其风险比不限制对敏感页面的访问更低。 在项目“学习笔记”中我们将不限制对主页、注册页面和注销页面的访问并限制对其他 所有页面的访问。 在下面的 learning_logs/views.py 中对除 index() 外的每个视图都应用了装饰器 login_required views.py --snip--
login_required
def topics(request):--snip--
login_required
def topic(request, topic_id):--snip--
login_required
def new_topic(request):--snip--
login_required
def new_entry(request, topic_id):--snip--
login_required
def edit_entry(request, entry_id):--snip-- 如果你在未登录的情况下尝试访问这些页面将被重定向到登录页面。另外你还不能单击 到new_topic等页面的链接。但如果你输入URL http://localhost:8000/new_topic/将重定向到登录 页面。对于所有与私有用户数据相关的URL都应限制对它们的访问。 关于“Python”的核心知识点整理大全25-CSDN博客
关于“Python”的核心知识点整理大全12-CSDN博客
往期快速传送门在文章最后
感谢大家的支持欢迎订阅收藏专栏将持续更新