08.form組件

form組件html

在須要使用用戶認證組件的app下建立my_form.pydjango

# my_form.py from django.forms import widgets # 用於規定type from django import forms # forms組件 from blog.models import UserInfo # 引入表進行建立鉤子 from django.core.exceptions import ValidationError # 鉤子捕獲異常 class UserForm(forms.Form): user = forms.CharField(max_length=32, label="用戶名", widget=widgets.TextInput(attrs={"class": "form-control"}), error_messages={"required": "該字段不能爲空"}) pwd = forms.CharField(max_length=32, label="密碼", widget=widgets.PasswordInput(attrs={"class": "form-control"}), error_messages={"required": "該字段不能爲空"}) re_pwd = forms.CharField(max_length=32, label="確認密碼", widget=widgets.PasswordInput(attrs={"class": "form-control"}), error_messages={"required": "該字段不能爲空"}) email = forms.EmailField(max_length=32, label="郵箱", widget=widgets.EmailInput(attrs={"class": "form-control"}), error_messages={"required": "該字段不能爲空"}) # 二次校驗 def clean_user(self): user = self.cleaned_data.get("user") userinfo = UserInfo.objects.filter(username=user).first() if not userinfo: return user else: # 已有人註冊過了 raise ValidationError("該用戶已被註冊") # 必定要用raise ValidationError("xxxxx") def clean(self): # 全局鉤子,鍵__all__ pwd = self.cleaned_data.get("pwd") # 全部乾淨的字段以及對應的值的字典 re_pwd = self.cleaned_data.get("re_pwd") # 有多個錯誤信息須要再多一個判斷 if pwd and re_pwd: # 兩個都有值時 if pwd.upper() == re_pwd.upper(): return self.cleaned_data else: raise ValidationError("兩次密碼不一致") else: return self.cleaned_data # register.html {% for field in form %} <div class="form-group"> <label for="{{ field.auto_id }}">{{ field.label }}</label>#.auto_id生成id_field,用於label對應input的id {{ field }} <span class="error pull-right"></span> </div> {% endfor %} #views.register if form.is_valid(): # 若是有值 response["user"] = form.cleaned_data.get("user") # 生成用戶信息 user = form.cleaned_data.get("user") pwd = form.cleaned_data.get("pwd") email = form.cleaned_data.get("email") avatar_obj = request.FILES.get("avatar") # 拿頭像 print(form.cleaned_data) # 代碼優化 extra = {} # 擴展字段 if avatar_obj: # 若是用戶傳了頭像 extra["avatar"] = avatar_obj # 擴展字段賦值給字典  UserInfo.objects.create_user(username=user, password=pwd, email=email, **extra) # 傳字典**{} else: # 若是沒有值,則說明有錯誤form.errors拿到全部錯誤的字典 print(form.cleaned_data) print(form.errors) response["msg"] = form.errors
相關文章
相關標籤/搜索