怎么进行网站设计和改版,seo是什么意思?,app引流推广怎么做,呼和浩特城乡建设网站Django在身份验证框架中包含了一些你可以直接使用的表单和视图。在大多数情况下#xff0c;可以使用默认的Django认证视图。
Django在django.contrib.auth.views提供了以下基于类的视图来处理身份验证#xff1a; LoginView#xff1a;处理登录表单并登录用户 LogoutView可以使用默认的Django认证视图。
Django在django.contrib.auth.views提供了以下基于类的视图来处理身份验证 LoginView处理登录表单并登录用户 LogoutView注销用户
Django提供了以下视图来处理密码修改 PasswordChangeView修改用户密码 PasswordChangeDoneView: 修改密码后重定向到成功视图
Django还包含以下视图来允许用户重置密码
PasswordResetView生成一个带令牌的一次性使用链接并将其发送到用户的电子邮件账户。 PasswordResetDoneView告诉用户一封包含重置密码链接的电子邮件已经发送给他们。 PasswordResetConfirmView允许用户设置新密码 PasswordResetCompleteView用户重置密码成功后重定向到成功视图。
在创建带有用户帐户的网站时上面列出的视图可以节省大量时间。 视图使用可以覆盖的默认值例如要呈现的模板的位置或者视图要使用的表单。 登录和注销视图 构建登录和注销URL
编辑urls.py
from django.urls import path,include
from django.contrib.auth import views as auth_views
from . import viewsurlpatterns [# path(login/,views.user_login,namelogin),path(login/,auth_views.LoginView.as_view(),namelogin),path(logout/,auth_views.LogoutView.as_view(),namelogout),]
注释掉之前创建的user_login视图的URL模式以使用Django认证框架的LoginView视图。我们还为LogoutView视图添加了一个URL模式。
关于account应用的基础代码请查看Django身份验证初试-CSDN博客
django.contrib.admin模块包含一些用于管理站点的身份验证模板。account应用放在INSTALLED_APPS设置的顶部这样Django就会默认使用我们的模板而不是其他应用中定义的认证模板。
INSTALLED_APPS [django.contrib.admin,#...]
构建登录模版 在account应用程序的模板目录中创建一个新目录并将其命名为registration。这是Django认证视图期望你的认证模板所在的默认路径。 在templates/registration目录下创建一个新文件命名为login.html并添加以下代码:
{% extends base.html %}
{% block title %}Log-in{% endblock %}
{% block content %}h1Log-in/h1{% if form.errors %}pYour username and password didnt match.Please try again./p{% else %}pPlease, use the following form to log-in:/p{% endif %}div classlogin-formform action{% url login %} methodpost{{ form.as_p }}{% csrf_token %}input typehidden namenext value{{ next }} /pinput typesubmit valueLog-in/p/form/div
{% endblock %}
Django默认使用位于Django .contrib.auth.forms中的AuthenticationForm表单。此表单尝试对用户进行身份验证如果登录不成功则会引发验证错误。使用{% if form.errors %}表单查找错误。这里添加了一个HTML标签INPUT 提交名为next的变量的值。当在请求中传递next参数时登录视图首先设置该变量。比如http://127.0.0.1:8000/account/login/?next/account/next参数必须是URLDjango登录视图会在用户成功登录后将用户重新定向到给定的URL。
在templates/registration目录下创建logged_out.html模板
{% extends base.html %}
{% block title %}Logged out{% endblock %}
{% block content %}h1Logged out/h1pYou have been successfully logged out. You cana href{% url login %}log-in again/a./p
{% endblock %}
这是Django在用户退出后显示的模板。
在为登录和注销视图添加了URL模式和模板之后网站就准备好让用户使用Django认证视图登录了。
构建登录视图
创建一个新视图以便在用户登录其帐户时显示仪表板。 打开account应用程序的views.py文件并向其中添加以下代码:
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth import authenticate,login
from .forms import LoginForm
from django.contrib.auth.decorators import login_requiredlogin_required
def dashboard(request):return render(request,account/dashboard.html,{section:dashboard})
使用身份验证框架的login_required装饰器来装饰视图。login_required装饰器检查当前用户是否经过身份验证。如果用户被认证执行装饰视图。如果用户没有经过身份验证它将用户重定向到登录URL并使用最初请求的URL名为next的GET参数。 使用section变量来跟踪用户正在浏览的站点部分。多个视图可能对应于同一个部分。这是定义每个视图对应的部分的一种简单方法。 现在需要为仪表板视图创建一个模板。在templates/account/目录下创建一个新文件并命名为dashboard.html。
{% extends base.html %}
{% block title %}Dashboard{% endblock %}
{% block content %}h1Dashboard/h1pWelcome to your dashboard./p{% endblock %}
然后在account应用程序的urls.py文件中为这个视图添加如下URL模式:
urlpatterns [#...path(,views.dashboard, namedashboard)
]
编辑项目的settings.py文件使用的是之前在path()函数的name属性定义的URL模式的名称。
LOGIN_REDIRECT_URL dashboard
LOGIN_URL login
LOGOUT_URL logout
LOGIN_REDIRECT_URL告诉Django如果登录成功但没有next参数应该重定向到哪个URL。LOGIN_URL重定向到用户登录的URL例如使用login_required装饰器的视图 LOGOUT_URL: 重定向到用户注销的URL
现在编辑base模版添加登录和注销链接以便将所有内容组合在一起。 当前用户由身份验证中间件在HttpRequest对象中设置。可以使用request.user访问它。即使用户没有经过身份验证您也会在请求中找到User对象。未经身份验证的用户在请求中被设置为AnonymousUser的实例。检查当前用户是否通过身份验证的最佳方法是访问其只读属性is_authenticated。
编辑base.html模板id为header的div div idheaderspan classlogoBookmarks/span{% if request.user.is_authenticated %}ul classmenuli {% if section dashboard %}classselected{% endif %}a href{% url dashboard %}My dashboard/a/lili {% if section images %}classselected{% endif %}a href#Images/a/lili {% if section people %}classselected{% endif %}a href#People/a/li/ul{% endif %}span classuser{% if request.user.is_authenticated %}Hello {{ request.user.first_name }},a href{% url logout %}Logout/a{% else %}a href{% url login %}Log-in/a{% endif %}/span/div
构建只向经过身份验证的用户显示站点的菜单。我们还检查section向相应的li项添加一个选定的类属性以便使用CSS在菜单中突出显示当前部分。 还显示用户的名字和一个链接如果用户通过身份验证则显示注销链接否则显示登录链接。
总结一下到目前为止所做的工作
已经将内置的Django认证登录和注销视图添加到项目中已经为这两个视图创建了自定义模板并定义了一个简单的仪表板视图以便在用户登录后重定向用户。最后为Django配置了默认使用这些url的设置