Django项目之电商购物商城 -- 校验用户输入密码是否合法

Django项目之电商购物商城 – 校验用户输入密码是否合法

需要开发文档和前端资料的可私聊

一. 创建用户逻辑操作

1. 创建用户app – users

python manage.py startapp users

2.注册app

'users.apps.UsersConfig',

3. 创建视图

from django.shortcuts import render
from django.views import Viewclass RegisterView(View):def get(self , request):return render(request , 'register.html')def post(self , request):pass

4. 分发路由

from django.urls import path
from users import views
urlpatterns = [path('register/' , views.RegisterView.as_view())
]

注册界面展示

在这里插入图片描述

二. 创建用户模型类

  1. 创建用户模型类 , 继承Django原有user表

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    # Create your models here.class User(AbstractUser):# 创建手机号字段mobile = models.IntegerField(max_length=11 , unique=True)class Meta:db_table = 'User'
  2. 修改配置

    AUTH_USER_MODEL = 'user.User'
    
  3. 迁移数据库

    python manage.py makemigrations
    python manage.py migrate
    

三. 接受用户数据进行校验

1. 前端校验
let vm = new Vue({// 通过ID选择器找到绑定的html标签的内容el : '#app',// 修改vue的模板语法delimiters : ['[[',']]'],data : {// v-modelusername:'',password:'',password2:'',mobile:'',allow:'',image_code_url:'',uuid:'',image_code:'',sms_code:'',sms_code_tip:'获取短信验证码',// 该变量作为标记,默认允许访问sand_flag:false,// v-showerror_name:false,error_password:false,error_password2:false,error_mobile:false,error_allow:false,error_image_code:false,error_sms_code:false,// 自定义错误信息error_name_message:'',error_sms_code_message:'',},// 这个方法会在页面加载之后被调用mounted(){this.generate_image_code();},// 定义事件方法methods:{// 校验短信验证码check_sms_code() {if(this.sms_code.length != 5){this.error_sms_code = true;}  else {this.error_sms_code = false;}},//发送短信验证码send_sms_code() {// 判断作为标记的变量是否允许访问if (this.sand_flag == true ){// 当标记为true时,说明短时间内已经发送请求了,不允许访问停止方法。return;}// 标记允许访问,可以实现发送Ajax请求// 修改标记为不允许访问的状态this.sand_flag = true;let url = '/ver/sms_code/'+this.mobile+'/?uuid='+this.uuid+'&image_code='+this.image_code;axios.get(url ,{responseType: 'json'})// 请求成功.then(response => {console.log(response.data.errsg)// 实现发送短信验证码的倒计时if (response.data.code == '0'){let number = 60;console.log(123)let t = setInterval(() => {console.log(4536)// 倒计时结束if(number == 1){// 倒计时结束// 停止回调函数的执行clearInterval(t)this.sms_code_tip = '获取短信验证码';// 倒计时结束之后,重新生成图片验证码this.generate_image_code();// 倒计时结束,把标记修改为允许访问的状态this.sand_flag = false;} else {number -= 1 ;this.sms_code_tip = number +'秒';}} , 1000)} else {// 短信验证码发送失败this.error_sms_code_message = response.data.errsg;this.error_sms_code = true;}// 把标记修改为允许访问的状态this.sand_flag = false;})// 请求失败.catch(error =>{console.log(error.response)// 把标记修改为允许访问的状态this.sand_flag = false;})},// 校验图片验证码check_image_code(){if(this.image_code.length != 4){this.error_image_code = true;}  else {this.error_image_code = false;}},// 生成 图片验证码的urlgenerate_image_code(){// 通过生成uuid来对用户进行标识this.uuid = generateUUID()this.image_code_url = '/ver/image_code/'+this.uuid+'/'},// 校验用户名check_username(){// 定义用户名的规则let re = /^[A-Za-z0-9_]{5,15}$/;// 判断接收到的数据是否符合条件if(re.test(this.username)){// 数据合法this.error_name = false;} else {// 用户名不合法this.error_name = true;this.error_name_message = "用户名不合法 , 应当使用A-Za-z0-9_"}// 判断用户是否重复// 前提保证用户名合法if(this.error_name == false){// 发送ajax请求let url = '/user/username/'+ this.username +'/count/';axios.get(url , {responseType :'json'})// 请求成功.then(response => {// 获取后端传递过来的数据 response.dataif(response.data.count == 1){// 用户已存在this.error_name_message = '用户名已存在';this.error_name = true;} else {this.error_name = false;}})// 请求失败.catch(error =>{console.log(error.response)})}},// 校验密码check_password(){// 密码中合法的字符let re=/^[0-9a-zA-Z]{6,20}$/;if(re.test(this.password)){// 符合要求 , 密码字符合法this.error_password = false;} else {// 密码不合法 ,显示错误信息this.error_password = true;}},// 校验两次密码是否一致check_password2(){if(this.password2 == this.password){this.error_password2 = false;} else {this.error_password2 = true;}},// 校验手机号check_mobile(){let re =/^1[3-9]\d{9}$/;if(re.test(this.mobile)){this.error_mobile = false;} else {this.error_mobile = true;}},// 校验勾选框是否勾选check_allow(){if(this.allow){this.error_allow = false;} else {this.error_allow = true;}},// 校验表单中数据是否全部合格on_submit(){// 调用所有校验数据的方法this.check_username();this.check_password();this.check_password2();this.check_mobile();this.check_allow();// 判断error的对应值是否为true , 如果其中有一个为true则限制提交if(this.error_name == true || this.error_password == true ||this.error_password2 == true || this.error_mobile == true || this.error_allow == true){// 禁止表单提交window.event.returnValue = false;}},}})
2. 后端校验数据是否合法, 两次输入密码是否一致 – 定义forms表单
  1. 在当前app中创建forms模块

    from django import formsclass RegisterForms(forms.Form):username = forms.CharField(min_length=5,max_length=15,error_messages={"min_length":"用户名太短","max_length":"用户名太长","required":"用户名不允许为空"})password = forms.CharField(min_length=6, max_length=20,error_messages={"min_length": "密码名太短","max_length": "密码名太长","required": "密码不允许为空"})password2 = forms.CharField(min_length=6, max_length=20,error_messages={"min_length": "用户名太短","max_length": "用户名太长","required": "用户名不允许为空"})mobile = forms.IntegerField(min_length=11, max_length=11,error_messages={"min_length": "手机号不合法","max_length": "手机号不合法","required": "手机号不允许为空"})# 校验两次输入是否一致def clean(self):clean_data = super(RegisterForms, self).clean()pw = clean_data.get('password')pw2 = clean_data.get('password2')if pw != pw2:raise forms.ValidationErrorreturn clean_data
    
  2. 将forms组件传入视图进行数据校验

    class RegisterView(View):def get(self , request):return render(request , 'register.html')def post(self , request):# 将用户数据传入forms组件进行校验register_forms = RegisterForms(request.POST)# 这里先返回httpresponse进行测试if register_forms.is_valid():return HttpResponse("注册成功")return HttpResponse("注册失败")
    

    下节介绍用户名重复校验 , 图形验证码制作 , 以及短信验证码生成

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

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

相关文章

原生IP和住宅IP有什么区别?

原生IP和住宅IP在多个方面存在显著的区别。 从定义和来源来看,原生IP是指未经NAT(网络地址转换)处理的真实、公网可路由的IP地址,它直接从互联网服务提供商(ISP)获得,而不是通过代理服务器或VP…

Django初步了解

目录 一、什么是Django 二、Django的设计模式 三、涉及的英文缩写及其含义 四、安装(官方教程) 一、什么是Django Django是一个Python Web框架,可以快速开发网站,提供一站式的解决方案,包括缓存、数据库ORM、后台…

大象机器人开源协作机械臂myCobot 630 全面升级!

1. 开篇概述 在快速发展的机器人技术领域中,Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂,myCobot 600以其600mm的工作半径和2kg的末端负载能力,满足了多样化的操作需求。…

中间件解析漏洞

1 、 apache 解析漏洞 漏洞环境搭建 下载 vulhub git clone https://github.com/vulhub/vulhub.git 进入对应漏洞目录、 cd vulhub/httpd/apache_parsing_vulnerability apt-get docker-compose 启动漏洞环境 docker-compose up -d 注:启动容器时&#xf…

用数据检验函数正确性,matlab2C

数据存取格式 filename1 g.txt; fid1 fopen(filename1,w); for i 1 : length(g)for j1:size(g,2)if(j1)fprintf(fid1,{%.16f,,g(i,j)); elseif(j>1&&j<151)fprintf(fid1,%.16f,,g(i,j)); elsefprintf(fid1,%.16f},\n,g(i,j));endend%fprintf(fid1,\n…

ZooKeeper 环境搭建详细教程之三(真集群)

ZooKeeper 搭建详细步骤之三(真集群) ZooKeeper 搭建详细步骤之二(伪集群模式) ZooKeeper 搭建详细步骤之一(单机模式) ZooKeeper 及相关概念简介 真集群搭建 搭建 ZooKeeper 真集群涉及多个步骤,包括准备环境、配置文件设置、启动服务以及验证集群状态。 以下是一个简…

在java项目中使用QQ邮箱发送验证码邮件

第一步&#xff1a;集成邮箱服务 在一个java项目中需要一个邮件服务来发送邮件可以使用JavaMail API来实现这一点&#xff0c;在这之前需要在项目中导入javax.mail.jar写入依赖。 方法一&#xff1a;直接在Maven中写入依赖 <dependency><groupId>org.apache.commo…

李沐64_注意力机制——自学笔记

注意力机制 1.卷积、全连接和池化层都只考虑不随意线索 2.注意力机制则显示的考虑随意线索 &#xff08;1&#xff09;随意线索倍称之为查询(query) &#xff08;2&#xff09;每个输入是一个值value&#xff0c;和不随意线索key的对 &#xff08;3&#xff09;通过注意力池…

【Unity动画系统】详解Root Motion动画在Unity中的应用(二)

Root Motion遇到Blend Tree 如果Root Motion动画片段的速度是1.8&#xff0c;那么阈值就要设置为1.8&#xff0c;那么在代码中的参数就可以直接反映出Root Motion的最终移动速度。 Compute Thresholds&#xff1a;根据Root Motion中某些数值自动计算这里的阈值。 Velocity X/…

Meilisearch 快速入门(Windows 环境) 搜索引擎 语义搜索

Meilisearch 快速入门(Windows 环境)# 简介# Meilisearch 是一个基于 rust 开发的,快速的、完全开源的轻量级搜索引擎。它的数据存储基于磁盘与内存映射,不受 RAM 限制。在一定数量级下,搜索速度不逊于 Elasticsearch。 下载# 官方服务端包下载地址:github.com/meili…

对于button按钮引发的bug

主要原因就是今天在给button按钮添加一个点击事件的时候&#xff0c;并没有声明button的type类型&#xff0c;就一直发生点击按钮但事件并不触发的问题。 触发这种问题的原因就是: 按钮默认的 type 类型是 "submit"&#xff0c;而不是 "button"。当你不显式…

【前端】VUE项目创建

在所需文件夹中打开cmd命令行窗口&#xff0c;输入vue ui 进入web可视化界面选择创建新项目 根据需求依次完成下列选择&#xff0c;下列是参考配置&#xff0c;完成后点击创建项目即可 最终显示完成

(学习日记)2024.05.10:UCOSIII第六十四节:常用的结构体(os.h文件)第三部分

之前的章节都是针对某个或某些知识点进行的专项讲解&#xff0c;重点在功能和代码解释。 回到最初开始学μC/OS-III系统时&#xff0c;当时就定下了一个目标&#xff0c;不仅要读懂&#xff0c;还要读透&#xff0c;改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

从OpenJDK源码看JAVA虚拟机的创建过程

这里写目录标题 关于Java跨平台能力的理解Java Virtual Machine是怎么创建的。1. Java Launcher2. JLI_Launch 入口3. JVM-Init4. 开启新线程并继续5. 调用JavaMain6. 初始化Java虚拟机&#xff0c;并执行Main方法java.c中的InitializeJVM 方法 7. JNI_CreateJavaVM8. 虚拟机创…

WPS的JS宏如何设置Word文档的表格的单元格文字重新编号

希望对Word文档中的表格进行统一处理&#xff0c;表格内的编号&#xff0c;有时候会出现紊乱&#xff0c;下一个表格的编号承接了上一个表格的编号&#xff0c;实际需要重新编号。 当表格比较多时&#xff0c;手动更改非常麻烦&#xff0c;而且更改一遍并不能完成&#xff0c;…

使用 XHbuilder 编辑器 uniapp开发 app 中使用手机本相机可直接拍摄照片进行上传,也可以选择相册进行上传

学习目标&#xff1a; 使用 XHbuilder 编辑器 uniapp开发 app 中使用手机本相机可直接拍摄照片进行上传&#xff0c;也可以选择相册进行上传 学习内容&#xff1a; 相关内容 上传图片上传时调用的相关方法配置的相关模块需要配置的相关权限 知识小结&#xff1a; 总结&#…

最大连续1的个数 ||| ---- 滑动窗口

题目链接 题目: 分析: 题目中说可以将最多k个0翻转成1, 如果我们真的这样算就会十分麻烦, 所以我们可以换一种思路: 找到一个最长的子数组, 最多有k个0解法一: 暴力解法: 找到所有的最多有k个0的子字符串, 返回最长的解法二: 找到最长的子数组, 我们可以想到"滑动窗口算…

【win10相关】更新后出现未连接到互联网的问题及解决

问题背景 在win10更新完系统之后&#xff0c;第二天电脑开机后&#xff0c;发现无法上网&#xff0c;尝试打开百度&#xff0c;但是出现以下图片&#xff1a; 经过检查&#xff0c;发现手机是可以上网的&#xff0c;说明网络本身并没有问题&#xff0c;对防火墙进行了一些设置…

C++/BOOST filesystem fs::directory_iterator一个滑稽的错误

错误来源于&#xff0c;用 fs::directory_iterator iter(folderPath), end; 然后for循环 for (; iter ! iter_end; iter) {} 最开始没问题&#xff0c;后来说加个进度条&#xff0c;统计一下所有文件数量&#xff0c;用了std::distance&#xff0c; int totalFiles std::…

XYCTF2024 部分w

RE 1. 聪明的信使 基础爆破 #include<stdio.h> #include<string.h> int main() {char enc[] "oujp{H0d_TwXf_Lahyc0_14_e3ah_Rvy0acwc!}";char flag[41] {0};int i, j;for (i 0; i < strlen(enc); i){for (j 33; j < 127; j){if ((j < 9…