BBS論壇 自定義form組件

 

2、自定義form組件

from django import forms
from django.forms import widgets
from app01 import models


# 定製form組件
class MyForm(forms.Form):
    username = forms.CharField(max_length=8, min_length=3, label='用戶名', error_messages={
        'max_length': '用戶名長度超啦,不能超過8位!',
        'min_length': '兄dei,你輸的用戶名也過短了,最起碼3位吧!',
        'required': '這麼大的框,你至少輸點東西吧!',
    }, widget=widgets.TextInput(attrs={
        'class': 'form-control',
    }))

    password = forms.CharField(max_length=8, min_length=3, label='密碼', error_messages={
        'max_length': '密碼長度超啦,不能超過8位!',
        'min_length': '兄dei,你輸的密碼也過短了,最起碼3位吧!',
        'required': '密碼這種東西,你至少輸點東西吧!',
    }, widget=widgets.PasswordInput(attrs={
        'class': 'form-control',
    }))

    confirm_password = forms.CharField(max_length=8, min_length=3, label='確認密碼', error_messages={
        'max_length': '確認密碼長度超啦,不能超過8位!',
        'min_length': '兄dei,你輸的確認密碼也過短了,最起碼3位吧!',
        'required': '密碼這種東西,你至少輸點東西吧!',
    }, widget=widgets.PasswordInput(attrs={
        'class': 'form-control',
    }))

    email = forms.EmailField(label='郵箱', error_messages={
        'required': '郵箱不能爲空啊!',
        'invalid': '郵箱的格式你居然寫錯了!'
    }, widget=widgets.EmailInput(attrs={
        'class': 'form-control'
    }))

    # 局部鉤子  --> 校驗用戶名是否存在
    def clean_username(self):
        username = self.cleaned_data.get('username')
        user_obj = models.UserInfo.objects.filter(username=username).first()
        if user_obj:
            self.add_error('username', '這個用戶名已經存在了,換一個試試吧!')
        return username

    # 全局鉤子函數  --> 校驗密碼是否一致
    def clean(self):
        password = self.cleaned_data.get('password')
        confirm_password = self.cleaned_data.get('password')
        if not password == confirm_password:
            self.add_error('confirm_password', '兄弟,手抖了吧,兩次輸入的密碼不同啊!')
        return self.cleaned_data

相關文章
相關標籤/搜索