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>
        <input type="text" placeholder="用户名" name="user">
    </div>
    <div>
        <input type="password" placeholder="密码" name="password">
    </div>
    <input type="button" value="提交">
</body>
<script src="/statics/js/jquery-3.1.0.min.js"></script>
<script src="/statics/js/my_js.js"></script>
<script>
    $("div input").VelidForm("input[type=button]");   //使用jquery extend
    //把所有div下面的input作为筛选传过去,并且把点击的按钮作为参数传过去
</script>
</html>

django_form.html

(function ($) {
    $.fn.extend({
        VelidForm: function (button) {       //扩展方法
            var inps = this;                 //所有的用户输入框
            $(button).click(function () {    //点击事件绑定
                var input_dict = {};         //定义一个空字典
                $(inps).each(function () {   //循环所有input
                    var v = $(this).val();    //获取value
                    var k = $(this).attr("name");   //获取key
                    input_dict[k] = v;             //给字典赋值
                    });
                $.ajax({                                 //发送ajax请求
                    url: "/django_form/",
                    type: "POST",
                    data: input_dict,
                    dataType: "json",
                    //回调函数
                    success: function (data) {
                        //ajax提交成功调用这个函数

                    },
                    error:function () {
                        //ajax失败自动调用这个函数
                    }
                    })
            })
        }
    });
})(jQuery);            

my_js.js

#定义验证规则
from django import forms      #需要倒入继承django给我们提供的forms
class LoginForm(forms.Form):
    user = forms.CharField(required=True)   #required = True 输入不能为空
    password = forms.CharField(required=True)

def django_form(request):
    if request.method == "POST":
        obj = LoginForm(request.POST)  #request.POST 里面有用户输入的所有信息
        ret = obj.is_valid()           #这样就验证了用户输入是否为空
        print(ret)                      #这样就能看到了返回值:True False
     if ret:            print(obj.clean())   #拿到正确的输入值       else:         print(obj.errors)  #拿到错误值
    return render(request, "django_form.html")

只要有一项没有填写内容,ret就是False: 并且obj.errors 会把错误获取到 (password没有填写内容)

注意:匹配规则名称要统一

views:

django_form.html

2、获取错误信息

首先我们看到了我们获取到的错误信息时一个<ul><li>的类型,那么就说明了这个error里面应该有一个str方法,这个方法输出的就是这个类型,那我们来来看一下这个error

的类型,看看他的本质!

是一个错误字典类型:

 else:
            from django.forms.utils import ErrorDict
            print(type(obj.errors))
    return render(request, "django_form.html")

====================================

class ErrorDict(dict):
    """
    A collection of errors that knows how to display itself in various formats.

    The dictionary keys are the field names, and the values are the errors.
    """
    def as_data(self):
        return {f: e.as_data() for f, e in self.items()}

    def as_json(self, escape_html=False):
        return json.dumps({f: e.get_json_data(escape_html) for f, e in self.items()})

    def as_ul(self):
        if not self:
            return ‘‘
        return format_html(
            ‘<ul class="errorlist">{}</ul>‘,
            format_html_join(‘‘, ‘<li>{}{}</li>‘, ((k, force_text(v)) for k, v in self.items()))
        )

    def as_text(self):
        output = []
        for field, errors in self.items():
            output.append(‘* %s‘ % field)
            output.append(‘\n‘.join(‘  * %s‘ % e for e in errors))
        return ‘\n‘.join(output)

    def __str__(self):
        return self.as_ul()

ErrorDict

可以看到里面有很多的方法,默认str输出的是al_ul,如果我们想要as_json,我们也可以获取到

def django_form(request):
    if request.method == "POST":
        obj = LoginForm(request.POST)  #request.POST 里面有用户输入的所有信息
        ret = obj.is_valid()           #这样就验证了用户输入是否为空
        if ret:
            print(obj.clean())
        else:
            print(obj.errors.as_json())   #这样我们就获得了json格式的错误提示
    return render(request, "django_form.html")

#定义验证规则
from django import forms      #需要倒入继承django给我们提供的forms
import json
class LoginForm(forms.Form):
    user = forms.CharField(required=True)   #required = True 输入不能为空
    password = forms.CharField(required=True)

def django_form(request):
    if request.method == "POST":
        obj = LoginForm(request.POST)  #request.POST 里面有用户输入的所有信息
        ret = obj.is_valid()           #这样就验证了用户输入是否为空
        result = {"status":False,"message":None}
        if ret:
            result["status"] = True
            print(obj.clean())
        else:
            error_str = obj.errors.as_json()
            print(obj.errors.as_json())
            result["message"] = json.loads(error_str)
        return HttpResponse(json.dumps(result))
    return render(request, "django_form.html")

前端js

(function ($) {
    $.fn.extend({
        VelidForm: function (button) {       //扩展方法
            var inps = this;                 //所有的用户输入框
            $(button).click(function () {    //点击事件绑定
                var input_dict = {};         //定义一个空字典
                $(inps).each(function () {   //循环所有input
                    var v = $(this).val();    //获取value
                    var k = $(this).attr("name");   //获取key
                    input_dict[k] = v;             //给字典赋值
                    });
                $(‘.error-msg‘).remove();
                $.ajax({
                    url: "/django_form/",
                    type: "POST",
                    data: input_dict,
                    dataType: "json",   //这样指定了数据的格式是json
                    //回调函数
                    success: function (data) {
                        //ajax提交成功调用这个函数
                        if(data.status){
                            location.href = "/index/";
                        }else{
                        $.each(data.message, function (k,v) {   //拿到的是一个字典,循环这个字典,获取它的k和v
                            //{"user": [{"code": "required", "message": "This field is required."}],
                            // "password": [{"code": "required", "message": "This field is required."}]}
                            console.log(k,v[0].message);  //获取message内容
                            var tag = document.createElement(‘span‘);   //dom创建标签
                            tag.className = ‘error-msg‘;                //添加样式
                            tag.innerText = v[0].message;               //插入内容
                            // $(‘inps[name="‘ + k + ‘"]‘).after(tag)   字符串的拼接(字符窜拼接的例子,这里没有用到)
                            $(inps).each(function () {                  //循环传过来的input标签
                                if($(this).attr("name") == k ){          //如果这个当前循环到的标签的name = 上面我们循环的k则在他后面添加一个错误信息
                                    $(this).after(tag)
                                }
                            })
                        });

                        // JSON.parse(data) 这样?可以转换成dict格式
                     }
                    },
                    error:function () {
                        //ajax失败自动调用这个函数
                    }
                    })
            })
        }

    });
})(jQuery);

前端 js - 使用默认的message信息

时间: 2024-10-05 05:41:59

python_way day14 HTML-day5 (form表单验证,)的相关文章

用jquery写自己的form表单验证

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

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]

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中的Form表单验证

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

抽屉之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.

element-ui Form表单验证

element-ui Form表单验证规则全解 element的form表单非常好用,自带了验证规则,用起来很方便,官网给的案例对于一些普通场景完全没问题,不过一些复杂场景的验证还得自己多看文档摸索,自己经过数次爬坑 之后,总结了几种form表单的验证规则,为了便于阅读,验证规则是拆分的,完整的代码放在文末 1. 普通输入验证 <el-form-item label="活动名称" prop="name"> <!-- validate-event属性

django form表单验证

简单例子: 1 #自定义验证类 2 class Check_form1(forms.Form): 3 #user就是要验证的字段,这里对应前端name <input type='text' name=user> 4 user = fields.CharField() 5 pwd = fields.CharField() 6 email = fields.EmailField() 7 8 9 10 def test_form1(request): 11 if request.method ==