Django 项目6:表单与认证系统

目录

1、form 表单

2、session 保存状态

3、Admin 后台

4、Auth 系统


1、form 表单

(1)创建 form.py 文件,并完善

from django import forms# 定义一个表单类
class Register(forms.Form):user = forms.CharField(max_length=30, label='用户名')pw = forms.CharField(label='密码', min_length=6, max_length=8,widget=forms.PasswordInput(attrs={'placeholder': '请输入你的密码:'}),error_messages={'min_length': '密码小于6位', 'max_length': '密码大于8位'})repw = forms.CharField(label='请再次输入密码', widget=forms.PasswordInput())phone = forms.RegexField(regex='^1\d{10}$', label='手机号',error_messages={'invalid': '收入的手机号格式不对'})email = forms.EmailField(label='电子邮箱')

2、session 保存状态

(1)状态保存

  • http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
  • 客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
  • 存储方式包括cookie、session,会话一般指session对象
  • 使用cookie,所有数据存储在客户端,注意不要存储敏感信息
  • 使用session方式,所有数据存储在服务器端,在客户端cookie中存储session_id
  • 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据

       注意:不同的请求者之间不会共享这个数据,与请求者一一对应

(2)创建 session 状态

# user和pw是session的键,u和p是变量名
request.session['user'] = u
request.session['pw'] = p

(3)查找 session 状态

# 第一个是需要查找的键,第二个是没找到键时返回空的值
user = request.session.get('user', '')
user = request.session.get('pw', None)
# 获取键
keys = request.session.keys()
# 获取值
values = request.session.values()
# 获取session_key
session_key = request.session.session_key

(4)删除 session 状态

del user  # 删除对应键值对的值
request.session.clear()  # 删除数据,但是会记录保持
request.session.flush()    # 直接清空

(5)setting 中设置会话(session)管理参数

# 是否关闭浏览器就关闭session
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# 是否每次请求都报错session
SESSION_SAVE_EVERY_REQUEST = False
# 设置cookie及session的失效时间,默认位两周,单位为秒
SESSION_COOKIE_AGE = 1209600

3、Admin 后台

(1)注册 admin ,在 manage.py 中执行下面代码设置 Admin 后台的用户名和密码

createsuperuser

(2)在 App 的 admin.py 中注册模板

from django.contrib import admin# Register your models here.from demo1.models import User# 注册模版方法1
# admin.site.register(User)# 注册模版方法2
# @admin.register(User)  # 启动方法1class Useradmin(admin.ModelAdmin):# 设置展示字段list_display = ['id', 'user', 'pw']# 使用 user 来跳转到修改界面list_display_links = ['user']admin.site.register(User, Useradmin)  # 启动方式2

4、Auth 系统

(1)介绍

  • User:User是auth模块中维护用户信息的关系模式(继承了models.Model),数据库中该表被命名为auth_user。
  • Group:User对象中有一个名为groups的多对多字段,多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
  • Permission:Django的auth系统提供了模型级的权限控制,即可以检查用户是否对某个数据表拥有增(add), 改(change), 删(delete)权限。

(2)功能

  • create_user 创建用户
  • authenticate 验证登录
  • login 记住用户的登录状态
  • logout 退出登录
  • is_authenticated 判断用户是否登录
  • login_required 判断用户是否登录的装饰器

       login_required的使用:

# 第一种跳转路由的方式
@login_required(login_url='需要跳转的路由')# 第二种跳转路由的方式(在steeing最后添加以下代码)
LOGIN_URL = '需要跳转的路由'

    (3)例子(创建登录的视图函数)

    def cl_login(request):if request.method == 'POST':u = request.POST.get('user')p = request.POST.get('pw')print(u, p)if User.objects.filter(username=u):print(User.objects.all())user = authenticate(username=u, password=p)# 用户是否存在if user:# 判断账号是否激活if user.is_active:# 将用户对象添加到当前会话(session)中login(request, user)# return HttpResponse('登录成功')return redirect(reverse('demo1:index'))else:return HttpResponse('用户未激活')else:return HttpResponse('用户密码或者用户名不正确')return render(request, 'demo1/demo3.html')

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

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

    相关文章

    tvm/triton/tensorrt比较

    1.tvm的主线感觉更新太慢,文档太落后,在自动驾驶领域不支持Blackwell平台,跨平台其实吹牛的更多。我觉得自动驾驶用不起来。2.性能最快的还是tensorrt/tensorrt_llm这条路,纯cuda路线面临大量cuda算子开发,比如vllm ll…

    Transform 和BERT、GPT 模型

    目录 Transform的由来 Seq2seq 模型 Transform 的内部结构 语言模型 BERT 介绍 BERT 模型的组成 分词器 位置编码 Softmax 残差结构 BERT 模型总结 Transform的由来 传统的语⾔模型,⽐如RNN(循环神经⽹络),就像⼀个“短…

    2025高教社国赛数学建模A题参考论文35页(含代码和模型)

    2025国赛数学建模竞赛A题完整参考论文 目录 摘要 1 问题背景与重述 2 问题分析 2.1 问题一分析 2.2 问题二分析 2.3 问题三分析 2.4 问题四分析 2.5 问题五分析 3 符号说明 4 模型假设 5 模型建立与求解 5.1 问题一 烟幕有效遮蔽时长…

    【Linux】常用命令汇总

    【Linux】常用命令【一】tar命令【1】可用参数【2】常用案例(1)创建归档(打包)(2)查看归档内容:​​(3)解包归档 (提取):​​【二】日志查看命令【1】基础命令…

    软考系统架构设计师之软件系统建模

    一、软件系统建模 系统建模流程包括如下: 二、人机交互设计 黄金三法则: 1、置于用户控制之下以不强迫用户进入不必要的或不希望的动作的方式来定义交互方式 提供灵活的交互 允许用户交互可以被中断和撤销 当技能级别增加时可以使交互流水化并允许定制交…

    Linux系统学习之注意事项及命令基本格式

    哈喽,你好啊,我是雷工!你要是翻过历史文章的话,肯定特别疑惑:这神经病搞得这个号到底是啥定位,究竟是分享啥类型的,咋乱七八糟的啥都有。真是个杂货铺啥都有,咋又开始分享Linux系统了…

    0基础Java学习过程记录——枚举、注解

    一、枚举1.基本介绍(1)枚举对应英文 enumeration,简写为 enum(2)枚举是一组常量的集合(3)可以理解为:枚举属于一种特殊的类,里面只包含一组有限的特定的对象2.实现方式&a…

    高效计算的源泉:深入浅出冯诺依曼模型与操作系统的管理艺术 —— 构建稳定、高效的应用基石 【底层逻辑/性能优化】

    ♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…

    性能测试-jmeter9-逻辑控制器、定时器压力并发

    课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter逻辑控制器、定时器妙用IF控制器**IF 控制器的作用**循环控制器循环控制器的作用ForEach控制器ForEach 控制器的作用…

    T:线段树入门(无区间更新)

    线段树.线段树介绍.线段树框架.理解线段树.图式整个过程.线段树代码逐层解析.代码汇总.leetcode练习.线段树介绍 线段树(SegmentTree)\;\;\;\;\;\;\;\;线段树(SegmentTree)线段树(SegmentTree) is 用于高效处理区间查询和单点修改的数据结构,和树状数组很像&#xf…

    【ISP】Charlite工具实操

    实习一周了&#xff0c;参与了客观拍摄和测试&#xff0c;复习一下nv工具 BLACK LEVEL&#xff08;黑电平&#xff09; eg&#xff1a; $ nv_ob 0 in_dir <input directory> out_name <ob file> nv_ob 0 in_dir D:\study\nvraw\ob1 out_name D:\study\nvraw\my_out…

    普蓝机器人 AutoTrack-IR-DR200 外设配置全指南

    为什么外设配置对机器人研究如此重要&#xff1f;在当今机器人技术飞速发展的时代&#xff0c;高校学生研究团队正成为创新的重要力量。无论是参加机器人竞赛、开展毕业设计&#xff0c;还是进行学术研究&#xff0c;正确配置和使用外设设备都是成功的关键。尤其学生组装一个服…

    8、Python性能优化与代码工程化

    学习目标&#xff1a;掌握Python程序性能分析和优化的通用方法&#xff0c;建立工程化开发的规范意识&#xff0c;为后续AI项目开发奠定坚实的编程基础在数据科学和AI开发中&#xff0c;代码性能往往决定了项目的可行性。一个处理时间从几小时缩短到几分钟的优化&#xff0c;可…

    【算法--链表】117.填充每个节点的下一个右侧节点指针Ⅱ--通俗讲解

    通俗算法讲解推荐阅读: 【算法–链表】83.删除排序链表中的重复元素–通俗讲解 【算法–链表】删除排序链表中的重复元素 II–通俗讲解 【算法–链表】86.分割链表–通俗讲解 【算法】92.翻转链表Ⅱ–通俗讲解 【算法–链表】109.有序链表转换二叉搜索树–通俗讲解 【算法–链…

    分词器(Tokenizer)总结(89)

    分词器(Tokenizer)总结 分词器(Tokenizer) 分词器的词表(vocabulary)长度通常短于模型嵌入层(embedding layer)的长度。 结束标记(EOS token)应仅用于标记文本结尾,不可用于其他用途。 填充标记(PAD token)通常未预先定义,但你仍可能需要用到它: 对于生成式模型…

    19 webUI应用中 Controlnet精讲(05)-图像修复与编辑

    前面的篇章已经详细讲解了线条约束、三维关系与空间深度、人体姿态等几类controlnet的功能与应用&#xff0c;本节内容将对通过controlnet对图像修复与编辑进行讲解。 通过controlnet也可以对图片进行编辑、重绘及放大等操作&#xff0c;具体包括Recolor、Inpaint、Tile等&…

    消息推送的三种常见方式:轮询、SSE、WebSocket

    摘要&#xff1a;本文介绍消息推送的三种常见方式&#xff1a;轮询&#xff08;定时请求&#xff0c;易增负担&#xff09;与长轮询&#xff08;阻塞请求至有数据 / 超时&#xff0c;减少请求&#xff09;、SSE&#xff08;HTTP 单向实时传输&#xff0c;纯文本、自动重连&…

    论文阅读:ACL 2024 Stealthy Attack on Large Language Model based Recommendation

    总目录 大模型相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2402.14836 https://www.doubao.com/chat/19815566713551106 文章目录速览攻击方法速览一、攻击核心目标与前提1. 核心目标2. 攻击前提二、模型无关的简单…

    自动驾驶中的传感器技术43——Radar(4)

    本文对目前毫米波雷达中的天线设计进行比较全面的罗列&#xff0c;并进行简单的设计评述 1、实际设计案例 图1 涵盖能宽窄覆盖的天线设计&#xff08;无俯仰分辨率&#xff09;图2 Bosch前雷达的天线设计&#xff08;有俯仰的分辨率但比较弱&#xff0c;也涵盖了扩展覆盖&…

    使用反转法线材质球,实现切换天空盒相同的功能,优点:包体变小

    切换天空盒第一步先把SKY 天空球资源导入到工程里&#xff0c; 第二步&#xff1a;天空球文件下的SKY预制件拖入到场景里 第三步 选着SKY材质球&#xff0c;拖入自己的全景图片(图片分辨率不能超过5000*5000&#xff0c;否则手机无法显示) 如果并没有效果&#xff0c;看看图…