• Django学习手册


    """
    核心:
    from django import forms
    from django.forms import fields
    from django.forms import widgets

    class table_name(forms.Form)
      自定义字段名 = fields.字段数据类型(字段参数)
    

    字段数据类型: 基本字段: fields.CharField() #字符串类型 fields.IntegerField() #整型类型 fields.FloatField() #浮点类型 fields.EmailField() #邮箱 fields.DecimalField() #自定义浮点类型 自参数: max_digits=20 #总长度 decimal_places=20 #小数长度 #文件类型 #html form上传时,enctype="multipart/form-data" ,views 中 request.FILES fields.ImageField() #图片上传按钮。需要pillow模块 fields.filefield() #文件上传选项 fields.filepathfiled() #对应一个(文件组成的下拉菜单)选择,必须参数path=''.选项为这个地址里边所有的文件。
                       可选参数recursive=True是否包含子文件夹里的文件 #日期/时间 fields.DateField() #日期,格式:2015-09-01 fields.TimeField() #时间,格式:11:11 fields.DateTimeField() #日期时间,2000-01-01 11:11 fields.DurationField() #时间间隔,%d %H:%M:%S.%f #IP地址 fields.GenericIPAddressField() #ip地址类型 #选择框 fields.booleanfield() #checkbox选择框 fields.ChoiceField() #choice类型 单选框(返回的值为字符串) fields.MultipleChoiceField() #choice类型 多选框 多值为列表(返回的值为字符串) 自参数: choices=[(1,'A'),(2,'B'),(3,'C')] fields.TypedChoiceField() #choice类型 单选框(返回的值可定制) fields.TypedMultipleChoiceField() #choice类型 多选框 多值为列表(返回的值可定制) 自参数: coerce = lambda x : int(x) choices=[(1,'A'),(2,'B'),(3,'C')] #自定制 fields.RegexField() #自定义属性 自参数: regx #自定义正则表达式 FORM 字段参数: required=True, #必填 max_length=20, #最大值 min_length=5, #最小值 error_messages="required":'不能为空!'}, #错误信息 label="用户名" #标签名 initial="请输入用户名" #默认值 show_hidden_initial=True/False #隐藏,且保存上次数据(检测两次输入) validators=[] #自定制验证规则 localsize=True/False #是否支持本地化 disabled =True/False #是否能编辑 widget #定制HTML插件 1.自定义显示html type 2.设置参数属性值 3.设置css样式
    """

    示例:

    from django import forms
    from django.forms import fields
    from django.forms import widgets
    
    class TestTorm(forms.Form):
        user = fields.CharField(required=True,#必填
                                error_messages={"required":'不能为空!'},
                                label="用户名",
                                )
        age = fields.IntegerField(required=True,
                                  label="年龄",
                                  error_messages={
                                      "required":'不能为空!',
                                      "min_value":"太小了",
                                      'max_value':'太老了'
                                  },
                                  min_value=18,
                                  max_value=50)
        email = fields.EmailField(required=True,label="邮箱",error_messages={"required":'不能为空!'})
        choice = [(1, 'A'), (2, 'B'), (3, 'C')]
        aaa = fields.TypedChoiceField(choices=choice)
        # 通过widget 自定制方式
        aab = fields.CharField(widget=widgets.Select())
    
        # 通过__init__ 实时获取数据库的数据 传递给前端页面
        def __init__(self,*args,**kwargs):
            from app01 import models
            super(TestTorm,self).__init__(*args,**kwargs)
            self.fields['aab'].widget.choices= models.Userinfo.objects.values_list('uid','uname')
    
    #实例化时,传递值
    # obj = TestTorm('可以以字典方式设置默认值')

    views 页面:(导入TestTorm,然后实例化,然后将实例传递至前端)

    from django.shortcuts import render,HttpResponse
    from app01.tests import TestTorm
    
    # Create your views here.
    
    def index(request):
        if request.method == 'GET':
            obj = TestTorm()
            # obj = TestTorm('可以以字典方式设置默认值')
            return render(request, 'index.html',{'obj':obj})
        else:
            obj = TestTorm(request.POST)
            return render(request, 'index.html', {'obj': obj})

    obj = TestTorm(request.POST) 获取前端提交的字段,验证是否符合,不符合即 错误字段提示

    前端页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
                {#不同的生成方式一#}
                <form method="post" action="/index/" novalidate  >
                    {#novalidate 不加载 #}
                    <li>{% csrf_token  %}</li>
                    <p>{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}</p>
                    <p>{{ obj.age.label }}{{ obj.age }}{{ obj.errors.age.0 }}</p>
                    <p>{{ obj.email.label }}{{ obj.email }}{{ obj.errors.email.0 }}</p>
                    <p>{{ obj.aaa.label }}{{ obj.aaa }}{{ obj.errors.aaa.0 }}</p>
                    <p>{{ obj.aab.label }}{{ obj.aab }}{{ obj.errors.aab.0 }}</p>
                    <li><input type="submit" class="tijiao" value="提交"></li>
                </form>
    
                {#不同的生成方式:二   生成整表#}
                <form method="post" action="/index/" novalidate  >
                    {{ obj.as_p }}          
                    {#p标签形式#}
                </form>
                <form method="post" action="/index/" novalidate  >
                    {{ obj.as_table }}      
                    {#table标签形式#}
                </form>
                <form method="post" action="/index/" novalidate  >
                    {{ obj.as_ul }}         
                    {#ul标签形式#}
                </form>
        </div>
    </body>
    </html>

    自定制

    以上要不满足需求还可以自定制:
    widget 
            1.自定义显示html type
            2.设置参数属性值 attr={'class':'classname'}
            3.设置css样式 attr={'study':'classname'}
    # 先导入这个模块
    from django.forms import widgets
    # 参数 格式
    自定义字段名 = fields.字段数据类型(widget=widgets.插件(参数:attr={'class':'classname'}))
    choice = [(1, 'A'), (2, 'B'), (3, 'C')]
    aab = fields.CharField(widget=widgets.Select(choices=choice))

    数据过滤定制:(导入模块,定制规则和提示)

    from django.core.validators import RegexValidator
    
    class TestTorm(forms.Form):
                    pwd = fields.CharField(
                                required=True,
                                label="密码",
                                error_messages={
                                    "required": '不能为空!'},
                                widget=widgets.PasswordInput(attrs={ 'placeholder': "请输入密码"}),
                                validators=[RegexValidator(r"[0-9]+",'必须为数字'),
                                            RegexValidator(r"^177", '必须为177开头')])    

    渲染问题

    为什么Django传递至前端的 字符串能正常渲染成HTML标签,不是要加{{ | safe }} 才可以显示的吗?????

    python 通过拼接字符串然后传递至前端页面渲染成HTML标签
    前有学过在 {{text | safe }} 即可渲染
    Django中可以:
    from django.utils.safestring import mark_safe text = mark_safe(text) 再传递至前端也可以达到效果
  • 相关阅读:
    java环境变量的配置
    usb转串口驱动时会出现“文件的哈希值不在指定的目录”这样的提示
    虚拟机安装tools for Ubuntu
    ubuntu 修改root密码
    旺旺自动回复
    android 启动流程
    ASCII 码表
    电脑中快速查找东西
    appengine 云计算。 部署web网络。
    openssl-0.9.8k_WIN32(RSA密钥生成工具
  • 原文地址:https://www.cnblogs.com/Anec/p/9614956.html
Copyright © 2020-2023  润新知