django之form表单验证

django中的Form一般有两种功能:

  • 输入html
  • 验证用户输入

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
from django import forms
from django.core.exceptions import ValidationError

def 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))

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from django import forms
from app_from import models

class 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"}))

加了验证码的表单验证

下载这两个文件请点击--》【ooo】

from django.shortcuts import render,HttpResponse,HttpResponseRedirect

# Create your views here.

from app01.forms import Form1
import io
from check_code import check_code

def 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 models

class 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 action="/login/" method="POST">
        <div class="input_group">

            {{form.user}}

            {% if error.user.0 %}
                <span>{{error.user.0}}</span>
            {% endif %}
            <div>
                {{form.check_code}}
                {% if error.check_code.0 %}
                    <span id="aaa">{{ ccc }}</span>
                {% endif %}
                <img src="/check_code/" onclick="ChangCode()" id="imgCode">
            </div>
        </div>
        <div>
            <input type="submit" value="提交">
        </div>
    </form>
    <script src="/static/js/jquery-1.12.4.js"></script>
    <script>
        console.log($("#aaa").val())
        function ChangCode() {
            var code = document.getElementById(‘imgCode‘)
            code.src += ‘?‘
        }
    </script>
{% endblock %}

login.html

时间: 2024-10-01 06:56:00

django之form表单验证的相关文章

Django中的Form表单验证

回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错误信息的字典,并会遍历类的所有属性(对应前端待验证的输入域),调用各自的验证方法,将错误信息(两类,必要与否以及格式正确与否)存入字典,并得出最终的验证结果.在使用时,需要定义继承自Form基类不同的Form类,以对应有着不同输入域的Form表单.在拿到前端给的字典前,要先初始化自定义From类,直

python_way day14 HTML-day5 (form表单验证,)

python-way day19 1. dJango的form表单验证 一,django表单验证功能 1.django验证基础: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>django form</title> </head> <body> <div> <i

Python自动化运维系列之Django Form表单验证

Form表单验证 Django核心功能组件之一,虽然也可以在前端使用JS对表单验证, 但是Django中已经为我们准备好的Form功能还算是很强大的,有时候比较适合运维,为我们简化了很多前端开发工作. Django最主要的几个功能有4个     ·  生成HTML标签     ·  验证数据(表单错误信息提示)     ·  HTML 表单保留上次提交数据     ·  初始化页面表单内容 Django的Form内容还是挺多的,我们可以从一个简单的登陆验证例子来看看Form的基本功能使用 1)新

Django基础之Form表单验证

Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from django.forms import widgets from Mybbs.models import * import re class UserForm(Form): username = fields.CharField( required=True, error_messages={'re

Django--分页器(paginator)、Django的用户认证、Django的FORM表单

分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(objects, 2) >>> p.count #数据总数 4 >>> p.num_pages #总页数 2 >>> type(p.page

form表单,django的form表单,

django的表单系统,分2种, 基于django.forms.Form的所有表单类的父类, 基于django.forms.ModelForm,可以和模型类绑定的Form, 直接用原生的form表单,也可以直接用,较麻烦, django的form表单,也可用可不要, 在views里创建一个类,继承了forms.Form ,每个字段就是一个输入框, #----- #django 的form表单 from django import forms class MyForm(forms.Form): #

用jquery写自己的form表单验证

这几天看了锋利的jquery,感觉很不错.特别是jquery强大的选择器.今天就利用jquery写了一个自己的form表单验证的小案例.当巩固下jquery.首先贴下代码,当然只是一个小案例. 思路:   1.<input type="text" Validate="Date" id="date"/>这里的 Validate:是我们需要验证的类型(属于日期类型),这里你也可以自己定义.id属性就不用说了.<input type=

抽屉之Tornado实战(7)--form表单验证

在这里,我们把form表单验证的代码进行工具化了,以后稍微修改一下参数就可以拿来用了 先贴上代码 forms.py from backend.form import fields class BaseForm: def __init__(self): self._value_dict = {} self._error_dict = {} self._valid_status = True def valid(self, handler): for field_name, field_obj in

ant-pro使用Form表单验证上传图片出现的问题

1.复现:用antd的Form表单验证上传图片必填项时出现问题:复现过程,先提交,提示图片需要上传,上传成功后,依旧提示:图片未上传 2.表单验证原理:先理解一下antd的Form表单验证的表层原理,每个表单getFieldDecorator配置项都有个名字,比如就叫goodsSkuImg,这个goodsSkuImg对应this.props.form.goodsSkuImg如果为空则验证不通过. 3.结论:Form提示的根本原因是this.props.form.goodsSkuImg值为空 4.