首页 > 其他分享 >django Form组件校验流程

django Form组件校验流程

时间:2024-09-03 23:36:26浏览次数:11  
标签:username return Form form request 校验 django user password

django中Form组件字段校验顺序:先字段内部校验,然后钩子方法校验:

from django.shortcuts import render, redirect
from django.core.validators import RegexValidator
from django import forms
from app01.utilss.mdy import md
from app01.models import Administrator, Customer

定义登录表单

class SmsLogin(forms.Form):
username = forms.CharField(
label="用户名",
min_length=6,
widget=forms.TextInput(attrs={"class": "input", "id": "email", "placeholder": "输入账户"}),
error_messages={
"min_length": "用户名至少6位",
"required": "用户名不能为空",
"invalid": "用户名格式不正确"
},
required=True,
validators=[RegexValidator(r'\d+\w+', '格式不正确')]
)
password = forms.CharField(
label="密码",
max_length=8,
widget=forms.PasswordInput(attrs={"class": "input", "id": "password", "placeholder": "输入密码"}),
error_messages={
"max_length": "最多八位",
"required": "密码不能为空",
"invalid": "密码格式不正确"
},
required=True,
validators=[RegexValidator(r'\d+\w+', '格式不正确')]
)
def clean_username(self):
# 校验成功
self.cleaned_data['username'] = self.cleaned_data['username'].strip().lower()
#返回字段
return self.cleaned_data['username']

登出视图

def login(request):
if 'user' in request.session:
del request.session['user']
return render(request, 'login.html')

短信登录视图

def smslogin(request):
if request.method == "GET":
form = SmsLogin()
# 检查用户是否已经登录,如果是则重定向到管理员主页
if request.session.get("user"):
return redirect('/home/admin/')
return render(request, 'smslogin.html', {"form": form})

# 处理POST请求
form = SmsLogin(request.POST)
if not form.is_valid():
    return render(request, 'smslogin.html', {"form": form})

# 获取验证后的数据
username = form.cleaned_data['username']
password = form.cleaned_data['password']

# 检查管理员表中是否存在匹配的用户
admin_user = Administrator.objects.filter(code=1, username=username, password=md(password)).first()
if admin_user:
    request.session["user"] = {"isadmin": True, "username": username}
    return redirect('/home/admin/')

# 检查客户表中是否存在匹配的用户
customer_user = Customer.objects.filter(code=1, username=username, password=md(password)).first()
if customer_user:
    request.session["user"] = {"isadmin": False, "username": username}
    return redirect('/home/admin/')

# 如果都没有匹配的记录,则返回错误信息
return render(request, 'smslogin.html', {'form': form, 'error': "用户名或密码错误"})

管理员主页视图

def admin(request):
if request.method == "GET":
username = request.session.get("user", {}).get("username", "")
return render(request, 'home.html', {"name": username})

标签:username,return,Form,form,request,校验,django,user,password
From: https://www.cnblogs.com/yuanyongsheng/p/18395652

相关文章

  • 高创新 | Matlab实现Transformer-GRU-SVM多变量时间序列预测
    高创新|Matlab实现Transformer-GRU-SVM多变量时间序列预测目录高创新|Matlab实现Transformer-GRU-SVM多变量时间序列预测效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现Transformer-GRU-SVM多变量时间序列预测,Transformer+门控循环单......
  • Tape-out Checklist Form
    Tape-outChecklistFormCheckItemDescriptionYes/NoNote设计文档检查设计文档完善且与最新设计版本保持一致验证文档检查验证文档完善且记录了全部验证用例及结果验证范围检查验证条目已经覆盖了所有的电路模块以及整体电路功能覆盖率检查数字设......
  • 第二章 快速上手Django框架
    1.终端安装pipinstalldjango==3.2C:\Python39 -python.exe -Scripts -pip.exe -django-admin.exe -Lib -re.py -random.py -site-pakages -django==3.2 ...2.命令行创建项目cd指定目录django-adminstartproject项目名mysite......
  • 第一章 Django基础与虚拟环境
    1.Web框架和Django框架1.1网络通信注意:局域网个人一般写程序,想要让别人访问:阿里云、腾讯云。去云平台租服务器(含公网IP)程序放在云服务器让网络中可以互相通信的双发收发数据。服务端【我的电脑】importsocket#1.监听本机的IP和端口sock=socket.socket(socke......
  • 使用自定义注解校验回款金额是否大于订单金额
    `/**自定义注解类处理器复合注解比较a表中x字段值是否大于b表中y字段值@AuthorLiZhiMin@Date2024/8/3117:34*/@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public@interfaceFieldCompareValidators{/**要查询......
  • 基于Seriall-LSTM-Transformer的自行车租赁数量预测研究(Matlab代码实现)
                            ......
  • winform实时获取系统dpi
    环境:window10框架:4.5.2由于windows10的DPI设置无法直接获取屏幕的真实长宽获取长宽代码intiH=Screen.PrimaryScreen.Bounds.Height;intiW=Screen.PrimaryScreen.Bounds.Width;两种方法:1、使用上边代码获取缩放后的长宽iH*DPI(1.25)=真实高度DPI获取方法:#reg......
  • FormCreate低代码设计器怎么实现PC、移动端多端适配
    FormCreate支持将PC端设计的 ElementPlus 表单规则在移动端渲染为VantUI风格的表单,提供了一致的用户体验,并确保在不同设备上都能良好展示。功能演示编辑功能概述通过多端适配功能,您可以确保在不同设备上的表单显示效果一致。无论是在PC端还是移动端,表单都能根据设备类型自动......
  • FormCreate 低代码表单设计器全局方法使用指南
    FormCreate提供了一系列全局方法,本指南将详细介绍这些全局方法的使用方法、配置说明,并通过示例帮助新用户快速上手。如何调用全局方法在开始使用这些方法之前,你需要先确保已经导入了formCreate。以下是如何在项目中导入并使用FormCreate的全局方法的示例。导入FormCreate首先,......
  • 这样图解Transformer应该没人看不懂了吧——Transformer工作原理
    前言本文将深入剖析Transformer的内部工作原理,详细研究其运作细节。我们将通过实际的矩阵表示和形状,观察数据如何在系统中流动,并理解每个阶段进行的计算。本文目标不仅是理解Transformer是如何工作的,更要探究它为何如此工作。架构概览正如我们在第一部分中看到的,Transformer架构的......