3 回答

TA貢獻1827條經驗 獲得超8個贊
Django forms使用容易, 又方便擴展, 因此Django admin和CBVs基本都基于forms使用. 事實上, 由于django forms的強大驗證功能, 大多數Django API 框架都是用forms作為其驗證的一部分.
雖然django forms的學習需要花費一點時間, 但如果將forms, models和views結合起來使用, 我們可以花費很少的經歷來完成龐大的工作.
1. Django Forms的強大之處
有些django項目并不直接呈現HTML, 二是以API框架的形式存在, 但你可能沒有想到, 在這些API形式的django項目中也用到了django forms. django forms不僅僅是用來呈現HTML的, 他們最強的地方應該是他們的驗證能力. 下面我們就介紹幾種和Django forms結合使用的模式:
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轉換而來的
3. 模式二, 在ModelForm中修改驗證
在上面的例子中, 如果我們希望每篇article title的開頭都是"new", 那么應該怎么做呢? 首先我們需要建立自定義的驗證(validator):

TA貢獻1842條經驗 獲得超13個贊
首先你要創建自己的Form類,繼承于django的Form,
然后創建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 關注
- 761 瀏覽
添加回答
舉報