zoukankan      html  css  js  c++  java
  • Django与from组件

    froms组件介绍

    1 注册功能,登录功能,前端需要校验(字段长度,邮箱是否合法。。。)
    2 前端校验可以没有,后端校验是必须的,使用传统方式  if判断写的很多
    3 借助于forms组件,可以快速实现字段的校验
        from django.forms import Form

    froms校验字段功能

    ### 1 写一个类,类里写要校验的字段
    class MyForm(forms.Form):
        # 校验这个字段,最大长度是32,最小长度是3
        name = forms.CharField(required=False, max_length=32, min_length=3,label='用户名')
        email = forms.EmailField(label='邮箱')
        age=forms.IntegerField(max_value=200,min_value=0,label='年龄')
        
        
    ### 2 视图函数中使用
    def register(request):
        # 数据可以是从前端传过来的,也可以是自己后台的数据
    
        # 我现在有以下数据
        data={'name':'lqz','email':'33333@qq.com','age':900}
        # data={'email':'33333@qq.com','age':100}
        # data={'age':100}
        # 校验数据是否合法
        # 实例化得到form对象,把要校验的数据传入
        form=myforms.MyForm(data)
        # 校验数据:form.is_valid() 返回布尔类型
    
        if form.is_valid():
            print('校验通过')
            # 校验通过的数据
            print(form.cleaned_data)  # 不一定是上面传入的数据
        else:
            print(form.cleaned_data)
            print('校验失败')
            # 哪个字段失败了?失败的原因是什么
            print(form.errors)
            print(type(form.errors))
            from django.forms.utils import ErrorDict
            #### 重写了__str__
            print(form.errors.as_json())#打印看得懂的数据
            print(form.errors.as_data())
    
            # form.errors.as_ul()  # 是为了渲染模板
    
    
        return HttpResponse('ok')

    forms渲染模板功能

    ## 视图函数
    def register(request):
        if request.method=='GET':
            form=myforms.MyForm()
            return render(request,'register.html',{'form':form})
        elif request.method=='POST':
            # 数据校验
            form=myforms.MyForm(request.POST)
            if form.is_valid():
                print('校验通过,存数据库')
            else:
                print(form.errors.as_data())
                print('校验失败,返回错误')
            return HttpResponse('ok')
        

    ## 模板
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <hr> <h1>手动创建模板</h1> <form action="" method="post"> <p>用户名:<input type="text" name="name"></p> <p>邮箱:<input type="text" name="email"></p> <p>年龄:<input type="text" name="age"></p> <p><input type="submit" value="提交"></p> </form> <hr> <h1>半自动渲染模板1</h1> <form action="" method="post"> <p>用户名:{{ form.name }}</p> <p>邮箱:{{ form.email }}</p> <p>年龄:{{ form.age }}</p> <p><input type="submit" value="提交"></p> </form> <h1>半自动渲染模板2(用的最多)</h1> <form action="" method="post"> <p>{{ form.name.label }}--{{ form.name }}</p> <p>{{ form.email.label }}---{{ form.email }}</p> <p>{{ form.age.label }}---{{ form.age }}</p> <p><input type="submit" value="提交"></p> </form> <h1>半自动渲染模板3(用的最多)</h1> <form action="" method="post"> {% for foo in form %} <p>{{ foo.label }} :{{ foo }}</p> {% endfor %} <p><input type="submit" value="提交"></p> </form> <h1>全自动(了解)</h1> <form action="" method="post"> {# {{ form.as_ul }}#} {{ form.as_p }} {# <table>#} {# {{ form.as_table }}#} {# </table>#} <p><input type="submit" value="提交"></p> </form> </body> </html>
    每天逼着自己写点东西,终有一天会为自己的变化感动的。这是一个潜移默化的过程,每天坚持编编故事,自己不知不觉就会拥有故事人物的特质的。 Explicit is better than implicit.(清楚优于含糊)
  • 相关阅读:
    【原】从/dev/null重新打开标准输出
    Go 接口转换的一个例子
    关于软件编译安装的出错处理
    【原】GO 语言常见错误
    HP平台由于变量声明冲突导致程序退出时的core
    动态链接库加载出错:cannot restore segment prot after reloc: Permission denied
    Windows VC++常见问题汇总
    .net:System.Web.Mail vs System.Net.Mail应该用哪个
    网络管理的功能
    Hello World! — 用 Groovy 编写的 Java 程序
  • 原文地址:https://www.cnblogs.com/kylin5201314/p/13849180.html
Copyright © 2011-2022 走看看