django中的Form一般有两种功能:
- 输入html
- 验证用户输入
#!/usr/bin/env python# -*- coding:utf-8 -*-import refrom django import formsfrom django.core.exceptions import ValidationErrordef mobile_validate(value): mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$') if not mobile_re.match(value): raise ValidationError('手机号码格式错误')class PublishForm(forms.Form): # # user_type_choice = ( # (0, u'普通用户'), # (1, u'高级用户'), # ) user_type_choice = models.BookType.objects.values_list('id','caption') user_type = forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice, attrs={ 'class': "form-control"})) title = forms.CharField(max_length=20, min_length=5, error_messages={ 'required': u'标题不能为空', 'min_length': u'标题最少为5个字符', 'max_length': u'标题最多为20个字符'}, widget=forms.TextInput(attrs={ 'class': "form-control", 'placeholder': u'标题5-20个字符'})) memo = forms.CharField(required=False, max_length=256, widget=forms.widgets.Textarea(attrs={ 'class': "form-control no-radius", 'placeholder': u'详细描述', 'rows': 3})) phone = forms.CharField(validators=[mobile_validate, ], error_messages={ 'required': u'手机不能为空'}, widget=forms.TextInput(attrs={ 'class': "form-control", 'placeholder': u'手机号码'})) email = forms.EmailField(required=False, error_messages={ 'required': u'邮箱不能为空','invalid': u'邮箱格式错误'}, widget=forms.TextInput(attrs={ 'class': "form-control", 'placeholder': u'邮箱'}))
def publish(request): ret = { 'status': False, 'data': '', 'error': '', 'summary': ''} if request.method == 'POST': request_form = PublishForm(request.POST) if request_form.is_valid(): request_dict = request_form.clean() print request_dict ret['status'] = True else: error_msg = request_form.errors.as_json() ret['error'] = json.loads(error_msg) return HttpResponse(json.dumps(ret))
#!/usr/bin/env python# -*- coding:utf-8 -*-from django import formsfrom app_from import modelsclass Form1(forms.Form): user = forms.CharField( widget=forms.TextInput(attrs={'class': 'c1'}), error_messages={'required': '用户名不能为空'},) pwd = forms.CharField(max_length=4,min_length=2) email = forms.EmailField(error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'}) memo = forms.CharField( widget=forms.Textarea() ) # user_type_choice = ( # (0, '普通用户'), # (1, '高级用户'), # ) user_type_choice = models.BookType.objects.values_list('id','caption') book_type = forms.CharField( widget=forms.widgets.Select(choices=user_type_choice,attrs={'class': "form-control"})) def __init__(self,*args, **kwargs): """ 这么写的目的是为了在更新数据库的时候每次都会执行这个方法 :param args: :param kwargs: """ super(Form1, self).__init__(*args, **kwargs) self.fields['book_type'] = forms.CharField( widget=forms.widgets.Select(choices=models.BookType.objects.values_list('id','caption'),attrs={'class': "form-control"}))
加了验证码的表单验证
下载这两个文件请点击--》
from django.shortcuts import render,HttpResponse,HttpResponseRedirect# Create your views here.from app01.forms import Form1import iofrom check_code import check_codedef check_coder(request): mstream = io.BytesIO() img, code = check_code.create_validate_code() img.save(mstream,'GIF') request.session["CheckCode"] = code # print(mstream.getvalue()) return HttpResponse(mstream.getvalue())def login(request): if request.method == 'POST': print("aaa") f = Form1(request.POST) if f.is_valid(): code_sess = request.session.get('CheckCode',None) """ 思路:首先获取session,然后获取验证码的内容,全部大写 """ code = f.cleaned_data['check_code'] user = f.cleaned_data['user'] print(code_sess,code) if code.upper() == code_sess.upper(): print("验证码正确") print(code,user) return HttpResponseRedirect('/index/') else: print('bb') print(f.errors) return render(request,'login.html',{ 'error':f.errors,"ccc":"或者验证码错误",'form':f}) else: f = Form1() return render(request,'login.html',{ 'form':f})
#!/usr/bin/env python# -*- coding:utf-8 -*-from django import forms# from app_from import modelsclass Form1(forms.Form): user = forms.CharField( widget=forms.TextInput(attrs={ 'class': 'c1'}), # error_messages={ 'required': '用户名不能为空'}, ) check_code = forms.CharField( label='验证码', max_length=4, error_messages={ 'required': u'验证码不能为空', 'invalid': u'验证码不正确'}, )
{% extends "temp.html" %}{ % block login %}{ % endblock %}