主要用于前后端验证,过滤数据,将数据存储到数据库。
FormView
先创建一个 forms 类
users_form.py
# 导入models
from users.models import UsersProfile
class UserRegisterForm(forms.ModelForm): # 继承forms.ModelForm
class Meta: 源数据
model = UsersProfile 对应的数据库
fields = ['username', 'password', 'mobile', 'age'] 对应字段
# 添加对字段的验证
def clean_mobile(self):
"""
验证手机号是否合法
:return: 合法的数据或者错误信息
"""
mobile = self.cleaned_data['mobile']
PRGEX_MOBILE = r'^1[358]\d{9}|^147\d{8}|^176\d{8}$'
regex = re.compile(PRGEX_MOBILE)
if regex.match(mobile):
return mobile
else:
raise forms.ValidationError(
'无效的手机号',
code='mobile_invalid'
)
views.py
存储数据库,成功与否,要返回 父类调用的方法
from users.models import UsersProfile
from django.views.generic.edit import FormView
from django.urls import reverse, reverse_lazy
class UserRegisterFormView(FormView):
template_name = 'users/register.html' 跳转的模板
form_class = UserRegisterForm forms 的类
success_url = reverse_lazy('users:usersLogin') 注册成功后跳转的页面
存储数据
def form_valid(self, form): 验证表单提交是否格式正确
#
user = UsersProfile(**form.cleaned_data)
user.set_password(form.cleaned_data['password']) # 设置明文密码
user.save() # 保存数据
return super().form_valid(form) #
def form_invalid(self, form):
数据无效返回原来的模板,并且携带原来提交的数据
print("form-->", form)
return super().form_invalid(form)
register
<form action="{% url 'users:Register' %}" method="POST">
{% csrf_token %}
<div class="form-group">
<label for="{{ form.username.id_for_label }}">用户名 </label>
{{ form.username }}
<span>{{ form.errors.username.0 }}</span>
</div>
<div class="form-group">
<label for="{{ form.password.id_for_label }}">密码 </label>
{{ form.password }}
</div>
<div class="form-group">
<label for="{{ form.mobile.id_for_label }}">手机号 </label>
{{ form.mobile }}
<span>{{ form.errors.mobile.0 }}</span>
</div>
<div class="form-group">
<label for="{{ form.age.id_for_label }}">年龄 </label>
{{ form.age }}
</div>
<div class="form-group">
{% for radio in form.gender %}
<label class="radio-inline" for="{{ radio.id_for_label }}">
{{ radio }}
</label>
{% endfor %}
网友评论