• 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'
       
  • 相关阅读:
    FloatingActionButton
    OpenWrt for WR720N
    OpenWrt
    shell修改文件名(二)
    shell修改文件名(一)
    POJ 1300 Door Man(欧拉通路)
    USACO zerosum DFS 1A
    hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置
    Leetcode-subsets
    单链表的各种操作 笔试 面试
  • 原文地址:https://www.cnblogs.com/whcp855/p/13600035.html
Copyright © 2020-2023  润新知