zoukankan      html  css  js  c++  java
  • django开发 Form操作

    #自定义filter(过滤器)

    user下新建目录:templatetags,下新建:tmpTags.py

    from django import template
    register = template.Library

    @register.filter
    def status_filter(x):
    return '自定义filter'


    html.index中引入:{% load tmpTags %}
    使用过滤器:{{ navs|status_filter }} == 把navs当作参数传给status_filter处理 (最多接收两个参数)

    接收多个参数用simple_tag
    @register.simple_tag()
    def test_simple_tag(x,y,z):
    return x+y+z

    前端使用方式:{% test_simple_tag a b c %} == 把a,b,c当成参数传给test_simple_tag处理

    # Form操作对前端html向后台提交的数据进行验证

    1-创建forms.py文件

    2-forms中校验规则

    from django import forms
    from django.core.exceptions import ValidationError  # 验证有问题,抛异常用的
    # validators引入的验证方式 def test_phone(value): print("test_phone", 3) if len(value) != 11: raise ValidationError('手机格式不正确') else: return value class ArticleFrom(forms.Form): phone = forms.CharField(required=True, # 是否必填 validators=[test_phone], # 公共验证器---优先级最高01 error_messages={ # 错误信息提示 'required': '必填参数未填', }) title = forms.CharField(required=True, # 是否必填 max_length=10, # 最大长度5 min_length=5, # 最小长度 strip=False, # 是否去掉用户输入的空格 默认是True error_messages={ # 错误信息提示 'required': '必填参数未填', 'max_length': '最大10个字符', 'min_length': '最小5个字符' })



    #针对个别字段进行验证,优先级--02

    def clean_phone(self):
    print(2)
    return self.cleaned_data.get('phone')
    #form中的钩子函数,全部数据验证、优先级--03
    def clean(self):
    print(1)
    return self.cleaned_data

    3- views中引入校验规则

    from user.forms import ArticleFrom
    def
    article(request): if request.method == 'GET': return render(request, 'post.html') else: # 实例化form验证器,接收post传过来的数据 articleObj = ArticleFrom(request.POST) # 判断当前 写好的验证器是否验证通过 返回 True 或 false f = articleObj.is_valid() if f: # 验证通过的字段会都在cleaned_data中,是个dict print("articleObj.cleaned_data",articleObj.cleaned_data) else:# 验证不通过,拿到错误信息 print("articleObj.errors",articleObj.errors) # 通过 dict方式取 信息 print("articleObj.errors",articleObj.errors.get_json_data()) #错误信息:msg msg = articleObj.errors.get_json_data().get('title')[0].get('message')

     4-ModelForm使用,  Form 和 Model结合,能够省略Form定义字段。共用Model,同时也可以保留form功能

    class StudentForm(forms.ModelForm):
        name = forms.CharField(validators=[test_name])
        class Meta:     #创建类变量和Model建立映射关系
            model = models.Student
            fields = '__all__'   #验证全部字段
            fields = {'name'}    #验证单个字段
            exclude = {'name'}   #排除验证某个字段
    

    # clean的原则和forms.Form相同
    def clean(self): return self.cleaned_data #单个字段验证 必须保证form中有这个字段 def clean_name(self): return self.cleaned_data.get('name')


    #views中和form逻辑一致
    def student(request):
    if request.method == 'GET':
    return render(request, 'student.html')
    else:
    studentObj = StudentForm(request.POST)
    f = studentObj.is_valid()
    if f:
    print(studentObj.cleaned_data)
    else:
    print(studentObj.errors)
    return HttpResponse('ok')



    models中:
    class Student(models.Model):
    name = models.CharField(verbose_name='学生名字', max_length=50)
    age = models.IntegerField(verbose_name='年龄')
    class Meta:
    db_table = 'student'
       
  • 相关阅读:
    oracle grant授权的理解
    SQL SERVER 2005 版本以上 CTE递归查询的实现
    常用的加密解密技术之——【加密原理】
    常用的汇编指令
    常用加密解密技术之——【DES算法实现过程分析】
    VC6.0编译器中混有.c文件时出现fatal error C1853错误解决办法
    C++ Primer读书笔记
    Shot(数学+物理题,不简单)
    [置顶] C++/C 数据类型的取值范围
    <fzu1922>非主流
  • 原文地址:https://www.cnblogs.com/whcp855/p/13600035.html
Copyright © 2011-2022 走看看