這篇文章談一下我對 Django 中 forms的簡單理解,確切的說像是一種代碼的說明。html
我以爲 Django 中的forms 就是view用與渲染成html語言的代碼。用來幫助咱們減小寫html的工做量。web
下面的代碼就是本博客實現評論功能的forms。django
from django import forms from .models import Comment import mistune class CommentForm(forms.ModelForm): nickname = forms.CharField( label='暱稱', max_length=50, widget=forms.widgets.Input( attrs={'class': 'form-control', 'style': 'width: 60%;'} ) ) email = forms.CharField( label='Email', max_length=50, widget=forms.widgets.Input( attrs={'class': 'form-control', 'style': 'width: 60%;'} ) ) website = forms.CharField( label='網站', max_length=100, widget=forms.widgets.URLInput( attrs={'class': 'form-control', 'style': 'width: 60%;'} ) ) content = forms.CharField( label='內容', max_length=500, widget=forms.widgets.Textarea( attrs={'row': 6, 'class': 'form-control'} ) ) def clean_content(self): content = self.cleaned_data.get('content') if len(content) < 10: raise forms.ValidationError('內容長度過短了!') content = mistune.markdown(content) return content class Meta: model = Comment fields = ['nickname', 'email', 'website', 'content']
下面我一段一段的解釋一下:markdown
from django import forms # 導入 forms 模塊 from .models import Comment # 導入Comment模型,評論的須要填寫的字段均來自於此 import mistune # 導入 mistune 模塊,爲了使評論支持markdown語法 class CommentForm(forms.ModelForm): # 咱們寫的CommentForm 繼承了forms模塊中的ModelForm類 nickname = forms.CharField( # 這裏咱們對模型中的每個字段對應的表單進行設置 label='暱稱', # 這裏對應html label標籤中的文字 max_length=50, # 設置表單中填寫的最大長度 widget=forms.widgets.Input( # 設置html中的標籤類型爲input attrs={'class': 'form-control', 'style': 'width: 60%;'} # 規定input的樣式 ) ) def clean_content(self): # 判斷評論長度和表單數據驗證 content = self.cleaned_data.get('content') if len(content) < 10: raise forms.ValidationError('內容長度過短了!') content = mistune.markdown(content) return content class Meta: # 規定類的元數據 model = Comment fields = ['nickname', 'email', 'website', 'content']