• views层回顾


    views层回顾

    jsonResponse

    • 导入 from django.http import JsonResponse

    • 默认返回字典,通过safe=false返回类表,其他类型

    • 出现乱码通过字典参数形式传递json_dump_encode={"ensure_ascii": True}

    • 底层实现的json模块

    • 实现前后端分离

    • 后端给前端返回一个json格式的字段穿

    json.dumps(data, clas=自定义类名(可以实现其他序列化), ensure_ascii=False)

    2 大文件上传

    • 表单提交必须是post请求
    • 必须制定form中entype参数为formdata类型,
    • 后端接收request.Files来获取大文件,也可以获取文件中的名字
    • 保存文件,通过for循环方式,for chunk in obj_file.chunks()
    • chunks可以设置接收文件的大小

    3. cbv和fbv源码分析

    1.自定义类并集成views
    2.配置url('^$', views.MyCbv.as_views()), as_views是类的绑定方法,当程序启动时,实际访问的地址是views.view,
    3.当浏览器方式请求,进入url中寻找对应的请求方式,view()方法中执行一些操作之后,return 调用dispathch方法,在查找
    dispathch方法时候,注意属性和方法的查找顺序
    4.在dispath方法中判断,当前的请求方式是否在八大请求之中,如果在则通过反射机制,到自定义类中去映射对应的方法,若映射不到
    则会报错,如果请求方式不再八大请求方式中,则会报错,如果请求方式不再八大请求方式中,则会报错,如果请求方式不再八大请求方式中,则会报错,如果请求方式不再八大请求方式中,则
    5.执行反射获取到自定义类中的方法

    4settings.py源码分析

    实现原理有Django有两个配置文件,一个是用户可以修改,一个用户不可以修改,通过用户修改的方式覆盖底层配置,底层通过先读取django没有暴露的配置文件进行保存setattr方法,在查询用户配置settings.py文件,然后覆盖默认底层配置文件

    5模板传值{{}} {%%}

    {{}} 变量相关

    • int、folat、str、dict、list、set、tuple、bool、
    • 函数(不可以传值)、类对象(类方法,对象绑定方法、普通方法),都是直接运行
    • 常用过滤器,add length slice safe default filesizeformat truncatechars
    • 通过句柄获取值 . 只能通过点的方式,可以一直点下去

    {%%}逻辑相关

    • if 条件:{% if %} ... {% elif %} .... {%else%} .... {%endif%}

    • for循环:{% for %}(支持字典,列表,items,keys,values)

      ​ .....

      ​ {{forloop}}

      ​ fist

      ​ last

      ​ counter

      ​ counter0

      ​ empty

      ​ {% ednfor %}

    • with 起别名: {% with .... as 名字%} {% endwith %}

    6. 过滤器和标签和自定义

    1. 在应用下创建一个templatetags文件夹,名字必须是这个名字

    2. 在文件夹中创建任意.py文件

    3. 在py文件中写入固定两行代码

      from django.template import Library
      register = Library() # register名字必须是这个
      
      # 自定义过滤器
      # 自定义过滤器
      @register.filter(name='my_add')
      def my_add(a, b):
          return a + b
      
      
      # 自定义标签
      @register.simple_tag(name='my_list')
      def my_list(a, b, c, d):
          return f'[{a},{b},{c},{d}]'
       区别 标签不能再if中使用
                  {% if 0|myplus:123 %}  可以用
                      <p>有值</p>
                  {% endif %}
      
      
                  {% if mysm 1 2 3 4 %}  不能用
                      <p>有值</p>
                  {% endif %}
      

    7模板的继承

    事先需要再模板中 通过block划定区域

    • 划定区域可以改变 {% block 区域名字%} ..... {% endblock %}

    • 引用html:{% extends '模板名字' %}

    • 在子模板中修改区域:{% block 父类划分区域的名字 %}

    • 一个页面上 block块越多 页面的扩展性越高,通常情况下 都应该有三片区域

      {% block css %}

      {% endblock %}

      {% block content %}

      {% endblock %}

      {% block js %}

      {% endblock %}
      子板中还可以通过:{{ block.super }} 来继续使用母版的内容

    8模板的导入

    当你写了一个特别好看的form表单 你想再多个页面上都使用这个form表单,你就可以将你写的form表单当作模块的形式导入 导入过来之后 就可以直接展示
    {% include 'good_page.html' %}

    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    屏幕截图 从安卓模拟器中识别出屏幕文字
    srcset
    Bitwise and Bit Shift Operators 位运算 取反 补码
    text recognizer (OCR) Engine 光学字符识别
    删除目录下 某类名字的文件
    appmaptile
    登录框
    将代码设置的剪切板内容通过输入法软件粘贴入app搜索框
    面向问题的高级语言
    使用心理视觉来进行图像处理
  • 原文地址:https://www.cnblogs.com/randysun/p/11746867.html
Copyright © 2020-2023  润新知