美文网首页
CBV_FormView

CBV_FormView

作者: 魔曦帝天 | 来源:发表于2019-09-25 19:20 被阅读0次

主要用于前后端验证,过滤数据,将数据存储到数据库。

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 %}

相关文章

  • CBV_FormView

    主要用于前后端验证,过滤数据,将数据存储到数据库。 FormView 先创建一个 forms 类users_for...

网友评论

      本文标题:CBV_FormView

      本文链接:https://www.haomeiwen.com/subject/ftwvuctx.html