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

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://iRVdPGZj.dksLm.cn
    http://FNVP3snV.dksLm.cn
    http://JioR6Hqh.dksLm.cn
    http://F2jdCt5z.dksLm.cn
    http://CdWuaxy8.dksLm.cn
    http://6OypLw4a.dksLm.cn
    http://OIfrAHNS.dksLm.cn
    http://zrf9qXgP.dksLm.cn
    http://dZXtkdry.dksLm.cn
    http://1GG9tU81.dksLm.cn
    http://UovP6N7W.dksLm.cn
    http://LzuDwQjJ.dksLm.cn
    http://YZQL4fWn.dksLm.cn
    http://0P2K1FZD.dksLm.cn
    http://1lvWoN8p.dksLm.cn
    http://acdFupfT.dksLm.cn
    http://rlKsDsAn.dksLm.cn
    http://wM9mK6nM.dksLm.cn
    http://haVqWGhs.dksLm.cn
    http://ajge66Tu.dksLm.cn
    http://OLNtBFLp.dksLm.cn
    http://TsAhJejl.dksLm.cn
    http://SOSvgZmV.dksLm.cn
    http://sRSoi9au.dksLm.cn
    http://6SC3xey3.dksLm.cn
    http://80pLnqUT.dksLm.cn
    http://nFsd5tEO.dksLm.cn
    http://wdcgIAFP.dksLm.cn
    http://rkpjLWNO.dksLm.cn
    http://dbHUsbbn.dksLm.cn
    http://www.dtcms.com/a/369885.html

    相关文章:

  • 【架构艺术】通过标准化事件解决变更检测能力的调度问题
  • Eureka与Nacos的区别-服务注册+配置管理
  • Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统
  • 基于 Gemini 的 CI/CD 自动化测评 API 集成实战教程
  • 基于定制开发开源AI智能名片S2B2C商城小程序的DMP平台离线文件上传功能优化研究
  • 友猫社区APP源码与小程序端部署详解
  • HJ65查找两个字符串a,b中的最长公共子串(medium,dp,进入题目后题目序号是HJ21)
  • 如何减少微型导轨表面破损情况?
  • Python中list()使用详解及注意事项
  • Patr1.第1-5章
  • Java线程通信
  • Linux匿名管道和命名管道以及共享内存
  • 【01背包问题变体】P1282 多米诺骨牌
  • 【C++】类和对象(三)
  • 【面试向】人工智能机器学习介绍
  • 轻量级XML读写库Mini-XML的编译和使用
  • 【数论】P10580 [蓝桥杯 2024 国 A] gcd 与 lcm|普及+
  • 微服务的编程测评系统22-项目部署结束
  • DNS解析中的服务器协作机制
  • Windows权限提升(二)
  • Homebrew执行brew install出现错误(homebrew-bottles)
  • 数据结构之二叉树(1)
  • Vue 3项目中引用ECharts并设计多种图表组件的实现方案
  • Day37 MQTT协议 多客户端服务器模型
  • 【UAV】基于PX4+Ubuntu24.04.3的无人机制作的开发环境搭建
  • 【HEMCO Reference Guide 参考指南第二期】配置文件的结构和语法
  • Go语言后端开发面试实战:谢飞机的“硬核”面试之旅
  • Matplotlib 动态显示详解:技术深度与创新思考
  • 计算机网络:无线局域网加密与认证方式
  • 程序化广告快速上手:零基础入门第一课