Django Auth登录实战

前言

目标:实现用户登录和注销功能。涉及django登录知识点,如登录的用户名密码如何验证,输出错误如何提示,当用户未登陆时访问功能页面如何让用户去登录(DjangoAuth,类似过滤器)等。

效果图

 

开发计划

  • 部门管理---已完成
  • 用户管理---已完成
  • 认证(登录/注销)---已完成
  • 数据统计---开发中
  • 文件上传---待开发

...........

 

Cookie与Session

Cookie 和 Session 是Web开发中用于跟踪用户状态和识别用户的两种技术。


Cookie 是一个小型的数据文件,由网站创建并保存在用户的计算机或其他设备上,用于存储用户的浏览信息和个人偏好。每当用户访问该网站时,浏览器会将Cookie发送到服务器,服务器通过这些信息来识别用户,并为其提供定制化的内容或记住用户的登录状态。Cookie可以设置为在浏览器关闭后立即过期,也可以设置为在未来的某个日期过期。


Session 是一种在服务器端存储用户数据的技术。当用户访问网站并执行某些操作(如登录、购物等)时,服务器会创建一个Session,并为该用户分配一个唯一的ID。这个ID通常存储在用户浏览器的Cookie中,但也可以通过其他方法传递,如URL参数或隐形表单字段。服务器使用这个ID来识别用户,并在用户会话期间保存和检索用户数据。与Cookie不同,Session数据存储在服务器上,因此可以存储更多的数据,且不会受到浏览器存储限制的影响。


共同点
都用于跟踪用户状态。
都可以用来存储用户偏好、购物车内容、登录信息等。


不同点
存储位置:Cookie存储在客户端,Session存储在服务器端。
存储容量:Cookie有大小限制,Session通常没有限制。
安全性:Session通常比Cookie更安全,因为敏感数据存储在服务器端。
持久性:Cookie可以设置过期时间,Session通常在用户会话结束后或服务器重启时消失。
性能:Session需要服务器资源来维持,而Cookie则完全由客户端处理。

代码案例

登录逻辑

views.py

def login(request):
"""用户登录"""if request.method == 'GET':form = LoginForm()return render(request, 'login.html', {'form':form})form = LoginForm(request.POST)# 表单字段验证if form.is_valid():# 查询数据库匹配用户名密码是否正确user_obj = models.UserInfo.objects.filter(**form.cleaned_data).first()print(user_obj)if not user_obj:form.add_error('password', '用户名或密码错误')return render(request, 'login.html', {'form': form})request.session['info'] = {'id': user_obj.id, 'username': user_obj.username}# 设置 session 过期时间为30分钟request.session.set_expiry(60 * 30)return redirect('/user/list/')return render(request, 'login.html', {'form', form})def logout(request):
"""用户注销"""request.session.flush()return redirect('/login/')class LoginForm(BootstrapForm):username = forms.CharField(label="用户名",widget=forms.TextInput,required=True)password = forms.CharField(label="密码",widget=forms.PasswordInput(render_value=True),required=True,)

Django中间件过滤逻辑

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirectclass AuthMiddleware(MiddlewareMixin):def process_request(self, request):# 0.排除那些不需要登录就能访问的页面#   request.path_info 获取当前用户请求的URL /login/if request.path_info in ["/login/", "/image/code/"]:return# 1.读取当前访问的用户的session信息,如果能读到,说明已登陆过,就可以继续向后走。info_dict = request.session.get("info")# print(info_dict)if info_dict:return# 2.没有登录过,重新回到登录页面return redirect("/login/")

然后在settings.py配置中间件

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','ums.middleware.auth.AuthMiddleware',    # 新增位置
]

源代码

Gitee:django-ums: 基于Django Python Web框架 + MySQL + Bootstrap 开发的用户管理系统, 目前包括:部门管理、用户管理、认证-注册登录、文件上传等功能。记得Star关注项目更新!

关注我,我会不断更新 Django Web 开发案例,助力您熟练掌握Django。

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

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

相关文章

linux虚拟机网络不通,如何配置ip解决网络问题

续接前文 Hyper-V创建linux虚拟机,共享wifi网络-CSDN博客 创建虚拟机后,网络都正常,可以使用,今天的一次异常关机后(电源不小心拔掉了),再次打开这个虚拟机,网络都失效了。。。。 …

CSS 压重按钮 效果

<template><view class="cont"><div class="container"><div class="pane"><!-- 选项1 --><label class="label" @click="handleOptionClick(0)":style="{ color: selectedOption ==…

java基于ssm的线上选课系统的设计与实现论文

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对学生选课信息管理的提升&#x…

mysql聚簇索引和非聚簇索引

目录 InnoDB引擎MylSAM引擎聚簇索引的优点和缺点参考 聚簇索引和非聚簇索引的区别&#xff1a;叶节点是否存放一整行记录。 聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。 非聚簇索引:将数据与索引分开存储&#xff0c;索引结构的叶子节点指向了数据对…

在vscode中创建任务编译module源文件

接昨天的文章 [创建并使用自己的C模块&#xff08;Windows10MSVC&#xff09;-CSDN博客]&#xff0c;觉得每次编译转到命令行下paste命令过于麻烦&#xff0c;于是研究了一下在vscode中创建自动编译任务。 经过尝试&#xff0c;在task.json中增加如下代码&#xff1a; {"…

Cloud模型matlab

学习资料python 多维正态云python 预备知识&#xff1a; 如何获取具有特定均值和方差的正态分布随机数。首先&#xff0c;初始化随机数生成器&#xff0c;以使本示例中的结果具备可重复性。 rng(0,twister);基于均值为 500 且标准差为 5 的正态分布创建包含 1000 个随机值的向…

将yolov8的检测框从正框修改为旋转框需要做那些修改?

将yolov8项目修改为yolov8_obb项目需要修改模型结构(增加角度预测)、dataloader(使其支持dota格式数据)、修改TaskAlignedAssigner(使其支持带角度的bbox)、修改loss(新增对角度的训练)、修改metric(将hbb指标titile修改为obb)、修改绘图代码(使其能绘制旋转框)。 …

Docker(八)Python+旧版本chrome+selenium+oss2+fastapi镜像制作

目录 一、背景二、能力三、核心流程图四、制作镜像1.资源清单2.Dockerfile3.制作镜像 五、启动测试 一、背景 近几年我们线下的创业团队已从零到一开发过好几个小程序项目&#xff0c;都是和体育相关。其中生成海报分享图片好像都是不可或缺的功能。之前的项目老板给的时间都比…

Vmware ESXI上安装的虚拟机无法开启

背景 今天看下了Vmware ESXI上安装的虚拟机&#xff0c;点击无反应&#xff0c;也无法开启&#xff0c;日志提示“已打开电源&#xff0c;无法操作”。 注意 注意查看&#xff0c;虚拟机无法启动提示的内容。(当前磁盘文件是否可以在存储中找到&#xff0c;一般是vmdk结尾的)…

智创有术开发公司,星潮宇宙开发。

2024年&#xff0c;星潮宇宙全网首发&#xff0c;一个全新的赛道将被开启&#xff0c;这将对游戏产业产生深远的影响。本文将深入探讨这场首发的对接团队以及他们的突破性举措&#xff0c;以展示其对游戏界的重要意义。 星潮宇宙全网首发概述 星潮宇宙的全网首发意味着将有一…

IP地址定位技术筑牢网络安全防线

随着互联网技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为人们关注的焦点。如何有效防范和打击网络犯罪&#xff0c;维护国家安全和社会稳定&#xff0c;是摆在我们面前的一项紧迫任务。IP地址定位技术作为网络安全领域的一项重要技术&#xff0c;在防范和打…

最新GPT4.0使用教程,AI绘画,ChatFile文档对话总结+GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…