Flask之request,response,Jinja2

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

1. Django主要特色是大而全, 集成了不少组件, 例如: models, admin, form等, 无论你用获得用不到, 反正它全都有, 属于全能型框架.前端

  Django一般用于大型Web应用因为内置组件足够强大因此使用Django开发能够一鼓作气.python

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

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

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

  Flask优势是精悍简单后端

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

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

  Tornado优势是异步, 缺点是干净, 连session都不支持.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 "复用代码名" %} # 调用语法
相关文章
相关标签/搜索