博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django之form表单验证
阅读量:5251 次
发布时间:2019-06-14

本文共 5864 字,大约阅读时间需要 19 分钟。

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'邮箱'}))
form表单验证属性常用写法大全

 

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))
View Code

 

 

#!/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})
views

 

#!/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'验证码不正确'}, )
forms

 

{% extends "temp.html" %}{
% block login %}
{
{form.user}} {
% if error.user.0 %}
{
{error.user.0}}
{
% endif %}
{
{form.check_code}} {
% if error.check_code.0 %}
{
{ ccc }}
{
% endif %}
{
% endblock %}
login.html

 

转载于:https://www.cnblogs.com/renfanzi/p/5807603.html

你可能感兴趣的文章
51nod1076 (边双连通)
查看>>
Item 9: Avoid Conversion Operators in Your APIs(Effective C#)
查看>>
深入浅出JavaScript(2)—ECMAScript
查看>>
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
YUV 格式的视频呈现
查看>>
Android弹出框的学习
查看>>
现代程序设计 作业1
查看>>
在android开发中添加外挂字体
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>