https://www.cnblogs.com/liwenzhou/p/8747872.html

1. form组件的介绍

之前web开发的模式,以注册为例:
  1. 要有一个注册的页面,页面里面要有form表单 --> 生成HTML代码
  2. form表单要能提交数据到后端,后端要做有效性校验 --> 数据有效性校验
  3. 要把校验的提示信息展示在页面上 --> 校验信息返回并展示,保存原来填写的内容

关于校验:
  1. 前端通过JS代码做校验 --> 最好有
  2. 后端做校验 --> 必须要有(因为前端的校验可以被跳过)

2. form组件的用法
  1. from django import forms
  2, 定义一个form类
    class RegForm(forms.Form):
    user = forms.CharField()
    pwd = forms.CharField()
    email = forms.EmailField()
  生成HTML:
  3. 实例化一个form对象, 传递到模板语言中
  4. 在目标语言中调用form对象的响应方法和属性

三种方式:
1. {{ form_obj.as_p }}
2. 单独写
{{ form_obj.pwd.label }}
{{ form_obj.pwd }}

做校验:
1. form_obj = RegForm(request.POST)
2. form_obj.is_valid()

内置的正则校验器的使用
mobile = forms.CharField(
  label="手机",
  # 自己定制校验规则
  validators=[
  RegexValidator(r'^[0-9]+$', '手机号必须是数字'),
  RegexValidator(r'^1[3-9][0-9]{9}$', '手机格式有误')
  ],
  widget=widgets.TextInput(attrs={"class": "form-control"}),
  error_messages={
  "required": "该字段不能为空",
  }
)

重写__init__方法,动态获取数据库数据:

 def __init__(self,*args,**kwargs):
     super().__init__(*args,**kwargs)
     self.fields["......"].widgets.choice = models.xxxx.objects.all().value_list(xxx)

form表单验证流程

  1、正则表达式验证

  2、clean_name()方法

  3、clean()方法验证

整体验证方法(验证两次密码是否一致):

  

 from django import forms
 from django.forms import fields
 from django.core.exceptions import ValidationError,NON_FIELD_ERRORS

 class Test(forms.Form):
     password = fields.CharField(
         label="密码",
         min_length=6,
         max_length=32,
         required=True,
         error_messages={
             "required":"不能为空",
             "min_length":"最少为6位",
             "max_length":"最长为32位"
         }
     )
     re_pwd = fields.CharField(
         label="确认密码",
         min_length=6,
         max_length=32,
         required=True,
         error_messages={
             "required": "不能为空",
             "min_length": "最少为6位",
             "max_length": "最长为32位"
         }
     )
     def clean(self):
         try:
             v1 = self.cleaned_data["password"]
             v2 = self.cleaned_data["re_pwd"]
         except:
             return

         if v1 == v2:
             pass
         else:
             raise ValidationError("密码不一致")

 def test(request):
     if request.method == "GET":
         obj = Test()
         return render(request,"test.html",locals())
     else:
         obj = Test(request.POST)
         if obj.is_valid():
             return HttpResponse("success")
         else:
             return render(request,"test.html",locals())
 <form method="post" action="/personal_web/test" novalidate>
     {% csrf_token %}
     <div>{{ obj.password.label }}{{ obj.password }}{{ obj.password.errors.0 }}{{ obj.non_field_errors.0 }}</div>
     <div>{{ obj.re_pwd.label }}{{ obj.re_pwd }}{{ obj.re_pwd.errors.0 }}{{ obj.non_field_errors.0 }}</div>
     <div><input type="submit"></div>
 </form>

四、ModelForm

 class BookForm(forms.ModelForm):
     class Meta:
         model = models.Book
         fields = "__all__"      #还可以添加很多参数,如label、message_errors、widgits

 def add(request):
     if request.method == "POST":
         form = BookForm(request.POST)
         if form.is_valid():
             form.save()
             return ......        

     form = BookForm()
     return .....

 def edit(request):

     obj = models.Book.objects.filter(pk=1),first()

     if request.method == "POST":
         form = BookForm(request.POST,instance=obj)
         if form.is_valid():
             form.save()
             return ......        

     form = BookForm(instance=obj)
     return .....

Django之form表单的更多相关文章

  1. Django的form表单

    html的form表单 django中,前端如果要提交一些数据到views里面去,需要用到 html里面的form表单. 例如: # form2/urls.py from django.contrib ...

  2. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  3. 转载:Django之form表单

    转载: 一.使用form类创建一个表单 先定义好一个RegForm类: forms.py from django import forms # 导入forms类 class NameForm(form ...

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

    分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['joh ...

  5. django之form表单验证

    django中的Form一般有两种功能: 输入html 验证用户输入 #!/usr/bin/env python # -*- coding:utf- -*- import re from django ...

  6. django中form表单的提交:

    一,关于表单: 表单在百度百科的解释:   表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...

  7. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

  8. Django的form表单之文件上传

    在生成input标签的时候可以指定input标签的类型为file类型 <!DOCTYPE html> <html lang="en"> <head&g ...

  9. 【django之form表单】

    一.构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=&qu ...

  10. Django 提交 form 表单(使用sqlite3保存数据)

    优化 提交 form 表单,https://www.cnblogs.com/klvchen/p/10608143.html 创建数据库的字段,在 models.py 中添加 from django.d ...

随机推荐

  1. Java集合之Map和Set源码分析

    以前就知道Set和Map是java中的两种集合,Set代表集合元素无序.不可重复的集合:Map是代表一种由多个key-value对组成的集合.然后两个集合分别有增删改查的方法.然后就迷迷糊糊地用着.突 ...

  2. 如何解决一个从SkylineGlobe5版本升级到7版本遇到的小问题

    前些天,有朋友问,用Skyline5版本开发的WinForm程序,升级到7版本的时候,工程提示下面这样“创建组件AxHost失败”的错误,该如何解决呢? 后来经过百度搜索,找到了这样的答案, 测试发现 ...

  3. L2-4 部落 (25 分)

    在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同 ...

  4. C# PDF转Image图片

    概述 PDF是常用的文件格式之一,通常情况下,我们可以使用itextsharp生产PDF文件:可是如何将PDF文件转换成图片那?目前常用的: 思路1.根据PDF绘画轨迹重新绘制图片: 思路2.是将PD ...

  5. CRM专业术语

    客户关系管理(管理学词汇CRM)_百度百科https://baike.baidu.com/item/%E5%AE%A2%E6%88%B7%E5%85%B3%E7%B3%BB%E7%AE%A1%E7%9 ...

  6. js DOM操作 容易犯的错误

    这样一段html片段 <select class="form-control" id="course_chapter" onchange="fi ...

  7. Java BitSet使用场景和示例

    一.什么是BitSet? 注:以下内容来自JDK API: BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个boolean值.用非负的整数将BitSet的位编入索引.可以对每个编 ...

  8. Bugku 杂项 啊哒

    有趣的表情包来源:第七届山东省大学生网络安全技能大赛 下载下来安装包后可以得到一张图片,010发现jpg后面还夹带着一些东西,用binwalk提取后得到一个压缩包,但是需要密码. 我卡在这里了,尝试了 ...

  9. 不同系统下的字长------typedef的意义

    int的字节长度是由CPU和操作系统编译器共同决定的, 一般情况下,主要是由操作系统决定,比如,你在64位AMD的机器上安装的是32位操作系统,那么,int默认是32位的:如果是64位操作系统,64位 ...

  10. python中xrange和range(转)

    说到序列,我们第一想到的是一组有序元素组成的集合.同时,每个元素都有唯一的下标作为索引. 在Python中,有许多内界的序列.包括元组tuple,列表list,字符串str等.上面提到的序列类型(li ...