Django之Form验证(***)

Django之Form组件

  Form组件,用来做一些数据的提前验证,比如登录注册中,我们定义的是邮箱登录,但是用户却手机号登录,那么用Form组件去实现这个验证过程的话,数据的判断逻辑就不会去数据库匹配啦,这样反而会减轻数据库的压力。

  所以,Form组件的功能是对用户的请求数据库做验证的。并且对获取的数据也可以做验证功能。  

  以往的登录注册中的问题:

    在以往的登录注册页面中,如果有输入错误,页面是重新刷新的,所以之前输入对的数据也会随之消失。

    重复进行用户数据的校验:正则,长度,是否为空等等。

    Form组件的解决方法:

    先导入模块:  

from django.forms import Form
from django.forms import fields

  后端:

from django.forms import Form
from django.forms import fields

class LoginForm(Form):
    username = fields.CharField(
        max_length=18,
        min_length=6,
        required=True,
        error_messages={
            "required":"用户名不能为空",
            "min_length":"长度不能小于6位",
            "max_length":"长度不能大于18位",
        }
    )
    password = fields.CharField(
        min_length=16,
        required=True,
        error_messages={
            "required": "密码不能为空",
            "min_length": "长度不能小于16位",
        }
    )

def login(request):
    if request.method == "GET":
        return render(request,"login.html")
    else:
        obj = LoginForm(request.POST)
        ret = obj.is_valid()  #内部自动校验,ret是False和True的结果
        if ret:
            #用户输入格式正确
            print(obj.cleaned_data)  #cleaned_data 是一个字典类型,是校验成功后拿到的值。
            return redirect('http://www.baidu.com')
        else:
            #用户输入格式错误
            # print(obj.errors)  #所有的错误信息,这个错误信息是一个对象,是 __str__ 方法
            # print(obj.errors["username"])
            # print(obj.errors["username"][0]) #在LoginForm类中定义了多个条件,那么就可能有多个错误信息,所有可以用索引取第一个
            # print(obj.errors["password"])
            # print(obj.errors["password"][0])
            return render(request,"login.html",{"obj":obj})

  前端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>登录</h1>
    <form method="post" action="login.html">
        {% csrf_token %}
        <p>username:<input type="text" name="username">{{ obj.errors.username.0 }}</p>
        <p>password:<input type="password" name="password">{{ obj.errors.password.0 }}</p>
        <input type="submit" value="submit">
    </form>
</body>
</html>

    

 

------- END -------

猜你喜欢

转载自www.cnblogs.com/george92/p/11441796.html