几个常用属性
正则校验
实际操作:
1、简单显示:
py代码:
from django import forms
from django.forms import widgets
class RegForm(forms.Form):
name = forms.CharField(max_length=16,label='用户名')
passwd = forms.CharField( widget=widgets.PasswordInput(),min_length=3,label='密码',error_messages={
'minlength':'密码不能少于3位',
'max_length':'密码不能超过十位'
})
def reg(request):
form_obj = RegForm()
if request.method == 'POST':
form_obj = RegForm(request.POST)
# 让form帮我们做校验
if form_obj.is_valid():
pass
return render(request,'test_test.html',{'form_obj':form_obj})
JS代码:
<form action="/reg/" method="post">
{{ form_obj.as_p }}
{{ form_obj.errors.pwd}}
<p><input type="submit"></p>
</form>
2、form表单登陆验证
py代码:
import re
from django import forms
from django.forms import widgets
from django.core.validators import RegexValidator,ValidationError
class RegForm(forms.Form):
# 正则匹配1
# name = forms.RegexField(
# regex = '^[0-9]+@[0-9a-z]+.com$',
# max_length=20,
# label='用户名',
# widget = widgets.TextInput(attrs={'class':'form-control user'}),
# error_messages={
# 'regex' : '用户格式不正确',
# 'max_length': '用户名不能大于20位数'
# }
# )
# 正则匹配2
name = forms.CharField(
max_length=20,
label='用户名',
widget = widgets.TextInput(attrs={'class':'form-control user'}),
validators=[
RegexValidator('^[0-9]+@[0-9a-z]+.com$','用户格式不正确')
# RegexValidator('^[0-9]+@[0-9a-z]+.com$', '用户格式不正确')
]
)
passwd = forms.CharField(
#render_value=True:提交后记录不清除
widget=forms.PasswordInput(attrs={'class':'form-control'},render_value=True),
max_length=20,
label='密码',
min_length=5,
error_messages={
'min_length':'密码不能少于5位数',
'max_length':'密码不能大于20位数'
}
)
repasswd = forms.CharField(
#render_value=True:提交后记录不清除
widget=forms.PasswordInput(attrs={'class':'form-control'},render_value=True),
max_length=20,
label='确认密码',
min_length=5,
error_messages={'required':'改处不能为空',
'min_length':'密码不能少于5位数'}
)
city = forms.ChoiceField(
choices = models.Publisher.objects.all().values_list('id','name'),
label = '城市',
initial=1,
widget=forms.widgets.Select
)
#重写父类的init法
def __init__(self,*args,**kwargs):
super.__init__(*args,**kwargs)
self.fields.widget.choices = models.Publisher.objects.all().values_list('id','name')
# 重写父类的clean方法
def clean(self):
# 此时通过校验的数据都保存在self。cleaned_data
passwd = self.cleaned_data.get('passwd')
repasswd = self.cleaned_data.get('repasswd')
if passwd != repasswd:
self.add_error('repasswd',ValidationError('两次密码不一致'))
raise ValidationError('两次密码不一致')
return self.cleaned_data
def login_text(request):
login_check = RegForm()
if request.method == 'POST':
login_check = RegForm(request.POST)
if login_check.is_valid():
# 所有通过校验的数据都以字典的形式保存在login_check.cleaned_data中
del login_check.cleaned_data['repasswd']
print(login_check.cleaned_data)
models.UserInfo.objects.create(**login_check.cleaned_data)
return HttpResponse('success')
return render(request,'form表单登陆示例.html',{'login_check':login_check})
def reuser_check(request):
erro = ''
user_info = request.POST.get('user_info')
patter = re.compile('^[0-9]+@[0-9a-z]+.com$')
if models.UserInfo.objects.filter(name=user_info):
erro = '用户已存在'
return HttpResponse(erro)
elif patter.findall(user_info) == []:
erro = '用户格式不正确'
return HttpResponse(erro)
JS代码:
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="UTF-8">
<title>form表单登陆示例</title>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
<style>
.row{
margin-top: 200px;
}
</style>
</head>
<body>
<div class="container">
<div class="row col-md-offset-3 col-md-6">
{# novalidate:不用浏览器做校验#}
<form action="/login_text/" method="post" novalidate>
<div class="form-group {% if login_check.name.errors.0 %} has-error {% endif %}">
{{ login_check.name.label }}
{{ login_check.name }}
<span class="help-block rename">{{ login_check.name.errors.0 }}</span>
</div>
<div class="form-group {% if login_check.passwd.errors.0 %} has-error {% endif %}">
{{ login_check.passwd.label }}
{{ login_check.passwd }}
<span class="help-block">{{ login_check.passwd.errors.0 }}</span>
</div>
<div class="form-group {% if login_check.repasswd.errors.0 %}has-error {% endif %}">
{{ login_check.repasswd.label }}
{{ login_check.repasswd }}
<span class="help-block">{{ login_check.repasswd.errors.0 }}</span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-info">
</div>
{# 选择城市#}
<div class="form-group">
{{ login_check.city.label }}
{{ login_check.city }}
</div>
</form>
</div>
</div>
<script src="{% static 'sweetalert/sweetalert.min.js' %}"></script>
<script src="{% static 'jquery-3.2.1.min.js' %}"></script>
<script>
$(document).ready(function () {
$('.user').on('blur',function () {
user_info = $(this).val();
$.ajax({
url:'/reuser_check/',
type:'post',
data:{'user_info':user_info},
success:function (arg) {
$('.rename').text(arg);
}
})
})
})
</script>
</body>
</html>