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

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.xdnf.cn/news/20428.html

    相关文章:

  • PostgreSQL与Greenplum数据库的编程语言连接
  • 深入理解 RequestContextHolder、ThreadLocal 与 RequestContextFilter
  • Spring 基于注解的自动化事务
  • JBoltAI:解锁企业AI数智化升级的Java利器
  • 算法与数据结构实战技巧:从复杂度分析到数学优化
  • 13-Java-面向对象-封装和this关键字
  • Jenkins运维之路(自动获得分支tag自动构建)
  • ComfyUI Easy - Use:简化ComfyUI操作的得力插件
  • echarts实现点击图表添加标记
  • MySQL MHA 高可用集群搭建
  • 5.物理服务器搭建FC
  • 决策树概念与原理
  • MySQL DBA需要掌握的 7 个问题
  • Windows权限提升(二)
  • 深蓝汽车人事调整:邓承浩升任董事长,姜海荣出任首席执行官
  • 【LeetCode热题100道笔记】对称二叉树
  • 跨域彻底讲透
  • ThinkPHP 6框架常见错误:htmlentities()函数参数类型问题解决
  • 【pyhton】函数
  • [Godot入门大全]目录
  • 【杂类】I/O
  • MiniDrive:面向自动驾驶的更高效的视觉语言模型
  • css 十大常用英文字体
  • Swift 解法详解 LeetCode 362:敲击计数器,让数据统计更高效
  • 2025高教社国赛数学建模A题参考论文35页(含代码和模型)
  • 【算法--链表】86.分割链表--通俗讲解
  • Linux基础知识(二)
  • Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统
  • Gutenberg块编辑器:WordPress 2025高效内容开发指南
  • 小智AI编译