Django登录注销视图

Django在身份验证框架中包含了一些你可以直接使用的表单和视图。在大多数情况下,可以使用默认的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,name='login'),path("login/",auth_views.LoginView.as_view(),name='login'),path("logout/",auth_views.LogoutView.as_view(),name='logout'),]

注释掉之前创建的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 %}<h1>Log-in</h1>{% if form.errors %}<p>Your username and password didn't match.Please try again.</p>{% else %}<p>Please, use the following form to log-in:</p>{% endif %}<div class="login-form"><form action="{% url 'login' %}" method="post">{{ form.as_p }}{% csrf_token %}<input type="hidden" name="next" value="{{ next }}" /><p><input type="submit" value="Log-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参数必须是URL,Django登录视图会在用户成功登录后将用户重新定向到给定的URL。

在templates/registration目录下创建logged_out.html模板

{% extends "base.html" %}
{% block title %}Logged out{% endblock %}
{% block content %}<h1>Logged out</h1><p>You have been successfully logged out. You can<a 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_required@login_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 %}<h1>Dashboard</h1><p>Welcome to your dashboard.</p>{% endblock %}

然后,在account应用程序的urls.py文件中为这个视图添加如下URL模式:

urlpatterns = [#...path("",views.dashboard, name='dashboard')
]

编辑项目的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 id="header"><span class="logo">Bookmarks</span>{% if request.user.is_authenticated %}<ul class="menu"><li {% if section == "dashboard" %}class="selected"{% endif %}><a href="{% url 'dashboard' %}">My dashboard</a></li><li {% if section == "images" %}class="selected"{% endif %}><a href="#">Images</a></li><li {% if section == "people" %}class="selected"{% endif %}><a href="#">People</a></li></ul>{% endif %}<span class="user">{% 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的设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL修炼手册6:子查询入门:在查询中嵌套查询

目录 写在开头1 子查询基础概念1.1 了解子查询的基本概念1.2 子查询与主查询的关系 2 标量子查询详细展开2.1 学会使用标量子查询2.1.1 在SELECT语句中使用2.1.2 在WHERE子句中使用2.1.3 在ORDER BY子句中使用 2.2 标量子查询在条件判断中的应用2.2.1 使用比较运算符2.2.2 使用…

微信小程序---如何创建分包

1.在项目根目录中&#xff0c;创建分包的根目录&#xff0c;名为subpkg&#xff0c;这个名字可以自己定义 2.在 pages.json 中&#xff0c;和 pages 节点平级的位置声明 subPackages 节点&#xff0c;用来定义分包相关的结构&#xff1a; 3.在分包目录&#xff0c;点击右键新建…

Docker容器运行多个php,一个正常另一个报502

问题是解决了&#xff0c;但是并不知道问题出在哪儿 docker-compse.yml文件并没有什么改动 在解决这个问题的过程中多次重新打包镜像配置运行容器&#xff0c;没有任何效果&#xff0c;最多就是原本正常的站点也变得不可用 我在看nginx的配置时&#xff0c;发现可以在locati…

Python UI框架库之kivy使用详解

概要 Python是一种广泛使用的编程语言&#xff0c;而Kivy是一个用于创建跨平台移动应用和多点触控应用的开源Python框架。Kivy的设计目标是提供一种简单而强大的方式来构建富有创意的用户界面和交互体验。本文将详细介绍Kivy的基本概念、核心特性、布局系统、用户界面设计和实…

手写webpack核心原理,支持typescript的编译和循环依赖问题的解决

主要知识点 babel读取代码的import语句算法&#xff1a;bfs遍历依赖图为浏览器定义一个require函数的polyfill算法&#xff1a;用记忆化搜索解决require函数的循环依赖问题 Quick Start GitHub&#xff1a;https://github.com/Hans774882968/mini-webpack npm install npm…

[zabbix] zabbix监控其他

一、温习zabbix自定义监控 二、zabbix 自动发现与自动注册 2.1 zabbix 自动发现 //zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数…

Android系统开发之浅谈广播接收器回调

广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver&#xff0c;是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢&#xff1f; 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…

安全帽/反光衣检测AI边缘计算智能分析网关V4如何修改IP地址?

智能分析网关V4是TSINGSEE青犀推出的一款AI边缘计算智能硬件&#xff0c;硬件采用BM1684芯片&#xff0c;集成高性能8核ARM A53&#xff0c;主频高达2.3GHz&#xff0c;INT8峰值算力高达17.6Tops&#xff0c;FB32高精度算力达到2.2T&#xff0c;硬件内置了近40种AI算法模型&…

MySQL索引和视图基础练习题

一、创建表的要求 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名Cno为主键 学生选课表&#xff1a;SC (S…

C++(1) —— 基础语法入门

目录 一、C初识 1.1 第一个C程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 关键字 2.3 实型&#xff08;浮点型&#xff09; 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -投票帖子排行实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

Redis实现全局唯一Id

一、全局唯一ID 每个店铺都可以发布优惠券&#xff1a; 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显 受单表数据量的限制 场景分析&#xff1a;如果我们的…

两整数之和

题目链接 两整数之和 题目描述 注意点 不使用 运算符 和 - ​​​​​​​&#xff0c;计算并返回两整数之和-1000 < a, b < 1000 解答思路 需要用位运算来模拟加法&#xff0c;关键是要找到相加的和以及进位1的部分。如果不考虑进位的话&#xff0c;相加可以运用异…

Redis内部数据结构Dict结构详解

目录 dict的数据结构定义 dict的创建&#xff08;dictCreate&#xff09; dict的查找&#xff08;dictFind&#xff09; dict的插入&#xff08;dictAdd和dictReplace&#xff09; dict的删除&#xff08;dictDelete&#xff09; 如果你使用过Redis&#xff0c;一定会像我一样对…

STM32F103标准外设库——GPIO 输入、输出 (五)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

高级 Python 面试问题与解答

文章目录 专栏导读1.什么是PIP&#xff1f;2.什么是 zip 函数&#xff1f;3.Python 中的 __init __ () 是什么&#xff1f;4.Python 中的访问说明符是什么&#xff1f;5.Python 中的单元测试是什么&#xff1f;6.Python全局解释器锁&#xff08;GIL&#xff09;&#xff1f;7.P…

浪花 - 搜索标签前后端联调

前传&#xff1a;浪花 - 根据标签搜索用户-CSDN博客 目录 一、完善后端搜索标签接口 二、前后端搜索标签接口的对接 1. 使用 Axios 发送请求 2. 解决跨域问题 3. Axios 请求传参序列化 4. 接收后端响应数据 5. 处理后端响应数据格式 6. 搜索结果为空的页面展示 附&am…

区域入侵/区域人数统计AI边缘计算智能分析网关V4如何修改IP地址?

智能分析网关V4是TSINGSEE青犀推出的一款AI边缘计算智能硬件&#xff0c;硬件采用BM1684芯片&#xff0c;集成高性能8核ARM A53&#xff0c;主频高达2.3GHz&#xff0c;INT8峰值算力高达17.6Tops&#xff0c;FB32高精度算力达到2.2T&#xff0c;硬件内置了近40种AI算法模型&…

C++ 后端面试 - 题目汇总

文章目录 &#x1f37a; 非技术问题&#x1f37b; 基本问题&#x1f942; 请自我介绍&#xff1f;&#x1f942; 你有什么问题需要问我的&#xff1f; &#x1f37b; 加班薪资&#x1f942; 你对加班有什么看法&#xff1f;&#x1f942; 你的薪资期望是多少&#xff1f;【待回…

如何避免知识付费小程序平台的陷阱?搭建平台的最佳实践

随着知识经济的兴起&#xff0c;知识付费已经成为一种趋势。越来越多的人开始将自己的知识和技能进行变现&#xff0c;而知识付费小程序平台则成为了一个重要的渠道。然而&#xff0c;市面上的知识付费小程序平台琳琅满目&#xff0c;其中不乏一些不良平台&#xff0c;让老实人…