zoukankan      html  css  js  c++  java
  • Flask之request,response,Jinja2

    python现阶段三大主流Web框架: Django, Flask, Tornado对比.

    1. Django主要特点是大而全, 集成了很多组件, 例如: models, admin, form等, 不管你用得到用不到, 反正它全都有, 属于全能型框架.

      Django通常用于大型Web应用由于内置组件足够强大所以使用Django开发可以一气呵成.

      Django优点是大而全, 缺点也就暴露出来, 这么多的资源一次性全部加载, 肯定会造成一部分的资源浪费.

    2. Flask主要特点是小而轻, 原生组件几乎为0, 三方提供的组件参考Django, 非常全面, 属于短小精悍型框架.

      Flask通常用于小型应用和快速构建应用, 其强大的三方库, 足以支撑一个大型的Web应用.

      Flask优点是精悍简单

    3. Tornado主要特点是原生异步非阻塞, 在IO密集型应用和多处理任务上占据绝对的优势, 属于专注性框架.

      Tornado通常应用于API后端应用, 游戏服务后台, 其内部实现的异步非阻塞很稳定.

      Tornado优点是异步, 缺点是干净, 连session都不支持.


    函数初始化

    所有Flask程序都必须要创建一个程序实例. Web服务器使用WSGI协议吧不接受自客户端的所有请求转交给这个对象处理. 程序实例是Flask类的对象, 经常使用以下方法创建 :

    from flask import Flask
    app = Flask(__name__)

    Flask类的构造函数只有一个必须指定的参数, 即程序主模块或者包的名字. 在大多数程序中, python的__name__变量就是所需的值.

     Flask使用__name__参数决定程序的根目录, 以便以后可以方便的找到相对于程序根目录的资源文件的位置.

    Response返回对象 :

      HttpResponse : 直接返回字符串

      Redirect : 重定向

      render_template : HTML模板渲染, 返回html页面

        ○ 使用render_template返回渲染页面, 需要在项目中加入一个目录templates(源码默认设置), 并且右键templates目录 -> mark directory as 选择 Jinja2 模板语言.

      send_file("文件路径") : 返回文件(图片, 音频, 视频)

      jsonify("{id:1}") : 返回json格式的字符串(在响应头内加入了Content-Type:application/json)

    Request请求 :

      每个框架中都有处理请求的机制(request), 但是每个框架的处理方式和机制都是不同的

      在flask中导入request模块.

    request.method    # 请求方式
    request.form    # ImmutableMultiDict([])以看起来像字典的形式存储所有FormData的数据(支持字典的存取方法)
    request.form.to_dict()    # 将ImmutableMultiDict数据格式转换为字典格式
    request.args    # 存储url上所有的参数数据
    request.json    # 如果在请求中写入了"application/json", 使用request.json则返回json解析数据, 否则返回None
    request.data    # request是基于mimetype进行处理的, 如果content-type无法被解析时(即不属于mimetype类型), 存放无法处理的原始数据
    request.url    # 当前url的路径的全部路径
    request.path    # url的路由的地址
    request.host    # 主机地址
    request.host_url    # 将主机地址转换为httpurl
    request.files        #  接收存放在FormData中文件类型的数据
    
    -----------------------------------------------------------------------------------------
    request.args和request.form区别 :
        request.args    是获取url中的参数
        request.form    是获取form表单中的参数
    而request.values是获取url + form内的所有参数(不建议使用, 当url和form中的参数名相同时, url的参数值会取代form参数值, 字典内不能有相同的key)

    Jinja2模板语言 :

      flask内的模板语言和django中用法基本相同, 不过flask在前端去数据时支持字典的取法

    # 1. Jinja2模板语言中的for
    {% for i in j %}
    
    {% endfor %}
    # 2. Jinja2模板语言的if {% if i %} {% elif j %} {% else %} {% endif %}
    # 3. Jinja2模板语言的safe 当后端想给前端传递一个标签数据时, 前端直接显示会出现传递的代码数据, 而前端的解决办法是使用过滤方法" |safe ". 而后端的解决办法是 : 使用flask的Markup模块(markup(标签变量)), Markup帮助咱们在HTML的标签上做了一层封装,让Jinja2模板语言知道这是一个安全的HTML标签 两种方法得到的结果相同.
    # 4. Jinja2中执行python函数 想在Jinja2中执行函数, 可以在后端定义一个函数, 并且将函数名复制给一个变量传递给前端, 前端传入参数执行. 也可以使用flask的全局函数, 不需要后端将函数复制变量传递给前端, 前端可以直接执行的函数. 定义全局函数需要后端使用@app.template_global()和@app.tempkate_filter()进行装饰 不过@app.tempkate_filter()的调用方法比较特别: {{ 参数1 | 定义的全局函数名(参数2, 参数3) }}
    # 5. Jinja2的继承和include Jinja2的模板语言的继承include和和django内的使用方法相似 {% block xx %} # 在母版内定义继承块 {% endblock %} {% extends "母版名" %} # 在子模版内首行写继承语法 {% block xx %} {% endblock %} 当某一段代码重复使用概率非常高时, 可以将其单独写入一个页面, 使用include进行调用: {% include "复用代码名" %} # 调用语法
  • 相关阅读:
    docker入门——centos安装
    NET应用——你的数据安全有必要升级
    mysql事件机制——定时任务
    是时候升级你的Js工具了-分页【基于JQ】
    优美库图片系统
    爬虫之蜂鸟网图片爬取
    壁纸提取
    CSDN刷阅读数
    tkinter基础-输入框、文本框
    数据结构与算法之选择排序
  • 原文地址:https://www.cnblogs.com/dong-/p/10124271.html
Copyright © 2011-2022 走看看