django表单

时间:2019-11-25 18:03:08   收藏:0   阅读:88

 django中的表单继承自forms.Form:

主要功能有两个:页面渲染和表单数据验证

一般都是用来做表单验证

如果想从表单接收用户名数据,一般情况下,需要在HTML中手动编写一个如下的表单元素:

<form action="/your-name/" method="post">
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
    <input type="submit" value="OK">
</form>

使用django的表单

一.编写表单类

在Django中,Form类来自用生成上面的表单,不再需要手动在HTML中编写。

首先,在当前app内新建一个forms.py文件(这个套路是Django的惯用手法,就像views.pymodels.py等等),然后输入下面的内容:

from django import forms

class NameForm(forms.Form):
    your_name = forms.CharField(label=Your name, max_length=100)

要点:

(警告:由于浏览器页面是可以被篡改、伪造、禁用、跳过的,所有的HTML手段的数据验证只能防止意外不能防止恶意行为,是没有安全保证的,破坏分子完全可以跳过浏览器的防御手段伪造发送请求!所以,在服务器后端,必须将前端当做“裸机”来对待,再次进行完全彻底的数据验证和安全防护!)

每个Django表单的实例都有一个内置的is_valid()方法,用来验证接收的数据是否合法。如果所有数据都合法,那么该方法将返回True,并将所有的表单数据转存到它的一个叫做cleaned_data的属性中,该属性是以个字典类型数据。

上边的表单在前端会渲染成

<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" maxlength="100" required />

一定要注意,它不包含<form>标签本身以及提交按钮!!!为什么要这样?方便你自己控制表单动作和CSS,JS以及其它类似bootstrap框架的嵌入!

 

上边只是简单的一个例子,还有很多属性

在class NameForm(forms.Form)中,

    属性=forms.类型(参数)

类型和html标签类型的对应关系如下:

  1.类型:

    1.BooleanField:checkbox

    2.CharField:text

    3.ChoiceField:select

    4.EmailField:email

    5.URLField:url

    6.DateField:date

    7.IntegerField:number

  2.参数:

    1.required  默认为True,表示该控件不能为空

    2.label  控件前面的文本

    3.initial  控件的初始化值,相当于value

    4.widget  指定控件的小部件

    5.error_message  错误时候的文本提示

    6.disabled  为True时表示该空间会被禁用  

widget小部件:生成到网页上的控件  

  Textinput:type="text"

  Passwordinput:type="paddword"

  Numberinput:type="number"

  Emailinput:type="email"

  URLinput:type="url"

  Hiddeninput:type="hidden"

  Textarea:<textarea>

  

  CheckboxSelectMultipe:type="checkbox"

  RadioSelect:type="radio"

  Select:<select>

  SelectMultipe:<select multipe>

 

widget小部件的使用:

  属性=forms.CharField(

    label="用户",

    widget=forms.小部件类型) 

  

  属性=forms.CharField(

    label="用户",

    widget=forms.小部件类型(

      attrs={

        "html属性值":"值"}))

二.视图函数

# views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect

from .forms import NameForm

def get_name(request):
    # 如果form通过POST方法发送数据
    if request.method == POST:
        # 接受request.POST参数构造form类的实例
        form = NameForm(request.POST)
        # 验证数据是否合法
        if form.is_valid():
            # 处理form.cleaned_data中的数据
            # ...
            # 重定向到一个新的URL
            return HttpResponseRedirect(/thanks/)

    # 如果是通过GET方法请求数据,返回一个空的表单
    else:
        form = NameForm()

    return render(request, name.html, {form: form})

要点是:

通过表单的is_bound属性可以获知一个表单已经绑定了数据,还是一个空表。

 

三.模板处理

xxx.html

<form action="/your-name/" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Submit" /> </form>

要点:

提示:默认情况下,Django支持HTML5的表单验证功能,比如邮箱地址验证、必填项目验证等等。

 

表单渲染格式:

不仅可以通过{{ form }}渲染模板,还有更多的方式:

注意:你要自己手动编写<table><ul>标签。

原文:https://www.cnblogs.com/pfeiliu/p/11929267.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!