zoukankan      html  css  js  c++  java
  • 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' %}

    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    js正则表达式中的问号使用技巧总结
    380. Insert Delete GetRandom O(1)
    34. Find First and Last Position of Element in Sorted Array
    162. Find Peak Element
    220. Contains Duplicate III
    269. Alien Dictionary
    18. 4Sum
    15. 3Sum
    224. Basic Calculator
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/randysun/p/11746867.html
Copyright © 2011-2022 走看看