2020.4.28 MVC和MVP

发布于 2020-04-28  15 次阅读


1.复习内容

  • python和JavaScript的正则
    *

2.灵感代办

  • python应该刷题了
  • 整一整欧路词典

3.学习内容

  • Django的框架模式

    • MVC 设计模式

      • MVC 代表 Model-View-Controller(模型-视图-控制器) 模式。
      • 作用: 降低模块间的耦合度(解耦)
      • MVC代表的含义
        • M 模型层(Model), 主要用于对数据库层的封装
        • V 视图层(View), 用于向用户展示结果
        • C 控制(Controller ,用于处理请求、获取数据、返回结果(重要)
      • ![](G:\人工智能\Python-1904-08 数据分析\01 python笔记1904-08\08-Django\day02\day02_resource\images\mvc.png)
    • MTV 模式

      • MTV 代表 Model-Template-View(模型-模板-视图) 模式。这种模式用于应用程序的分层开发
      • MTV所代表的含义
        • M -- 模型层(Model) 负责与数据库交互
        • T -- 模板层(Template) 负责呈现内容到浏览器
        • V -- 视图层(View) 是核心,负责接收请求、获取数据、返回结果
      • ![](G:\人工智能\Python-1904-08 数据分析\01 python笔记1904-08\08-Django\day02\day02_resource\images\mtv.png)
    • 模板 Template

      • 1.什么是模板

        • html页面,加上指定的语法,就是模板
        • 在使用之前,需要django渲染,变成可以识别的html
      • 2.django 模板的配置

        • 在settings.py中的TEMPLATES变量
          • BACKEND : 指定模板的引擎
          1. DIRS : 指定保存模板的目录(需要动态计的路径)
          2. APP_DIRS : 是否要在应用中搜索模板本
          3. OPTIONS : 有关模板的选项
      • 3.模板的加载方式

        • 1.通过loader获取模板,
          • t = loader.get_template(“模板名”).render(字典参数)
          • 获取到模板,HttpResponse进行响应
        • 2.通过render直接返回
          1. render(reques,”模板名称”,字典参数)
          2. 要返回reques
        • 3.模板传参
          • 传递的值,必须是字典类型
          • 字典关键字必须都是双引号括起来
          • 在{% %}中的变量可以直接使用
          • {{num}} 接受传递过来的参数
        • 4.模板标签
          • if标签使用
            • 语法:
              • {% if 表达式 %}
              • {% elif 表达式 %}
              • {% else %}
              • {% endif %}
            • if 条件表达式里可以用的运算符 ==, !=, <, >, <=, >=, in, not in, is,is not, not、and、or
            • 在if标记中使用实际括号是无效的语法。 如果您需要它们指示优先级,则应使用嵌套的if标记。
          • for标签使用
            • 语法
              • {% for 变量 in 迭代对象%}
              • {% endfor %}
            • 内置变量:
              • forloop.counter 从1开始
              • forloop.counter0 从0开始
              • forloop.revcounter 循环结束的次数 从1开始
              • forloop.revcounter0 循环结束的次数 从0开始
              • forloop.first/last 第一次循环为真/最后一次循环为真
              • forloop.parentlopp 嵌套循环的
            • empty标签(for循环中使用)
              • 如果迭代对象中没有任何值,使用empty标签中的内容
          • cycle标签
            • 循环从cycle标签中取值,调用一次更换一次
            • 作用:比如处理隔行变色色
          • 注释和comment标签
            • 两者区别就是一个多行,一个单行
            • 语法:
              • 1.{# #} 单行注释
              • 2.{% comment %}{% endcomment %}多行注释(不能嵌套使用)
        • 5.过滤器
          • 作用:变量输出前对变量进行处理
          • 语法:{{变量|过滤器1:参数值1|过滤器2:参数值2 ...}}
          • 常用过滤器:
            • truncatechars 多余指定字符做截断
            • Lower/upper 转换大小写
        • escape 做转义字符
          ```
          < 转换为 &lt;
          > 转换为 &gt;
          '(单引号)转换为 &#39;
          "(双引号)转换为 &quot;
          & 转换为 &amp;
          
        • 文档地址: https://yiyibooks.cn/xx/Django_1.11.6/ref/templates/builtins.html
        4. 模板的继承
        • 作用:提高代码重用率,可以重写html内的标签,样式,js脚本,等等
        • 定义一个父模板
        • 定义子模板,继承父模板,重写block标签
        • //父模板共用的地方:
          {% block block_name %}
          定义模板块,此模板块可以被子模板重新定义的同名块覆盖
          {% endblock block_name %}
          
          子模板重写的标签
          {% extends '父模板名称' %}
          子模板继承的标签
          {% block block_name %}
          名称一样则是重写父模板
          {% endblock block_name %}

        • 模板继承时,服务器端的动态内容无法继承
    • url反向解析

      • 在urls.py中传递 name=“绑定名”,可以方便修改urls链接,html中自动修改
      • 语法:
        • url(regex, views, kwargs=None, name="别名")
      • 模板中的语法
        • 在模板中: {% url '别名' ‘参数值1’ ‘参数值2’ %}
  • JavaScript 继承模式

    • 传统形式

      • 原型:prototype
        • 原型要写在构造函数前
      • 原型链: __proto__
      • 指定原型,(指定的是一个对象)生成原型链
      • Father.prototype = new Grand();
      • 父构造函数指向祖构造函数生成的对象
    • 借用构造函数(建议使用)

      • 使用:
        • 自己的方法,需要借用别人的方法(人家已经写过的方法)时候使用
      • 就是用call和apply来借用别人的方法
      • 必要要new出来的对象
      • 缺点:
        • 只能借用一个方法,原型还是自己的
        • 没构造一个对象,都要的多执行一些方法
    • 共享原型(标准继承模式)

      • 将父构造Father函数原型赋值给子Son构造函数
      • 先继承后使用
      • 缺点:
        • 子构造函数加属性的时候,父也具有了属性
    • 圣杯模式

      • 还是共享原型的一套
      • 不同点就是把父构造函数的和子构造函数分离
      • 新建一个构造函数,这个构造函数的prototype继承父构造函数prototype,再把对象(new 构造函数)赋值给子构造函数的prototype
      • constructor需要改一下,改为自身
      • 添加一个属性,继承自谁(默认是中间构造函数)
      • //继承函数
        function inherit(Target, Origin) {
        
            function F() {
            }
        
            F.prototype = Origin.prototype;
            Target.prototype = new F();
            Target.prototype.constructor = Target;
            Target.prototype.superClass = Father;
        }

    • *

4.扩展延伸知识

  • python django中 url换为path

    • 不需要匹配url开头的/
    • 参数可以用尖括号\
    • 常用转化器
      • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
      • int,匹配正整数,包含0。
      • slug,匹配字母、数字以及横杠、下划线组成的字符串。
      • uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
      • path,匹配任何非空字符串,包含了路径分隔符
    • https://kinegratii.github.io/2017/09/25/django2-url-path/
  • django修改自动重载文件

    • 尽量不要使用,还是手动重启一下
  • JavaScript原型书写位置的区别

    • 一定要在new之前写原型赋值
    • 如果没有new之前写,那么原型是默认的
  • JavaScript对象想要继承

    • 直接更改 __proto__属性
  • CSS中inherit

    • 继承属性
  • JavaScript 闭包

    • 匿名函数也存储了外部的存储上下文 [[scope]]
    • 外部定义参数,匿名函数拿到上下文,只有匿名函数能访问这个参数
    • 属性私有化
  • JavaScript上下文

    • AO对象
    • GO对象
  • python locals() 用法

    • 返回一个变量字典,字典内容是函数内定义的局部变量
  • Django2.2 Debug报错GBK

  • Django 标签使用的一些注意事项

    • 1.标签书写之间要有空格 ,多个空格可以,没有空格报错
    • 2.标签就是一个字符串,可以卸载双引号中
    • 3.标签都是成对出现

5.知识内容个人梳理

5.知识内容个人梳理

6.今天都复习了之前的什么内容


Ares个人进阶之路