Flask简介

   一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比    

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

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

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

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

Tornado 一般用于API后端应用,游戏服务后台,其内部实现的异步非阻塞真是稳得一批flask

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

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

Tornado 优势是异步,缺点是干净,连个Session都不支持app

  Flask 优势是精悍简单,缺点是稳定性差(由于是使用大量的第三方库,因此当Flask更新的时候,库也要更新,可是库不是Flask公司的,因此会有不兼容的现象.)框架

 

   二 .  初识Flask      

   1 . 安装Flask    异步

 pip install Flask 

   2 . 六行代码写出一个页面    

  from flask import Flask       # 导入Flask类

  app = Flask(__name__)        # 实例化Flask对象app

  @app.route("/")              # app中的route装饰器
  def index():               # 视图函数
    return "hello world"

  app.run()             # 启动Flask web服务

  启动项目,控制台以下  : 

 

  使用浏览器访问上面的地址,效果以下图 : 

  

   至此,你已经实现了flask的第一个程序 ! 

   3 . Flask中的Response "三剑客"    

  咱们知道 Django中的response有3中形式 ( HttpResponse, redirect, render ), 对比Django,来看看Flask有哪些返回形式.

  1) . 返回 HttpRespomse 对象

  @app.route("/home")
  def home():
    return "hello world"           # 至关于django中return HttpResponse("")

  2) . 重定向 ( redirect )

  from flask import redirect          # 导入flask中的redirect

  @app.route("/home")
  def home():
    return redirect("/login")         # 重定向至"/login"路径

    当访问"/home"这个路径的时候,视图函数home会重定向到路径"/login" 并会触发"/login"对应的视图函数。

  3)返回模板页面(render_template)

  from flask import render_template        # 导入flask中的render_template


  @app.route("/home")
  def home():
    return render_template("home.html")        # 渲染模板home.html并返回

    Flask中的render_template至关于django中的render

    注意:若是要使用render_template 返回渲染的模板,请在项目的主目录中加入一个目录 templates,以下图:

               

    不然会遇到jinja2的异常:

       

    4 . flask的 "小儿子"   

  1) . 返回标准的json字符串 

  from flask importjsonify

  @app.route("/json")
  def jsons():
    d = {"name":"jinjiaodawangba"}
    return jsonify(d)

   返回json字符串,而且会在响应头中加Content-Type:application/json,即告诉浏览器数据是json字符串,浏览器收到后会自动进行反系列化,而使用json.dumps()则不会加响应头。

    2) . 打开文件并返回文件内容(自动识别文件格式)
  from flask importsend_file

  @app.route("/file")
  def file():
    return send_file("01.mp4")

    自动识别文件类型,即在返回文件内容时加一个响应头Content-Type:文件类型。