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的主要内容,如果未能解决你的问题,请参考以下文章