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()则不会加响应头。
from flask importsend_file @app.route("/file") def file(): return send_file("01.mp4")
自动识别文件类型,即在返回文件内容时加一个响应头Content-Type:文件类型。