• python---django中form组件(1)简单使用和字段了解


    Django中的Form组件功能:

    1.对用户请求的验证

    2.生成html代码

    Form使用:对用户请求进行验证

    前端代码:

    <form action="/f1.html" method="post" id="fm">
        <p>
            <input type="text" name="user">{{ obj.errors.user.0 }} #获取错误信息.0去掉换行
        </p>
        <p>
            <input type="password" name="pwd">{{ obj.errors.pwd.0 }}
        </p>
        <p>
           <input type="text" name="email">{{ obj.errors.email.0 }}
        </p>
        <p>
            <input type="text" name="age">{{ obj.errors.age.0 }}
        </p>
        {% csrf_token %}
        <input type="submit" value="提交">
    </form>

    服务端:

    from django import forms
    from django.forms import fields
    
    class F1Form(forms.Form):
        #下面数据字段名,对于前端表单中name
        user = fields.CharField(
            max_length=18,
            min_length=6,
            required=True,
            error_messages={
                'required':"用户名不为空",
                'min_length':"太短了",
                'max_length':"太长了",
            }
        )
        pwd = fields.CharField(required=True,min_length=32)
        age = fields.IntegerField(
            required=True,
            error_messages={
                'invalid':"不对"
            }
        )
        email = fields.EmailField(required=True,min_length=6)
    
    def f1(req):
        if req.method == "GET":
            return render(req,"f1.html")
        else:
            #检测是否为空
            #检测格式是否正确
            obj = F1Form(req.POST)
            if obj.is_valid():
                #验证成功
                return HttpResponse("ok")
            else:return render(req,"f1.html",{"obj":obj})

    2.生成html:指的是在客户端中和服务端表单中为了保证name和字段一致,将表单设置为字段(自动生成表单),就是生成html代码

     服务端:

    def f1(req):
        if req.method == "GET":
            obj = F1Form()
            return render(req,"f1.html",{"obj":obj})

    客户端:

    <form action="/f1.html" method="post" id="fm">
        <p>{{ obj.user }}{{ obj.errors.user.0 }} #因为get请求中没有在form组件中传入值,所以不会产生相关错误信息,为空,不显示
        </p>
        <p>
            {{ obj.pwd }}{{ obj.errors.pwd.0 }}
        </p>
        <p>
           {{ obj.email }}{{ obj.errors.email.0 }}
        </p>
        <p>
            {{ obj.age }}{{ obj.errors.age.0 }}
        </p>
        {% csrf_token %}
        <input type="submit" value="提交">
        <input type="button" value="ajax提交" onclick="submitAjaxForm();">
    </form>

     补充:在添加数据库时,保持前端name,form验证字段,models字段名一致,会便于数据添加:

    前端:

          <form action="/add_user.html" method="post">
                <p>{{ obj.username }}{{ obj.errors.username }}</p>
                <p>{{ obj.email }}{{ obj.errors.email }}</p>
                {% csrf_token %}
                <input type="submit" value="提交">
            </form>

    form组件:

    class UserForm(Form):
        username = fields.CharField(max_length=32,required=True)
        email = fields.EmailField(required=True,min_length=10)

    models添加数据:

        if req.method == "POST":
            obj = UserForm(req.POST)  #前端name和form字段一致时,可以直接传递req.POST
            if obj.is_valid():
                User.objects.create(**obj.cleaned_data) #form字段和models字段一致时,可以直接将检验成功的数据传入
            return redirect("add_user.html")

    补充2:为form组件生成html代码是设置默认数据

    def edit_user(req):
        data = models.user.objects.filter(id=req.GET.get("nid")).first()
        obj = UserForm({"username":data.username,"email":data.email}
        return render("edit_user.html",{"obj":obj})  #会在obj中添加上默认数据

    form组件字段介绍:

    CharField字段介绍:

    field_test = fields.CharField(
            required=True,
            max_length=32,
            min_length=16,
            error_messages={
                'required':"必须填写"
            },
            #widget = widgets.Select(choices=[(1,'aa'),(2,'dd'),]),#定制html插件,就是将该字段设置为select表单格式
            label="用户名",
            # initial="ccc", #只能对text格式设置,对于select等有其他方法
            help_text="fawf", #帮助文本
            show_hidden_initial=True, #隐藏框
            validators=[],#自定义验证规则
            disabled=True,  #设置不可编辑
         localize = True, #设置支持本地化
         label_suffix="fawf", #设置label后缀 )

    前端使用:

    <p>{{ obj.field_test.label }}{{ obj.field_test }}{{ obj.field_test.email }}</p>

    注:可以使用obj.as_p,as_table,as_ul将表单一次输出(方便,但是灵活性小了,自定义样式不方便,不推荐)

    {{ obj.as_p }}

    补充:文件上传验证:

    FileField

    form组件:

    file = fields.FileField(required=True)

    前端:

    注意上传文件需要enctype = "mulipart/form-data"
    {{ obj.file }}

    服务端:

    obj = TestForm(req.POST,req.FILES) #含文件上传时需要将文件传入

    ChoiceField:下拉框

    city = fields.ChoiceField(
            choices = [(1,"aa"),(2,"bb"),(3,"cc"),],
         initial = 2, #默认第二项 )

    默认设置:
    TestForm({"city":3}) #默认第三个选中

    MultipleChoiceField()多选下拉框

    initial=[1,2,]设置默认值多个

    TypedChoiceField()继承于ChioceField()可以对接受的数据进行类型转换

    coerce = lambda x: int(x)将字符串转整型

    ComboField()组合验证规则进行验证

    fields.COmboField(fields.CharField(max_length=30),fields.EmailField(required=True),)

     .......

  • 相关阅读:
    195
    194
    193
    192
    191
    190
    Oracle 11g使用rman从单实例迁移到RAC
    RESTful API 设计指南
    Oracle GoldenGate(OGG)- 超级详细
    【转】Oracle GoldenGate OGG管理员手册
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8679520.html
Copyright © 2020-2023  润新知