美文网首页
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

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