Flask基础
python四大框架的比较
Django web框架:
优点:组件非常全,教科书式的框架
缺点:资源浪费,因为组件多,大,还是相互关联的,随便卸载组件,可能会导致出现一些小问题
Flask web框架:
优点:扩展性强,精简小,简单
缺点:稳定性较差,第三方组件新版本兼容性
Tornado web框架:
优点:异步io,非阻塞,原生WebSocket
缺点:全部手写,很麻烦
Sanic web框架:
优点:异步框架,结合了Torando和Flask的所有优点
缺点:复杂程度比较高,不太容易上手
Flask的三行启动
1 from flask import Flask
2
3 app = Flask(__name__)
4
5 app.run()
Flask的带路由和视图启动
1 from flask import Flask
2
3 app = Flask(__name__)
4
5 app.route("/")
6 def index():
7 return "hello,Flask"
8
9
10 app.run()
Flask的请求 request
request.args ---->> 接受的是url中的参数,获取到的是一个字典
request.form ---->> 接受的是formdata 获取到的是一个字典
request.files ----->> 接受的文件 接受到之后要记得保存(save(带名参数的地址))
request.data ----->> 存放的是请求体中的原始信息
request.json ---->>请求头中存在的Content-type:application/json 请求体中的数据存放在session中
Flask框架的返回值
return " hell" 返回的是一个字符串
return render_template("login.html) 返回的是一个模版
return redirect("/) 返回的是一个链接地址
return send_file("文件名字) 打开并且返回内容,自动识别文件类型,并且加入到Content-type:文件类型
return jsonify(一般是字典) 返回标准格式的json字符串
Flask Jinja2
{{}} 引用 执行 非逻辑代码
{%%} 逻辑代码,引用变量
Markup 安全字符串
@app.template_global() 全局函数
{% macro func() %}
{% endmacro %}
Flask Session
将session这个字典,通过secret_key 序列化 存放在浏览器中的cokies中
Flask的路由详情
methods = [] #列表中写的是请求方式
endpoint = 反向地址字符串 默认值试图函数名 获取的时候 url_for()
srrict_slashes 是否严格遵循路由地址结尾 "/"
defaults = {"nid":1} 默认值参数
redicret_to = "一个地址" #返回的状态码是301 永久重定向
Flask 实例化配置
template_forder = "存放模版文件的文件夹名" #指定模版存放默认路径 默认值:templates
static_forder = " " #指定静态文件存放的路径
static_url_path = " " #指定静态文件的访问路径
static_host = "" # 远程静态文件存放服务器
Flask 蓝图
什么是蓝图: Blueprint 一个不能够被run的Flask实例
创建一个蓝图:
|
|
from flask import Blueprint user = Blueprint("user",__name__,template_foeder="模版地址",url_prefix="访问地址的前缀") @user.route("/") def index(): pass
蓝图的注册:
import 蓝图的名字
app.register_blueprint(蓝图的名字)
Flask的特殊装饰器
重定义错误信息:
@app.errorhandler(404):
def error(a):
return "你要返回的页面或者...."
@app.before_request: #请求进入函数之前 进入此函数
def be1():
你要执行的操作
return
@app.after_request: #响应返回客户端之前 请求函数结束之后
def af1():
你要执行的操作
return
Flask的CBV
1 from flask import viesw
2
3 class Login(views.MethodView):
4
5 def get():
6 pass
7 def post():
8 pass
9
10
11 app.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login))