• django----Form表单


     Form概念:

    扩展内容:https://www.cnblogs.com/songxuexiang/p/9239407.html#_label3_1_0_4

    一、Form组件介绍

    Form组件可以做的几件事情:

      1、用户请求数据验证

      2、自动生成错误信息    

      3、打包用户提交的正确信息

      4、如果其中有一个错误了,其他的正确这,保留上次输入的内容

      4、自动创建input标签并可以设置样式

     Form使用:

    1、创建规则

    class Foo(Form): #必须继承
        username = xxx
        password = xxx
        email = xxx
    注意这里的字段必须和input的name字段一致
    

    2、数据和规则进行匹配

    先导入view.py

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

     

    示例

    from django.shortcuts import render,redirect
    from app01 import models
    # Create your views here.
    from django.forms import Form
    from django.forms import fields
    from django.forms import widgets
    # 1、创建规则
    class TeacherForm(Form):  #必须继承Form
        # 创建字段,本质上是正则表达式
        username = fields.CharField(
         initial = "小明", #设置默认值 required=True, #必填字段 error_messages={"required":"用户名不能为空!!"}, #显示中文错误提示 widget=widgets.TextInput(attrs={"placeholder":"用户名","class":"form-control"}) #自动生成input框
         label = "用户",
         label_suffix = ":"
    ) password = fields.CharField(required=True, error_messages={'required': '密码不能为空'}, widget=widgets.TextInput(attrs={'placeholder': '密码', 'class': 'form-control'})) # 不能为空 email = fields.EmailField( required=True, error_messages={"required":"邮箱不能为空!!","invalid":"无效的邮箱"}, widget=widgets.EmailInput(attrs={"placeholder": "邮箱", "class": "form-control"}) # 自动生成input框
         label="邮箱",
         label_suffix = ":",
    ) #不能为空且邮箱格式要一致 # 2、使用规则:将数据和规则进行匹配 def teacherindex(request): teacher_obj = models.UserInfo.objects.all() return render(request,"teacherindex.html",{"teacher_obj":teacher_obj}) def add(request): if request.method=="GET": form = TeacherForm() #只是让显示一个input框 return render(request,"add.html",{"form":form }) else: form = TeacherForm(data=request.POST) # print(form) #<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]> if form.is_valid():# 开始验证 # print('执行成功',form.cleaned_data) # 所有匹配成功,字典 # {'username': 'asd', 'password': 'sdf', 'email': 'sadf@live.com','ut_id':1} form.cleaned_data['ut_id'] = 1 #要分的清是班主任还是讲师 models.UserInfo.objects.all().create(**form.cleaned_data) #form.cleaned_data 即读取表单返回的值,为dict类型 return redirect("/teacherindex/") else: # print("=====?",form.errors,type(form.errors))#返回失败的结果 # print(form.errors["username"][0]) #拿到返回失败的结果,渲染到页面 return render(request,"add.html",{"form":form})

    html

    {% block right %}
        <h1>添加老师信息</h1>
        <hr>
        <form method="post" novalidate>
            {% csrf_token %}
            <p>姓名:{{ form.username }}</p>{{ form.errors.username.0 }}
            <p>密码:{{ form.password }}</p>{{ form.errors.password.0 }}
            <p>邮箱:{{ form.email }}</p>{{ form.errors.email.0 }}
            <p><input type="submit" value="提交"></p>
        </form>
    {% endblock %}

    注意: 

    form = TeacherForm()  #没有参数,只是一个input框

    form = TeacherForm(data=request.POST) # 数据和规则放置一起 (添加的时候用)

    form = TeacherForm(initial={'username':obj.username,'password':obj.password,'email':obj.email})   # 显示input,并且将数据库中的默认值填写到input框中 (编辑的时候用)

     Widgets: 

    每个表单字段都有一个对应的Widget 类,它对应一个HTML 表单Widget,例如<input type="text">

    在大部分情况下,字段都具有一个合理的默认Widget。例如,默认情况下,CharField 具有一个TextInput Widget,它在HTML 中生成一个<input type="text">

     字段的数据:

    不管表单提交的是什么数据,一旦通过调用is_valid() 成功验证(is_valid() 返回True),验证后的表单数据将位于form.cleaned_data 字典中。这些数据已经为你转换好为Python 的类型。

    注:此时,你依然可以从request.POST 中直接访问到未验证的数据,但是访问验证后的数据更好一些。

    在上面的联系表单示例中,is_married将是一个布尔值。类似地,IntegerField 和FloatField 字段分别将值转换为Python 的int 和float

  • 相关阅读:
    QLU Regular Contest 002 题解
    QLU_ACM 2021 专题训练(一)题解 [暴力、排序、贪心、二分]
    QLU ACM-ICPC 2020 Training Contest 11 @2016 ICPC Dalian [Cloned] 题解
    Codeforces Round #696 (Div. 2) AB题解
    Educational Codeforces Round 102 (Rated for Div. 2) ABCD题解
    20210114
    Codeforces Round #169 (Div. 2) CDE题解
    树剖注意要点
    bzoj3631树链剖分
    bzoj1103树状数组水题
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/10588031.html
Copyright © 2020-2023  润新知