首页 > 其他分享 >Day_05

Day_05

时间:2023-05-04 09:00:29浏览次数:36  
标签:code exists 05 mobile self phone data Day

1. 点击注册

1.1 点击收集数据&ajax

$.ajax({
                    url: "{% url 'register' %}",
                    type: "POST",
                    data: $('#regForm').serialize(),
                    dataType: "JSON",
                    success: function (res) {
                        console.log(res);
                    }
                })

1.2 数据校验(每个字段)

点击查看代码
# 创建每个字段的钩子函数,进行校验
    def clean_username(self):
        username = self.cleaned_data["username"]
        exists = models.UserInfo.objects.filter(username=username).exists()
        if exists:
            raise ValidationError("用户名已存在")
        return username
    def clean_email(self):
        email = self.cleaned_data["email"]
        exists = models.UserInfo.objects.filter(email=email).exists()
        if exists:
            raise ValidationError("该邮箱已被使用")
        return email
    def clean_password(self):
        pwd = self.cleaned_data["password"]
        #加密并返回
        return md5(pwd)
    def clean_confirm_password(self):
        pwd = self.cleaned_data["password"]
        confirm_pwd = md5(self.cleaned_data["confirm_password"])
        if pwd != confirm_pwd:
            raise ValidationError("密码不一致")
        return confirm_pwd
    def clean_mobile_phone(self):
        mobile_phone = self.cleaned_data["mobile_phone"]
        exists = models.UserInfo.objects.filter(mobile_phone=mobile_phone).exists()
        if exists:
            raise ValidationError("手机号已注册")
        return mobile_phone
    def clean_code(self):
        code = self.cleaned_data["code"]
        mobile_phone = self.cleaned_data["mobile_phone"]
        conn = get_redis_connection()
        redis_code = conn.get(mobile_phone)
        if not redis_code:
            raise ValidationError("验证码失效或未发送,请重新发送")
        redis_str_code = redis_code.decode('utf-8')
        if redis_str_code != code.strip():
            raise ValidationError("输入验证码不正确")
        return code

1.3 写入数据库

image

2. 短信登录

2.1 展示页面

创建form类

class LoginSmsForm(BootStrapForm,forms.Form):
    mobile_phone = forms.CharField(
        label='手机号',
        validators=[RegexValidator(r'^(1[3|4|5|6|7|8|9])\d{9}$', '手机格式错误'), ]
    )
    code = forms.CharField(
        label='验证码',
        widget=forms.TextInput()
    )

创建视图函数login_sms

def login_sms(request):
    '''短信登录'''
    form = LoginSmsForm()
    return render(request,"login_sms.html",{"form":form})

login_sms.html

点击查看代码
{% extends 'layout/basic.html' %}
{% load static %}
{% block title %} 用户短信登录 {% endblock %}

{% block css %}

    <link rel="stylesheet" href="{% static 'css/account.css' %}">

{% endblock %}

{% block content %}
    <div class="account">
        <div class="title">用户短信登录</div>
        <form id="smsForm" method="post" novalidate>
            {% csrf_token %}
            {% for field in form %}
                {% if field.name == 'code' %}
                    <div class="form-group">
                        <label for="{{ field.id_for_lable }}">{{ field.label }}</label>
                        <div class="row">
                            <div class="col-xs-7" style="padding-left: 0px;">
                                {{ field }}
                                <span class="error-msg"></span>
                            </div>
                            <div class="col-xs-5">
                                <input id="btnSms" type="button" class="btn btn-info" value="点击获取验证码">
                            </div>
                        </div>
                    </div>
                {% else %}
                    <div class="form-group">
                        <label for="{{ field.id_for_lable }}">{{ field.label }}</label>
                        <div class="row">
                            {{ field }}
                            <span class="error-msg"></span>
                        </div>
                    </div>
                {% endif %}
            {% endfor %}

            <div class="row">
                <div class="col-xs-3" style="padding-left: 0px;">
                    <input id="btnSubmit" type="button" class="btn btn-primary" value="登  录"></input>
                </div>
            </div>

        </form>
    </div>

{% endblock %}

image

2.2 点击发送短信

和注册相同的发送ajax请求,结果如下:
image

2.3 点击登录(form中的钩子函数验证)

image

标签:code,exists,05,mobile,self,phone,data,Day
From: https://www.cnblogs.com/cool-bo/p/17359396.html

相关文章

  • 关于容斥原理 / P5505题解
    发现很多题解连容斥原理的“钦定”和“至少”的区别都讲不清楚,误导萌新,所以写一下这两个东西的区别“钦定”这个东西是会算重的,而“至少”不会。举个例子吧,比如\(1\2\3\)三个位置不合法,如果我说“钦定”两个位置不合法,那么这里计算方案的时候这个不合法的方案会被计算三次,分......
  • 【游戏设计随笔05】关于“模拟经营”的一些感悟笔记
    一些模拟经营大类的tips:1:模拟经营游戏的定义游戏可以视为一组,在好玩的心态下由玩家执行的规则下的选择。而模拟经营类型的游戏更加偏重于资源分配。如果有一个基本定义,就是完成游戏资源产出机制,到资源分配,再到升级机制,最后强化资源产出,完成闭环的一个结构。2:模拟经营游戏的核心......
  • 2023-05-03:给你一棵 二叉树 的根节点 root ,树中有 n 个节点 每个节点都可以被分配一个
    2023-05-03:给你一棵二叉树的根节点root,树中有n个节点每个节点都可以被分配一个从1到n且互不相同的值另给你一个长度为m的数组queries你必须在树上执行m个独立的查询,其中第i个查询你需要执行以下操作:从树中移除以queries[i]的值作为根节点的子树题目所用测试......
  • 2023-05-03 线性模型与区间DP
    线性模型与区间DP1线性模型基本概念这里的线性是指状态的排布是线性的线性模型是动态规划中最常用的模型一般的代码模型是:for(inti=0;i<n;i++){for(j=0;j<i;j++){//Todo:更新dp的具体逻辑}}最典型的一个例题:最长上升子序列见第......
  • 2023-05-03:给你一棵 二叉树 的根节点 root ,树中有 n 个节点 每个节点都可以被分配一个
    2023-05-03:给你一棵二叉树的根节点root,树中有n个节点每个节点都可以被分配一个从1到n且互不相同的值另给你一个长度为m的数组queries你必须在树上执行m个独立的查询,其中第i个查询你需要执行以下操作:从树中移除以queries[i]的值作为根节点的子树题目所......
  • 算导05
     ......
  • 每日总结2023-05-03
    今天学习了Android中的数据传递: 发送://实例化一个新的窗口,并指定从那个窗口到哪个窗口intent=newIntent(MainActivity.this,secondwindow.class);//将数据发送到intent中intent.putExtra("name",ed_text.getText().toString().trim());//启动新窗口startActivity(in......
  • 【23.05.03】好题题解
    好题题解A题目大意:计算一个项数为\(n\)的多项式除以\(x^3-x\)的余数多项式。数据范围:对于\(100\%\)的数据:\(2\leqn\leq2\times10^5\)解题分析:水题,直接多项式除法模拟即可。需要注意细节。ACCode:#include<bits/stdc++.h>usingnamespacestd;#d......
  • 【实变函数】05 - 积分极限和乘积测度
    1.积分的极限积分与极限运算的交换,是数学分析中的重要工具。但在Riemann积分中,运算交换需要较强的条件,特别是麻烦的“一致收敛性”。然而“一致收敛性”并不是运算交换的必要条件,但是从Riemann积分的定义出发,却很难再有进一步的弱化条件。本篇你将看到,在基于测度的积分上,极......
  • [POI2005]SAM-Toy Cars 题解(贪心+堆)
    题面首先考虑一个贪心策略:当地板已经放满需要取出一个时,取下一次使用时间\(nxt\)最晚的那个。所以我们只需要一个可以快速求出一个集合中\(nxt\)最小的点并删除,插入新点的数据结构,这里很容易想到堆。代码很简洁,注意数组的下标是位置还是颜色(考场100pts到0pts)。code:......