HTML的form表單和django的form表單,

django的表單系統,分2種,html

基於django.forms.Form的全部表單類的父類,前端

基於django.forms.ModelForm,能夠和模型類綁定的Form,python

直接用原生的form表單,也能夠直接用,較麻煩,數據庫

django的form表單,也可用可不要,django

 

在views裏建立一個類,繼承了forms.Form ,每一個字段就是一個輸入框,後端

#-----
#django 的form表單

from django import forms

class MyForm(forms.Form):
    #forms對應的是前端的form表單,form 表單要驗證的字段
    #都與校驗有關係,與數據庫沒有關係

    #封裝性強,能夠 在前端指定顯示那些字段,label 是顯示指定的數據,
    user = forms.CharField(label="用戶名")#輸入的用戶名,
    age = forms.IntegerField(label="年齡")
    email = forms.EmailField()


#form註冊

def reg2(request):
    # 實列化出一個form對象,傳到前端

    form_obj = MyForm()

    return render(request,"reg2.html",{"form_obj":form_obj})

 

在前端新建一個註冊頁面,前端渲染表單,是後端表單類實例出來的對象,用對象調用每一個字段,瀏覽器

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

</head>
<body>

<h3>form表單使用</h3>
<form action="/reg2/" method="post">
{#    渲染從後端傳來的變量,as_p 是段落#}
    {% csrf_token %}
{#    {{ form_obj.as_p }}#}
    <p>姓名{{ form_obj.user }}</p>
    <p>年齡{{ form_obj.age }}</p>
    <p>郵箱{{ form_obj.email }}</p>

</form>

</body>

</html>

能夠從瀏覽器的檢查元素中看到,瀏覽器自動添加了一些東西,post

<body>

<h3>form表單使用</h3>
<form action="/reg2/" method="post">

    <input name="csrfmiddlewaretoken" value="GyY3KE5uM7HeErOEZ8OQFwUJYQYaknrOmavdmfufBuVOHdDSWfeHDyt2pjXarGAV" type="hidden">

    <p>姓名<input name="user" required="" id="id_user" type="text"></p>
    <p>年齡<input name="age" required="" id="id_age" type="number"></p>
    <p>郵箱<input name="email" required="" id="id_email" type="email"></p>

</form>



</body>

若是在前端頁面隨便輸入就提交,前端會作校驗,這都是瀏覽器作的校驗,ui

 

 

能夠本身定製,字段的錯誤信息提示,和顯示信息,spa

#django 的form表單

from django import forms

class MyForm(forms.Form):
    #forms對應的是前端的form表單,form 表單要驗證的字段
    #都與校驗有關係,與數據庫沒有關係

    #封裝性強,能夠 在前端指定顯示那些字段,label 是顯示指定的數據,require 是必須填寫的,
    user = forms.CharField(label="用戶名",min_length=5,max_length=8)#輸入的用戶名,
    age = forms.IntegerField(label="年齡",error_messages={"required":"必填",})
    email = forms.EmailField()


#form註冊

def reg2(request):

    errors_obj = " "
    if request.method == "POST":
        form_post = MyForm(request.POST)#拿到請求的全部數據
        if form_post.is_valid():#判斷數據是否合法,返回布爾值,

            print("data",form_post.cleaned_data)#獲取數據,獲得一個字典格式,

        #添加數據庫
        # User.objects.create_user()
    # 實列化出一個form對象,傳到前端

        #若是是輸入不合格式的信息,錯誤信息,
        else:
            #獲取錯誤信息
            errors_obj = form_post.errors

            # print("error",form_post.errors["user"][0])
            # print("error",form_post.errors["age"])
            # print("error",type(form_post.errors))#字典類型,


    form_obj = MyForm()

    return render(request,"reg2.html",{"form_obj":form_obj,"errors_obj":errors_obj})

 

在前端頁面

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

</head>
<body>

<h3>form表單使用</h3>
<form action="/reg2/" method="post">
{#    渲染從後端傳來的變量,as_p 是段落#}
    {% csrf_token %}
{#    {{ form_obj.as_p }}#}
    <p>姓名{{ form_obj.user }} <span>{{ errors.obj.user.0 }}</span> </p>
    <p>年齡{{ form_obj.age }}<span>{{ errors.obj.age.0 }}</span></p>
    <p>郵箱{{ form_obj.email }}<span>{{ errors.obj.email.0 }}</span></p>
    <input type="submit">

</form>

</body>

</html>
相關文章
相關標籤/搜索