django中表单验证

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                             }))
Form.py
 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>
publish.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})
views.py

猜你喜欢

转载自www.cnblogs.com/sshcy/p/9253964.html