django学习笔记---form表单

views.py

from django import forms
class FM(forms.Form):
    user = forms.CharField(error_messages={'required':'用户名不能为空'})   # 定制错误信息
    pwd = forms.CharField(max_length=12,min_length=6,error_messages={'required':"密码不能为空","max_length":"密码长度小于12","min_length":"密码长度大于6"})
    email = forms.EmailField(error_messages={'required':'邮箱不能为空','invalid':"邮箱格式不对"})

def fm(request):
    if request.method == "GET":
        return render(request,'fm.html')
    if request.method == "POST":
        obj = FM(request.POST)
        r1 = obj.is_valid()   # 如果form表单的数据填写符合规范则为真,(email的按照email的格式)
        if r1:
            print(obj.cleaned_data)
        else:
            print(obj.errors)   # <ul class="errorlist"><li>user<ul class="errorlist"><li>用户名不能为空</li></ul></li><li>pwd<ul class="errorlist"><li>密码长度大于6</li></ul></li><li>email<ul class="errorlist"><li>邮箱格式不对</li></ul></li></ul>
            print(obj.errors.as_json())   # {"user": [{"message": "\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a", "code": "required"}], "pwd": [{"message": "\u5bc6\u7801\u957f\u5ea6\u5927\u4e8e6", "code": "min_length"}], "email": [{"message": "\u90ae\u7bb1\u683c\u5f0f\u4e0d\u5bf9", "code": "invalid"}]}
            print(obj.errors['user'])   # <ul class="errorlist"><li>用户名不能为空</li></ul>
    return render(request,"fm.html",{'obj':obj})

fm.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/app1/fm/" method="POST">
        {% csrf_token %}
        <p><input type="text" name="user" />{{ obj.errors.user.0 }}</p>   <!-- 获取第一个错误 -->
        <p><input type="password" name="pwd" />{{ obj.errors.pwd.0 }}</p>
        <p><input type="text" name="email" />{{ obj.errors.email.0 }}</p>
        <input type="submit" value="提交" />
    </form>
</body>
</html>

这样就能进行form表单验证了。不过如图所示,有个不好就是,你每次点提交后,input中的值就没有了。

所以改进后:

views.py

from django import forms
class FM(forms.Form):
    user = forms.CharField(error_messages={'required':'用户名不能为空'})   # 定制错误信息
    pwd = forms.CharField(max_length=12,min_length=6,error_messages={'required':"密码不能为空","max_length":"密码长度小于12","min_length":"密码长度大于6"})
    email = forms.EmailField(error_messages={'required':'邮箱不能为空','invalid':"邮箱格式不对"})

def fm(request):
    if request.method == "GET":
        obj = FM()
        return render(request,'fm.html',{'obj':obj})    # 将obj对象传到fm.html中,不然get进去页面就显示为空的
    if request.method == "POST":
        obj = FM(request.POST)
        r1 = obj.is_valid()   # 如果form表单的数据填写符合规范则为真,(email的按照email的格式)
        if r1:
            print(obj.cleaned_data)
            models.UserInfo.objects.create(**obj.cleaned_data)  # 这样就在数据库中生存一条记录了
        else:
            print(obj.errors)   # <ul class="errorlist"><li>user<ul class="errorlist"><li>用户名不能为空</li></ul></li><li>pwd<ul class="errorlist"><li>密码长度大于6</li></ul></li><li>email<ul class="errorlist"><li>邮箱格式不对</li></ul></li></ul>
            print(obj.errors.as_json())   # {"user": [{"message": "\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a", "code": "required"}], "pwd": [{"message": "\u5bc6\u7801\u957f\u5ea6\u5927\u4e8e6", "code": "min_length"}], "email": [{"message": "\u90ae\u7bb1\u683c\u5f0f\u4e0d\u5bf9", "code": "invalid"}]}
    return render(request,"fm.html",{'obj':obj})



fm.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/app1/fm/" method="POST">
        {% csrf_token %}
        <p>{{ obj.user }}{{ obj.errors.user.0 }}</p>   <!-- 获取第一个错误 -->
        <p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p>
        <p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
        <input type="submit" value="提交" />
    </form>
</body>
</html>


要把required去掉,email变成text,变成低级浏览器模式,才能在input框旁边生成自定义的错误。因为高级浏览器会自带required,不然错误提示就是这样的



猜你喜欢

转载自blog.csdn.net/qq_34964399/article/details/79781071