使用Django的Form表单进行注册的验证

DJango作为一个无比强大的开发框架,自身所带的强大功能基本能满足我们的开发需求,今天我们就来研究一下django的Form表单。
django的Form表单为我们提供了许多便利,它可以渲染模板中的表单,可以对表单中的数据进行渲染,还可以实现在刷新页面的情况下不丢失表单数据,设想你要填写10个表单,其中一个填写错误,提交之后返回给你没有数据的表单页面让你重新填写是不是脑瓜疼,Form就可以实现刷新网页而不丢失数据,堪比ajax。
既然要把表单渲染到模板中,就需要先创建表单。form创建表单可以继承models里的字段,即继承数据库中的字段进行创建,也可以自定义表单。通常自定义表单更加的灵活,但有一个缺点就是无法直接验证数据库中对字段的限制条件,需要我们自定义函数进行验证。我使用自定义form表单。
首先导入一些模块

from django import forms # 导入forms模块,所有的表单都要继承这个类
from .models import * # 导入models模块中的表单,自定义验证时需要使用其连接数据库
from django.forms import widgets as wds # 自定义表单属性的插件
from  django.forms import fields #定义表单字段的模块
from django.core.exceptions import ValidationError #用于自定义表单错误信息
from django.core.validators import RegexValidator #正则验证
import hashlib # 对密码进行md5加密的方法

先生成注册界面的表单:

class RegisterForm(forms.Form):
    username = fields.CharField(label="用户名",strip=False,max_length=12,min_length=2,

                                error_messages={
                                    "max_length":"用户名不能超过12位",
                                    "min_length":"用户名不能低于两位",
                                    "required":"用户名不能为空"
                                },
                                validators=[RegexValidator(
                                    regex=r'^[\u4E00-\u9FA5A-Za-z0-9_]+$',
                                    message="用户名只能由汉字,数字,字母,下划线组成",
                                )],

                            )
    gender = fields.ChoiceField(label="性别",required=False,
                                choices=(
                                    ("男","男"),
                                    ("女","女")
                                ),
                                widget=wds.RadioSelect(),
                            )
    password1 = fields.CharField(label="密码",strip=False,max_length=20,min_length=8,widget=forms.PasswordInput,
                                 error_messages={
                                    "max_length":"密码不能超过20位",
                                    "min_length":"密码不能低于8位",
                                    "required":"密码不能为空"
                                }
                            )
    password2 = fields.CharField(label="确认密码",widget=forms.PasswordInput,
                                 error_messages={
                                    "required":""
                                }
                            )
    answer = fields.CharField(label="答案",max_length=50,
                              help_text ="可用于找回密码或修改密码",
                              error_messages={
                                    "max_length": "答案太长了",
                                    "required": "答案不能为空"
                            }

                        )

fileds中用到的参数的参数
max_length:最大长度
min_length:最小长度
strip:是否有空格
error_messages:返回前端的错误信息
validators:验证规则
widget:定义表单样式
help_text:帮助信息
接下来就需要把定义好的表单渲染到模板中,只需要一行:

from .form import * #导入form中的表单类
def register(req):
    print(req.method)
    if req.method == "GET":
        form = RegisterForm() #实例化表单类
        return render(req,"register_login.html",locals())

前端的渲染:
在这里插入图片描述

在页面中显示:
在这里插入图片描述
这样我们就可以进行基本的验证了。
比如什么都不填写点击注册时:
在这里插入图片描述
当我们在信息填写错误提交后,在刷新页面以填写的数据并不会丢失(除密码外):

在这里插入图片描述
但是这些功能使用js也可以实现,而且可以实现的更好,那么我们为什么要使用form编写呢。试想我们想要判断用户名是否已经存在,这个时候就需要去数据库查找了, 这个时候form的作用就凸现出来了,我们可以在form中自定义验证。
form为我们预留了三个form自定义验证方法:

  1. def cleane_字段名():单个字段验证,只要该字段验证通过就会执行该自定义验证函数,若验证通过可以pass或者返回字段值,错误可以使用ValidationError 返回错误。
  2. def cleaned():对所有字段进行验证,任何一个字段验证通过都会执行该自定义验证函数,若验证通过pass或者返回接收到的字段值,错误可以使用ValidationError 返回错误。
  3. def _post_cleand():对所有字段进行验证,若验证通过pass或者返回接收到的字段值,错误进行add_error。
    以上是三种方法都可以对接收到的字段进行修改后返回,我们使用的是第一种。
    代码如下:
    def clean_password2(self):
	    if not self.errors.get("password1"): # 如果password1字段没有出现错误执行密码一致性判断
	        if self.cleaned_data["password2"] != self.cleaned_data["password1"]:
	            raise ValidationError("您输入的密码不一致,请重新输入")
	        return self.cleaned_data
    
    def clean_username(self):
        if UserInfo.objects.filter(username=self.cleaned_data["username"]):
            raise ValidationError("您输入的用户名已存在")
        else:
            return self.cleaned_data["username"]

验证如下:
在这里插入图片描述
这样我们就完成了一个完整注册校验。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中的单可以使用Django自带的单模块(forms)来创建。使用Django单模块可以简化单的创建和验证,同时也可以提供更好的数据安全性。 下面是使用Django单模块创建单的步骤: 1. 创建一个forms.py文件,并导入forms模块: ``` from django import forms ``` 2. 创建一个单类,并继承自forms.Form类: ``` class MyForm(forms.Form): field1 = forms.CharField(label='Field1', max_length=100) field2 = forms.EmailField(label='Field2') ``` 3. 在视图函数中实例化单类,并将其作为参数传递给模板: ``` from .forms import MyForm def my_view(request): form = MyForm() return render(request, 'my_template.html', {'form': form}) ``` 4. 在模板中渲染单: ``` <form method="POST" action=""> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form> ``` 注意:form.as_p会将单渲染成一个p标签。 5. 在视图函数中处理单提交: ``` def my_view(request): if request.method == 'POST': form = MyForm(request.POST) if form.is_valid(): # 处理单数据 field1 = form.cleaned_data['field1'] field2 = form.cleaned_data['field2'] # ... return redirect('success') else: form = MyForm() return render(request, 'my_template.html', {'form': form}) ``` 注意:使用form.is_valid()来验证单是否有效,如果有效则可以使用form.cleaned_data来获取单数据。 以上就是使用Django单模块创建单的基本步骤,更多详细信息可以查看Django官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值