26-django自带的表单组件

以前的文章写过表单,表单提交,再到视图函数里面去验证,但是自己写很麻烦,Django提供了组件.

先看看自己写的表单:
html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<form action="/reg" method="post">
    {%  csrf_token %}
    <p>
        用户名:
        <input type="text" name="username">
        {{ error.username }}
    </p>
    <p>
        密码:
        <input type="password" name="pwd">
        <span>{{ error.pwd }}</span>
    </p>
    <p>
        <input type="submit">
    </p>
</form>
</body>
</html>

视图函数:
做的验证是密码数量

def reg(request):
    error_msg = {"pwd":"","username":""}
    if request.method == "POST":
        name = request.POST.get("username")
        pwd = request.POST.get("pwd")

        if len(pwd) < 6:
            error_msg["pwd"] = "密码不能小于6位"

    return render(request,'reg.html',{"error":error_msg})

再看看Django提供的组件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="reg2" method="post">
    {% csrf_token %}
    {{ form_obj.as_p}}
    {{ form_obj.errors }}
    <p><input type="submit"></p>
</form>

</body>
</html>

只写了一个表框架,一个submit按钮,其他的都由后台生成发送到前端.
先导入from组件,定义一些input的框,这里的写法很像是模型

from django import forms
class RegForm(forms.Form):
    name = forms.CharField(max_length=16,label="username")
    pwd = forms.CharField(label="password",min_length=6,max_length=24,
                          error_messages={
        "min_length":"密码最短为6位",
        "max_length":"密码最长为24位"
    })

def reg2(request):
    form_obj = RegForm()
    if request.method == "POST":
        form_obj = RegForm(request.POST)
        #让form组件帮助做校验
        if form_obj.is_valid():
            pass
    return render(request,"reg2.html",{"form_obj":form_obj})
pwd = forms.CharField(label="password",min_length=6,max_length=24,
                          error_messages={
        "min_length":"密码最短为6位",
        "max_length":"密码最长为24位"
    })

label设置名字,后面两个参数是做校验的最大长度和最小长度.
最后一个参数是发送的错误信息.

form组件用法

  1. from django import forms

  2. 定义一个form类
    class RegFrom(from.From):

     生成html
    

3.实例化一个from对象,传递到模板语言中
3. 在目标语言中调用form对象相应的方法和属性

做校验:
1.from_obj = RegFrom(request.POST)
2.from_obj.is_valid()

校验函数

注册,密码啥的没有问题就存入数据库吧!

def reg2(request):
    form_obj = RegForm()
    if request.method == "POST":
        form_obj = RegForm(request.POST)
        # 让form组件帮助做校验
        if form_obj.is_valid():
            # pass
            # 校验通过,把数据存在数据库
            # 所以进过校验的数据form_obj.cleaned_data
            # 用**解开这个大字典
            models.UserInfo.objects.create(**form_obj.cleaned_data)

    return render(request, "reg2.html", {"form_obj": form_obj})

关键代码

 models.UserInfo.objects.create(**form_obj.cleaned_data)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值