1. 程式人生 > >form(form基礎、標籤渲染)

form(form基礎、標籤渲染)

form基礎

Django中的Form使用時一般有兩種功能:

1、生成html標籤

2、驗證輸入內容

要想使用django提供的form,要在views裡匯入form模組

  from django import forms

 

首先我們建立我們的模版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h3>普通方式</h3>

<form action=""
method="post"> {% csrf_token %} <div> <label for='user'>使用者名稱</label> <p><input type="text" name="name" id="name"></p> </div> <div> <label for='pwd'>密碼</label> <p><input type="
password" name="pwd" id="pwd"></p> </div> <div> <label for='r_pwd'>確認密碼</label> <p><input type="password" name="r_pwd" id="r_pwd"></p> </div> <div> <label for='email'>郵箱</label> <p><input type="
email" name="email" id="email"></p> </div> <input type="submit"> </form> </body> </html>

 

然後我們來定義一個form 類,以及我們需要掌握的一些基礎知識,這些程式碼全部寫在 試圖頁面裡。

from django.shortcuts import render,HttpResponse
from django.forms import widgets
# Create your views here.

from django.forms import widgets
from django import forms

#建立form表單驗證規則
class UserForm(forms.Form):
    name = forms.CharField(min_length=4),
    pwd = forms.CharField(min_length=6),
    r_pwd = forms.CharField(min_length=6),
    email = forms.EmailField(),

def index(request):
    if request.method == 'POST':
        form = UserForm(request.POST)
        #如果輸入全部符合規則判斷為真將結果傳遞給 changed_data,並列印
        print('form.is_vaild---------',form.is_valid())
        if form.is_valid():
            print(form.changed_data)
        #如果失敗,列印為真的值,列印錯誤,獲取錯誤字典中name 的錯誤值。
        else:
            print(form.cleaned_data)
            print('錯誤資訊的型別---------',type(form.errors))
            print(form.errors)
            print(form.errors.get('name'))
        return HttpResponse('ok')
    form=UserForm()

    return render(request,'index.html')

如果輸入正確的驗證資訊

後臺輸出

form.is_vaild--------- True

{'name': '召喚精靈', 'pwd': '1111111111', 'r_pwd': '1111111111', 'email': '[email protected]'}

 

可以看出輸入符合驗證條件的資料, is_vaild  會返回 True  ,然後正確資訊會儲存到cleaned_data 中

 

下面輸入一下錯誤驗證資訊

form.is_vaild--------- False
錯誤資訊的型別--------- <class 'django.forms.utils.ErrorDict'>
獲取錯誤資訊字典 <ul class="errorlist"><li>name<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul></li></ul>
<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul>

可以看到型別是已字典到形式儲存到,然後咱們通過字典到的取值方法 get 取到驗證錯誤到報錯資訊。

如果同時有錯誤有正確會怎麼樣

 

form.is_vaild--------- False
{'pwd': '11111111111', 'r_pwd': '1111111111', 'email': '[email protected]'}
錯誤資訊的型別--------- <class 'django.forms.utils.ErrorDict'>
獲取錯誤資訊字典 <ul class="errorlist"><li>name<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul></li></ul>
<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul>

 

雖然驗證失敗了,但是cleaned_data中保留了正確的驗證資訊。

 

標籤渲染

方式一

<h3>方式一</h3>

<form action="" method="post">
    {% csrf_token %}
    <div>
        <label for="">使用者名稱</label>
        {{ form.name }}
    </div>
    <div>
        <label for="">密碼</label>
        {{ form.pwd }}
    </div>
    <div>
        <label for="">確認密碼</label>
        {{ form.r_pwd }}
    </div>
    <div>
        <label for=""> 郵箱</label>
        {{ form.email }}
    </div>
    <input type="submit" >
</form>

方式二

需要給form驗證條件,新增 label屬性

class UserForm(forms.Form):
    name = forms.CharField(min_length=4,label='使用者名稱')
    pwd = forms.CharField(min_length=6,label='密碼')
    r_pwd = forms.CharField(min_length=6,label='確認密碼')
    email = forms.EmailField(label='郵箱')

 

<h4>方式二</h4>
<form action="" method="post">
    {% csrf_token %}
    {% for foo in form %}
        <div>
            <label for="">{{ foo.label }}</label>
         {{ foo }}
        </div>

    {% endfor %}
    <input type="submit">

方式三

<h4>方式三</h4>
<form action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit">
</form>

 

小結:

雖然這三種標籤渲染的方式 第三種最為簡介方便,但是侷限性也最大,不能根據自己的需求調整標籤,只能使用他提供的方法,如果常用的話還是選擇第二種標籤渲染方式。