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
相关文章
相关标签/搜索