Django之Form表单

Posted yan-peng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django之Form表单相关的知识,希望对你有一定的参考价值。

1:什么是表单

2:HTML表单与Django表单

3:Django中表单的使用流程

4:常用的字段与验证器

5:自定义验证器

6:  提取错误信息

7:ModelForm:

  (1)自定义错误消息

  (2)save()方法

 

1什么是表单:表单是用来收集用户信息的表的集合,比如用户在网站上登入(输入自己的用户名,密码提交到网站)这个过程用到的表就是表单

2HTML表单与django表单
  html表单:form标签,提交地址,请求方式,提交按钮

<form action="" method="post" enctype="multipart/form-data">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="file">
    <input type="checkbox">
    <input type="submit">
</form>

  django表单:是由Form类实现的,主要分为forms.Form和forms.ModelForm两种,前者为基本的表单或者为结合模型生成的表单

  django表单的作用:(1)类似于html页面一样生成表单模板(2)对表单提交上来的数据进行验证(重点)

3:django表单使用的基本流程:

  (1)生成一个表单模板:

  在APP中创建一个py文件,名字为forms;这里面写表单的内容:目录如下

技术分享图片

  forms.py代码:

from django import forms

class IndexForm(forms.Form):
    title = forms.CharField(max_length=12,label="标题")  //max_length表示最大长度,label表示标题名字
    content = forms.CharField(widget= forms.Textarea,label="内容") //widget表示表单的属性
    replay = forms.BooleanField(required=False,label="记住我")

  view.py代码:

from django.shortcuts import render
from django.views.generic import View
from .forms import IndexForm
class IndexView(View):
    def get(self,request):    //get请求的时候,返回一个IndexForm
        form = IndexForm()
        return render(request,"index.html",context={"form":form})

  html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    <table>
        {{ form.as_table  }}    //在HTML中渲染一个表单三种方式(form.as_table,form.as_ul,form.as_p),之后还要添加提交按钮
        <tr>
            <td></td>
            <td><input type="submit"></td>
        </tr>
    </table>
</form>
</body>
</html>

   (2)对表单提交上来的数据进行验证

  forms.py

from django import forms

class IndexFrom(forms.Form):
    title = forms.CharField(max_length=12,label="标题",min_length=4)  //最少不能小于4个
    content = forms.CharField(widget= forms.Textarea,label="内容")
    email = forms.EmailField()    //添加一个邮箱的验证
    replay = forms.BooleanField(required=False,label="记住我")  //required=False  表示值可以不填,默认为True

  view.py

from django.shortcuts import render,HttpResponse
from django.views.generic import View
from .forms import IndexFrom
class IndexView(View):
    def get(self,request):
        form = IndexFrom()
        return render(request,"index.html",context={"form":form})

    def post(self,request):
        form = IndexFrom(request.POST)   //将request.POST接收到的值传给IndexForm表单进行验证,
        if form.is_valid():   //如果验证成功则为True
            return HttpResponse("ok")
        else:
            print(form.errors.get_json_data())
            return HttpResponse("fail")

4:常用的验证器

  (1)常用的字段(Field):

    

    



以上是关于Django之Form表单的主要内容,如果未能解决你的问题,请参考以下文章

Django中Form表单之字段详解

Django之Form表单

Django基础之Form表单验证

django之form表单与ModelForm表单

Django之Form功能

Django之form表单