一、Python 现阶段三大主流Web框架 Django、Tornado、Flask 对比
Django 主要特点是大而全,集成了很多组件(例如Models、Admin、Form等等), 不管你用得到用不到,反正它全都有,属于全能型框架,通常用于大型Web应用,由于内置组件足够强大所以使用Django开发可以一气呵成,优点是大而全,缺点也就暴露出来了,这么多的资源一次性全部加载,肯定会造成一部分的资源浪费;
Tornado 主要特点是原生异步非阻塞,在IO密集型应用和多任务处理上占据绝对性的优势,属于专注型框架,通常用于API后端应用,游戏服务后台,其内部实现的异步非阻塞真是稳得一批,优点是异步,缺点是干净,连个Session都不支持;
Flask 主要特点小而轻,原生组件几乎为0,三方提供的组件(请参考Django)非常全面,属于短小精悍型框架,通常应用于小型应用和快速构建应用,其强大的三方库,足以支撑一个大型的Web应用,优点是精悍简单,缺点是稳定性较差,主要因为其组件都是第三方提供,要等第三方收到更新版本通知后才能更新,否则会出现一些兼容问题;
二、初识flask
1、安装flask
pip install flask
2、六行代码写出一个页面
# -*- coding: UTF-8 -*-
from flask import Flask # 导入Flask类
app = Flask(__name__) # 实例化Flask对象app
@app.route("/") # app中的route装饰器
def index(): # 视图函数
return "hello world"
app.run() # 启动Flask web服务
2、Flask中的Response"三剑客"
我们知道django中的Response有3种形式(HttpResponse、redirect、render),对比django,来看一下flask中有哪些返回形式。
1)返回HttpResponse对象
@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的异常:
3、flask中的"小儿子"
1)返回标准的json字符串
from flask import jsonify
@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:文件类型。**
4、Flask中的request(公共变量)
每个框架中都有处理请求的机制,但是每个框架的处理方式和机制是不同的,为了了解Flask的request中都有什么,我们先来写一个基于html+flask前后端交互的示例。
html页面代码如下:
<body>
<form action="/login"method="post">
用户名:<input type="text"name="username">