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在身份验证框架中包含了一些你可以直接使用的表单和视图。在大多数情况下,可以使用默认的Django认证视图。 Django在django.contrib.auth.views提供了以下基于类的视图来处理身份验证: LoginView:处理登录表单并登录用户 LogoutView&a…...
云原生到底是什么意思
云原生到底是什么意思? 引言 随着云计算技术的迅速发展,云原生成为了一个备受关注的话题。云原生不仅仅是一种新的软件架构,更是一种变革性的开发方法论。本文将深入解析云原生的意义、特点以及为什么它在现代软件开发中变得如此重要。 云…...
【银行测试】银行项目,信用卡业务测试+常问面试(三)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行测试-信用卡业…...
AI大模型学习笔记之二:什么是 AI 大模型的训练和推理?
在人工智能(AI)的领域中,我们经常听到训练(Training) 和 推理(Inference) 这两个词汇,它们是构建强大 AI 模型的关键步骤。我们通过类比人类的学习过程来理解这两个概念,可以更加自然而生动地理…...
【MATLAB源码-第113期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 POA(孔雀优化算法)是一种基于孔雀羽毛开屏行为启发的优化算法。这种算法模仿孔雀通过展开其色彩斑斓的尾羽来吸引雌性的自然行为。在算法中,每个孔雀代表一个潜在的解决方案,而…...
iphone 5s的充电时序原理图纸,iPAD充电讲解
上一篇写了iphone 5的时序。那是电池供电的开机时序。iphone 5s也是差不多的过程,不说了。现在看iphone5s手机充电时候的时序。iphone5s充电比iphone5充电简单了很多。 首先是usb接口接到手机上,usb线连接到J7接口上。J7接口不只是接usb,还能…...
react基础入门
1,了解react react并不是一个MVC框架,他只是一个很强大的javaScript库,主要作用是用来构建UI界面。 react的核心是封装一个个大大小小的组件(小到一个按钮,大到一个页面)来构建复杂的UI界面,每…...
spring boot学习第八篇:通过spring boot、jedis实现秒单
参考:Redis实现分布式锁的7种方案 - 知乎 1、 准备数据库表,如下SQL表示库存表,有主键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
前言 随着信息技术的发展,监控服务在维护系统稳定性和性能方面变得越来越重要。本文将比较一些流行的开源监控服务,以帮助你选择适合你需求的解决方案。 监控服务对比 监控服务特点优势不足性能扩展性安全性Prometheus- 多维度数据模型- 监控容器化环…...
使用WAF防御网络上的隐蔽威胁之扫描器
在网络安全领域,扫描器是用于侦察和识别网络系统漏洞的工具。 它们可以帮助网络管理员识别安全漏洞,也可能被攻击者用来寻找攻击目标。 扫描器的基本概念 定义:扫描器是一种自动化工具,用于探测网络和服务器中的漏洞、开放端口、…...
企业信息安全管理制度
随着信息化程度的日益推进,企业信息的脆弱性也日益暴露。如何规范日趋复杂的信息安全保障体系建设,如何进行信息风险评估保护企业的信息资产不受侵害,已成为当前行业实现信息化运作亟待解决的问题。 一、企业的信息及其安全隐患 在我公司&am…...
Qt中的线程池
Qt中的线程池 目录 1 为什么需要线程池 2 Qt中有哪些方式实现线程池 3 如何通过QThreadPool类实现线程池 4 如何通过QtConcurrent库实现线程池 5 如何通过自定义的方式实现线程池 5 小结 1 为什么需要线程池 线程池是多线程编程中常用的一种技术,可以帮助管理系统中…...
使用Spring Boot集成中间件:Elasticsearch基础->提高篇
使用Spring Boot集成中间件:Elasticsearch基础->提高篇 导言 Elasticsearch是一个开源的分布式搜索和分析引擎,广泛用于构建实时的搜索和分析应用。在本篇博客中,我们将深入讲解如何使用Spring Boot集成Elasticsearch,实现数…...
【Docker】Dockerfile构建最小镜像
🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 前言 一.Dockerfile是什么 二.Dock…...
【严重】GitLab 以其他用户身份执行 Slack 命令
漏洞描述 GitLab 是由GitLab公司开发的、基于Git的集成软件开发平台。使用 Slack 命令在 Slack 聊天环境中运行常见的 GitLab 操作。 GitLab 受影响版本中,由于配置Slack/Mattermost 集成时,未正确验证用户身份信息,导致攻击者可以使用其他…...
【卡梅德生物】纳米抗体文库构建
纳米抗体文库构建服务是一项提供定制化纳米抗体文库的服务,旨在满足研究者和生物制药公司对高质量抗体的需求。这项服务通常包括以下主要步骤: 1.抗原设计和制备: -客户提供目标抗原信息,或由服务提供商协助设计抗原。 -抗原制…...
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开发入门】
计算机基本概念 计算机组成原理 计算机组装 计算机:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、…...
ARM day1
一、概念 ARM可以工作的七种模式用户、系统、快中断、中断、管理、终止、未定义ARM核的寄存器个数 37个32位长的寄存器,当前处理器的模式决定着哪组寄存器可操作,且任何模式都可以存取: PC(program counter程序计数器) CPSR(current program…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
