欢迎来到夜的世界

莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生.料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。
扩大
缩小

Flask简介

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

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

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

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

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

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

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

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

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

  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:文件类型。

 

 
 

posted on 2019-01-07 21:51  二十四桥_明月夜  阅读(337)  评论(0编辑  收藏  举报

导航