3 回答

TA貢獻1827條經(jīng)驗 獲得超8個贊
Django forms使用容易, 又方便擴展, 因此Django admin和CBVs基本都基于forms使用. 事實上, 由于django forms的強大驗證功能, 大多數(shù)Django API 框架都是用forms作為其驗證的一部分.
雖然django forms的學習需要花費一點時間, 但如果將forms, models和views結(jié)合起來使用, 我們可以花費很少的經(jīng)歷來完成龐大的工作.
1. Django Forms的強大之處
有些django項目并不直接呈現(xiàn)HTML, 二是以API框架的形式存在, 但你可能沒有想到, 在這些API形式的django項目中也用到了django forms. django forms不僅僅是用來呈現(xiàn)HTML的, 他們最強的地方應該是他們的驗證能力. 下面我們就介紹幾種和Django forms結(jié)合使用的模式:
2. 模式一: ModelForm和默認驗證
最簡單的使用模式便是ModelForm和model中定義的默認驗證方式的組合:
# myapp/views.py
from django.views.generic import CreateView, UpdateView
from braces.views import LoginRequiredMixin
from .models import Article
class ArticleCreateView(LoginRequiredMixin, CreateView):
model = Article
fields = ('title', 'slug', 'review_num')
class ArticleUpdateView(LoginRequiredMixin, UpdateView):
model = Article
fields = ('title', 'slug', 'review_num')
正如以上代碼中看到的一樣:
ArticleCreateView和ArticleUpdateView中設置model為Article
兩個view都基于Article model自動生成了ModelForm
這些ModelForm的驗證, 是基于Article model中定義的field轉(zhuǎn)換而來的
3. 模式二, 在ModelForm中修改驗證
在上面的例子中, 如果我們希望每篇article title的開頭都是"new", 那么應該怎么做呢? 首先我們需要建立自定義的驗證(validator):

TA貢獻1842條經(jīng)驗 獲得超13個贊
首先你要創(chuàng)建自己的Form類,繼承于django的Form,
然后創(chuàng)建form中的字段,例子如下:
from django import forms
class AuthenticationForm(forms.Form):
"""
Base class for authenticating users. Extend this to get a form that accepts
username/password logins.
"""
username = forms.CharField(label=_("Username"), max_length=254)
password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
error_messages = {
'invalid_login': _("Please enter a correct username and password. "
"Note that both fields may be case-sensitive."),
'no_cookies': _("Your Web browser doesn't appear to have cookies "
"enabled. Cookies are required for logging in."),
'inactive': _("This account is inactive."),
}
- 3 回答
- 0 關(guān)注
- 759 瀏覽
添加回答
舉報