我對 Django 中 froms 使用的理解

這篇文章談一下我對 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']
相關文章
相關標籤/搜索