Day_05

Posted cool-bo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day_05相关的知识,希望对你有一定的参考价值。

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 写入数据库

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])\\d9$\', \'手机格式错误\'), ]
    )
    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" >
                                 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" >
                    <input id="btnSubmit" type="button" class="btn btn-primary" value="登  录"></input>
                </div>
            </div>

        </form>
    </div>

% endblock %

2.2 点击发送短信

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

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

python day2

一.str

print(dir(int))
#[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mod__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__rmod__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘capitalize‘, ‘casefold‘, ‘center‘, ‘count‘, ‘encode‘, ‘endswith‘, ‘expandtabs‘, ‘find‘, ‘format‘, ‘format_map‘, ‘index‘, ‘isalnum‘, ‘isalpha‘, ‘isdecimal‘, ‘isdigit‘, ‘isidentifier‘, ‘islower‘, ‘isnumeric‘, ‘isprintable‘, ‘isspace‘, ‘istitle‘, ‘isupper‘, ‘join‘, ‘ljust‘, ‘lower‘, ‘lstrip‘, ‘maketrans‘, ‘partition‘, ‘replace‘, ‘rfind‘, ‘rindex‘, ‘rjust‘, ‘rpartition‘, ‘rsplit‘, ‘rstrip‘, ‘split‘, ‘splitlines‘, ‘startswith‘, ‘strip‘, ‘swapcase‘, ‘title‘, ‘translate‘, ‘upper‘, ‘zfill‘]
 

1.capitalize()      #将字符串的第一个字符转换为大写

2.center()        #返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格

3.count()         #返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

4.endwith()       #检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False

5.expandtabs()             #检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False

6.find()         #检测 str 是否包含在字符串中 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

7.index()        #跟find()方法一样,只不过如果str不在字符串中会报一个异常

8.isdigit()       #如果字符串只包含数字则返回 True 否则返回 False

9.join()        #以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

10.lower()       #转换字符串中所有大写字符为小写

11.replace()      #把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次

*12.format()      #格式化输出字符串

二.int

print(dir(int))
#[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘clear‘, ‘copy‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]

1.list.count()        #统计某个元素在列表中出现的次数

2.list.insert(index,obj)     #将对象插入列表

3.list.pop()          #移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

4.list.remove()               #移除列表中某个值的第一个匹配项

5.list.reverse()       #反向列表中元素

6.list.sort()                    #对原列表进行排序

7.list.clear()        #清空列表

8.list.copy()          #复制列表

三.dict

print(dir(dict))
#[‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘clear‘, ‘copy‘, ‘fromkeys‘, ‘get‘, ‘items‘, ‘keys‘, ‘pop‘, ‘popitem‘, ‘setdefault‘, ‘update‘, ‘values‘]

1.dict.clear()        #删除字典内所有元素

2.dict.copy()         #返回一个字典的浅拷贝

3.dict.fromkeys()      #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

4.dict.get()         #返回指定键的值,如果值不在字典中返回default值

5.dict.setdefault()      #和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

6.dict.update(dict2)     #把字典dict2的键/值对更新到dict里 

 

以上是关于Day_05的主要内容,如果未能解决你的问题,请参考以下文章

day05_05 shutil模块进行压缩

day05_04 目录导入

day05_雷神_函数进阶

Day_05

day04_05 内置方法

day05_03 xml创建