form表单验证
1 import re 2 from django import forms 3 from django.core.exceptions import ValidationError 4 from django.contrib import admin 5 6 def mobile_validate(value): 7 mobile_re = re.compile(r'^(13[0-9]|15[0-9]|17[678]|18[0-9]|14[57])[0-9]{8}$') 8 if not mobile_re.match(value): 9 raise ValidationError('手机号码格式错误') 10 11 12 class PublishForm(forms.Form): 13 user_type_choice = ( 14 (0, u'普通用户'), 15 (1, u'高级用户'), 16 ) 17 18 user_type = forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice, 19 attrs={'class': "form-control"})) 20 21 title = forms.CharField(max_length=20, 22 min_length=5, 23 error_messages={ 24 'required': u'标题不能为空', 25 'min_length': u'标题最少为5个字符', 26 'max_length': u'标题最多为20个字符', 27 }, 28 widget=forms.TextInput(attrs={ 29 'class': "form-control", 30 'placeholder': u'标题5-20个字符', 31 })) 32 33 memo = forms.CharField(required=False, 34 max_length=256, 35 widget=forms.widgets.Textarea(attrs={ 36 'class': "form-control no-radius", 37 'placeholder': u'详细描述', 38 'rows': 3})) 39 40 phone = forms.CharField(validators=[mobile_validate,], 41 error_messages={'required': u'手机不能为空'}, 42 widget=forms.TextInput(attrs={ 43 'class': "form-control", 44 'placeholder': u'邮箱' 45 }))
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 9 10 <form action="/publish/" method="post"> 11 {% csrf_token %} 12 <p>{{ obj.user_type }} <span>{{ ret.error.user_type.0.message }}</span></p> 13 <p>{{ obj.title }} <span>{{ ret.error.title.0.message }}</span> </p> 14 <p>{{ obj.memo }} <span>{{ ret.error.memo.0.message }}</span> </p> 15 <p>{{ obj.phone }} <span>{{ ret.error.phone.0.message }}</span> </p> 16 17 <p><input type="submit" value="提交"></p> 18 19 20 </form> 21 22 </body> 23 </html>
1 from .Form import PublishForm 2 import json 3 4 5 def publish(request): 6 ret = {'status': False, 'data': '', 'error': '', 'summary': ''} 7 request_form = PublishForm(request.POST) # 获取表单验证对象 8 print("request_form:",request_form) 9 if request.method == 'POST': 10 # request_form = PublishForm(request.POST) 11 if request_form.is_valid(): 12 request_dict = request_form.clean() 13 print('request_dict:', request_dict) 14 ret['status'] = True 15 else: 16 error_msg = request_form.errors.as_json() 17 ret["error"] = json.loads(error_msg) 18 print("ret:", ret) 19 return render(request, 'publish.html', {'obj': request_form, "ret": ret})