十四、django Form表单

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25611295/article/details/85708995

Form表单验证(用户请求验证+生成HTML标签)

应用场景:
示例:
1、用户管理
2、添加用户页面、 显示HTML标签、
3、提交:数据验证(例如用户名密码不为空,电话号码位数等)
4、成功之后保存

error_messages:错误信息
    widget:渲染方式
    required:不为空

案例:写一个简单的注册,并且验证填写规范,并且成功把数据存入Mysql
注意,更多的字段判断参考:https://www.cnblogs.com/onda/p/7509172.html

views.py逻辑:

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

#引入django 的三个Form 的三个规范
class RegisterForm(Form):
    username  = fields.CharField(
        error_messages = {'required':'用户名不能为空'},
        #'class':'c1' 可以用于前端补充样式
        widget = widgets.TextInput(attrs={'class':'c1'})
    )
    password  = fields.CharField(
        #最小字节长度是4,最大字节长度是8
        required=True,
        min_length = 4,
        max_length = 8,
        error_messages = {'required':'密码栏不能为空'},
        widget = widgets.PasswordInput(attrs={'class':'c1'})
    )
    password2  = fields.CharField(
        error_messages = {'required':'确认密码栏不能为空'},
        widget = widgets.PasswordInput(attrs={'class':'c1'})
    )
    def clean(self):
        """判断密码一致性,第二次输入的密码验证完毕后需要丢弃,不存数据库"""
        try:
            pwd = self.cleaned_data['password']
            pwd2 = self.cleaned_data['password2']
            if pwd == pwd2:
                del self.cleaned_data['password2']
                return self.cleaned_data
            else:
                from django.core.exceptions import ValidationError
                self.add_error('password2',ValidationError('二次输入密码不一致'))
                return self.cleaned_data
        except KeyError as e:
            return self.cleaned_data
def register(request):
    if request.method == 'GET':
        form = RegisterForm()
        return render(request,'register.html',{'form':form})
    else:
        print (request.POST)
        form = RegisterForm(request.POST)
        #判断我们的form符不符合我们上述的规定
        if form.is_valid():
            #cleaned_data是我们提交的信息,以字典形式存在

            print ('form.cleaned_data-->',form.cleaned_data)
            models.Userinfo.objects.create(**form.cleaned_data)
            #print (form.cleaned_data['password'])
            #print (form.cleaned_data['password2'])
            return HttpResponse('注册成功')
        else:
            print(form.errors)
        return render(request,'register.html',{'form':form})

url.py路由:

url(r'^register', views.register),

templates中的html:

register.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post" novalidate>
        {% csrf_token %}
        <p>用户名:{{ form.username }} {{ form.errors.username.0 }}</p>
        <p>密码:{{ form.password }} {{ form.errors.password.0 }}</p>
        <p>确认密码:{{ form.password2 }} {{ form.errors.password2.0 }}</p>
        <input type="submit" value="注册">
    </form>
</body>
</html>

注意此处使用了csrf,我们需要在setting.py中开放这一行代码

测试

http://127.0.0.1:8080/register
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
全部输入正确:

并且数据库会增加相应的字段。

猜你喜欢

转载自blog.csdn.net/qq_25611295/article/details/85708995
今日推荐