django之forms組件

如下是forms的例子,展示出forms的做用:html

 

from django.shortcuts import render,HttpResponse

# Create your views here.
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError

from django import forms
#
# class BookForm(forms.Form):
#     title=forms.CharField(max_length=32)
#     price=forms.IntegerField()

#     email=forms.EmailField()

from django.forms import widgets

class UserForm(forms.Form):
    msg={"required":"該字段不能爲空"}
    user=forms.CharField(min_length=5,
                         label="用戶名",
                         error_messages=msg,
                         widget=widgets.TextInput(attrs={"class":"form-control"})
                         )
    pwd=forms.CharField(error_messages=msg,
                           label="密碼",
                         min_length=5,
                          widget=widgets.PasswordInput(attrs={"class":"form-control"})
                           )
    r_pwd = forms.CharField(error_messages=msg,
                            min_length=5,
                          label="確認密碼",
                          widget=widgets.PasswordInput(attrs={"class": "form-control"})
                          )
    email=forms.EmailField(error_messages={"invalid":"郵箱格式錯誤"},
                           label="郵箱",
                           widget=widgets.EmailInput(attrs={"class":"form-control"})
                           )
///局部鉤子,能夠加入本身的判斷邏輯
    def clean_user(self):
        val=self.cleaned_data.get("user")                         
        ret=UserInfo.objects.filter(user=val).first()
        if not ret:
            return val
        else:
            raise ValidationError("用戶名已存在!")

    def clean_pwd(self):

        val=self.cleaned_data.get("pwd")
        if val.isdigit():
            raise ValidationError("密碼不能是純數字!")
        else:
            return val

///全局鉤子,用來判斷兩次密碼的一致性,確認密碼
def clean(self): pwd=self.cleaned_data.get("pwd") r_pwd=self.cleaned_data.get("r_pwd") if pwd and r_pwd: if pwd==r_pwd: return self.cleaned_data else: raise ValidationError("兩次密碼不一致!") else: return self.cleaned_data from app01.models import UserInfo def reg(request): if request.method=="POST": print(request.POST) # 數據校驗 form=UserForm(request.POST) if form.is_valid(): print(form.cleaned_data) UserInfo.objects.create(**form.cleaned_data) #將全部的數據字典經過**打散,建立到表中去 return HttpResponse("OK") else: # print(form.cleaned_data) # print(form.errors) # {"user":["",]} # print(form.errors.get("user")[0]) # {"user":["",]} errors=form.errors #全部的錯誤 print("------>",form.errors.get("__all__")) if form.errors.get("__all__"): g_error=form.errors.get("__all__")[0] #全局鉤子的錯誤信息 return render(request, "reg.html",locals()) else: form=UserForm() return render(request,"reg.html",locals())

reg頁面:能夠經過forms組件進行渲染頁面,不用本身建立頁面git

<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post" novalidate>
                {% csrf_token %}
                {% for field in form %}
                    <div class="form-group">
                        <label for="">{{ field.label }}</label>
                        {{ field }} <span class="error">{{ field.errors.0 }}</span>
                        {% if field.label == "確認密碼" %}
                           <span class="error">{{ g_error|default:"" }}</span>
                        {% endif %}
                    </div>
                {% endfor %}
                <input type="reset">
                <input type="submit" class="btn btn-success pull-right">
            </form>
        </div>
    </div>
</div>

 modelfrom : https://www.cnblogs.com/DI-DIAO/p/8978780.htmdjango

相關文章
相關標籤/搜索