当前位置: 首页 > news >正文

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的设置

相关文章:

Django登录注销视图

Django在身份验证框架中包含了一些你可以直接使用的表单和视图。在大多数情况下&#xff0c;可以使用默认的Django认证视图。 Django在django.contrib.auth.views提供了以下基于类的视图来处理身份验证&#xff1a; LoginView&#xff1a;处理登录表单并登录用户 LogoutView&a…...

云原生到底是什么意思

云原生到底是什么意思&#xff1f; 引言 随着云计算技术的迅速发展&#xff0c;云原生成为了一个备受关注的话题。云原生不仅仅是一种新的软件架构&#xff0c;更是一种变革性的开发方法论。本文将深入解析云原生的意义、特点以及为什么它在现代软件开发中变得如此重要。 云…...

【银行测试】银行项目,信用卡业务测试+常问面试(三)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 银行测试-信用卡业…...

AI大模型学习笔记之二:什么是 AI 大模型的训练和推理?

在人工智能&#xff08;AI&#xff09;的领域中&#xff0c;我们经常听到训练&#xff08;Training) 和 推理&#xff08;Inference) 这两个词汇&#xff0c;它们是构建强大 AI 模型的关键步骤。我们通过类比人类的学习过程来理解这两个概念&#xff0c;可以更加自然而生动地理…...

【MATLAB源码-第113期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 POA&#xff08;孔雀优化算法&#xff09;是一种基于孔雀羽毛开屏行为启发的优化算法。这种算法模仿孔雀通过展开其色彩斑斓的尾羽来吸引雌性的自然行为。在算法中&#xff0c;每个孔雀代表一个潜在的解决方案&#xff0c;而…...

iphone 5s的充电时序原理图纸,iPAD充电讲解

上一篇写了iphone 5的时序。那是电池供电的开机时序。iphone 5s也是差不多的过程&#xff0c;不说了。现在看iphone5s手机充电时候的时序。iphone5s充电比iphone5充电简单了很多。 首先是usb接口接到手机上&#xff0c;usb线连接到J7接口上。J7接口不只是接usb&#xff0c;还能…...

react基础入门

1&#xff0c;了解react react并不是一个MVC框架&#xff0c;他只是一个很强大的javaScript库&#xff0c;主要作用是用来构建UI界面。 react的核心是封装一个个大大小小的组件&#xff08;小到一个按钮&#xff0c;大到一个页面&#xff09;来构建复杂的UI界面&#xff0c;每…...

spring boot学习第八篇:通过spring boot、jedis实现秒单

参考&#xff1a;Redis实现分布式锁的7种方案 - 知乎 1、 准备数据库表&#xff0c;如下SQL表示库存表&#xff0c;有主键ID和库存数量字段 CREATE TABLE t_stock (id bigint(20) NOT NULL AUTO_INCREMENT,quantity bigint(20) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEF…...

NineAi 新版AI系统网站源码 ChatGPT

简介: Nine AI.ChatGPT是基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。 NineAi 新版A…...

开源监控服务一瞥:Prometheus、Grafana、Zabbix、Nagios、Icinga和Open-Falcon

前言 随着信息技术的发展&#xff0c;监控服务在维护系统稳定性和性能方面变得越来越重要。本文将比较一些流行的开源监控服务&#xff0c;以帮助你选择适合你需求的解决方案。 监控服务对比 监控服务特点优势不足性能扩展性安全性Prometheus- 多维度数据模型- 监控容器化环…...

使用WAF防御网络上的隐蔽威胁之扫描器

在网络安全领域&#xff0c;扫描器是用于侦察和识别网络系统漏洞的工具。 它们可以帮助网络管理员识别安全漏洞&#xff0c;也可能被攻击者用来寻找攻击目标。 扫描器的基本概念 定义&#xff1a;扫描器是一种自动化工具&#xff0c;用于探测网络和服务器中的漏洞、开放端口、…...

企业信息安全管理制度

随着信息化程度的日益推进&#xff0c;企业信息的脆弱性也日益暴露。如何规范日趋复杂的信息安全保障体系建设&#xff0c;如何进行信息风险评估保护企业的信息资产不受侵害&#xff0c;已成为当前行业实现信息化运作亟待解决的问题。 一、企业的信息及其安全隐患 在我公司&am…...

Qt中的线程池

Qt中的线程池 目录 1 为什么需要线程池 2 Qt中有哪些方式实现线程池 3 如何通过QThreadPool类实现线程池 4 如何通过QtConcurrent库实现线程池 5 如何通过自定义的方式实现线程池 5 小结 1 为什么需要线程池 线程池是多线程编程中常用的一种技术&#xff0c;可以帮助管理系统中…...

使用Spring Boot集成中间件:Elasticsearch基础->提高篇

使用Spring Boot集成中间件&#xff1a;Elasticsearch基础->提高篇 导言 Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;广泛用于构建实时的搜索和分析应用。在本篇博客中&#xff0c;我们将深入讲解如何使用Spring Boot集成Elasticsearch&#xff0c;实现数…...

【Docker】Dockerfile构建最小镜像

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 前言 一.Dockerfile是什么 二.Dock…...

【严重】GitLab 以其他用户身份执行 Slack 命令

漏洞描述 GitLab 是由GitLab公司开发的、基于Git的集成软件开发平台。使用 Slack 命令在 Slack 聊天环境中运行常见的 GitLab 操作。 GitLab 受影响版本中&#xff0c;由于配置Slack/Mattermost 集成时&#xff0c;未正确验证用户身份信息&#xff0c;导致攻击者可以使用其他…...

【卡梅德生物】纳米抗体文库构建

纳米抗体文库构建服务是一项提供定制化纳米抗体文库的服务&#xff0c;旨在满足研究者和生物制药公司对高质量抗体的需求。这项服务通常包括以下主要步骤&#xff1a; 1.抗原设计和制备&#xff1a; -客户提供目标抗原信息&#xff0c;或由服务提供商协助设计抗原。 -抗原制…...

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 使用…...

01章【JAVA开发入门】

计算机基本概念 计算机组成原理 计算机组装 计算机&#xff1a;电子计算机&#xff0c;俗称电脑。是一种能够按照程序运行&#xff0c;自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成&#xff0c;没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、…...

ARM day1

一、概念 ARM可以工作的七种模式用户、系统、快中断、中断、管理、终止、未定义ARM核的寄存器个数 37个32位长的寄存器&#xff0c;当前处理器的模式决定着哪组寄存器可操作&#xff0c;且任何模式都可以存取&#xff1a; PC(program counter程序计数器) CPSR(current program…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...