zoukankan      html  css  js  c++  java
  • modelform的操作以及验证

    1,model的两个功能

      1,数据库操作

      2,验证只有一个clean方法作为钩子来操作,方法比较少

    2,form(专门用来做验证的) 根据form里面写的类,类里面的字段,这些字段里有内置的的正则表达式

    一。基于form来做的过程

    创建两张表,两张表之间用Foreignkey进行关联

    生成表

    如果现再index.html的页面中对UserInfo表进行操作,那么应该把该表格中的所有信息从后台传过来,把所有的字段重新创建一遍(用form的化,需要自己写field字段,用modelForm,字段可以从类里面去提取过来)

     1 from django.shortcuts import render
     2 from django import forms
     3 from django.forms import fields
     4 from app1 import models
     5 
     6 #基于form来做的数据展示
     7 class UserInfoForm(forms.Form):
     8     username = fields.CharField(max_length=32,label='用户名')
     9     email = fields.EmailField()
    10     user_type = fields.ChoiceField(
    11         choices=models.UserType.objects.values_list('id','caption')
    12     )
    13 
    14 def __init__(self,*args,**kwargs):#继承了UserInfoForm这张表格,并且将他重构
    15     super(UserInfoForm,self.__init__(*args,**kwargs))
    16     self.fields['user_type'].choices = models.UserType.objects.values_list('id','caption')
    17     #每次都将表中的信息全部都更新
    18     
    19 def index(request):
    20     if request.method=='GET':
    21         obj = UserInfoForm()
    22         return render(request,'index.html',{'obj':obj})
    23     elif request.method=='POST':
    24         obj = UserInfoForm(request.POST)
    25         print(obj.is_valid())
    26         print(obj.cleaned_data)
    27         print(obj.errors)
    28         # models.UserInfo.objects.create(**obj.cleaned_data)#创建信息
    29         return render(request,'index.html',{'obj':obj})
    30 """
    31 #基于modelform来做的数据信息展示
    32 class UserInfoModelForm(forms.ModelForm):#form下的modelform方法
    33     class Meta:
    34         model = models.UserInfo#指去哪个类里面去获取字段
    35         fields='__all__'#指的是所有的字段
    36         #fields=['username','email']#显示指定字段
    37         # exclude=['username']#排除某一项
    38 def index(request):
    39     if request.method =='GET':
    40         obj = UserInfoModelForm()
    41         return render(request,'index.html',{'obj':obj})
    42     elif request.method=='POST':
    43         obj = UserInfoModelForm(request.POST)
    44         print(obj.is_valid())#验证是不是通过
    45         print(obj.cleaned_data)#验证所有的数据
    46         print(obj.errors)
    47         return render(request,'index.html',{'obj':obj})
    48 """

    注释部分为modelform来做数据展示的views代码,其余部分为基于model的数据展示

    用form方法的时候,验证功能的函数其实是写在BaseForm里的:

    UserInfoForm-->继承了Form--->继承了BaseForm(is_valid......)

    点击提交的时候,modelform也可以做验证

    UserInfoModelForm-->继承了ModelForm--->继承了BaseModelForm--->继承了BaseForm(is_valid......)

  • 相关阅读:
    go-web摘抄1-基础知识
    arduino3-机械臂
    Arduino-2 使用按键开关
    Arduino-1 点亮小灯
    树莓派的语音识别
    gitlab的环境搭建及使用
    python数据处理 2
    idea 无法创建class文件
    Intellij IDEA添加database无法显示表等问题
    Intell idea 添加 jd反编译插件
  • 原文地址:https://www.cnblogs.com/cerofang/p/8448203.html
Copyright © 2011-2022 走看看