zoukankan      html  css  js  c++  java
  • 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) 再传递至前端也可以达到效果
  • 相关阅读:
    BOI 2002 双调路径
    BOI'98 DAY 2 TASK 1 CONFERENCE CALL Dijkstra/Dijkstra+priority_queue/SPFA
    USACO 2013 November Contest, Silver Problem 2. Crowded Cows 单调队列
    BOI 2003 Problem. Spaceship
    USACO 2006 November Contest Problem. Road Blocks SPFA
    CEOI 2004 Trial session Problem. Journey DFS
    USACO 2015 January Contest, Silver Problem 2. Cow Routing Dijkstra
    LG P1233 木棍加工 动态规划,Dilworth
    LG P1020 导弹拦截 Dilworth
    USACO 2007 February Contest, Silver Problem 3. Silver Cow Party SPFA
  • 原文地址:https://www.cnblogs.com/Anec/p/9614956.html
Copyright © 2011-2022 走看看