Flask 与 HTTP
1. HTTP请求
查询字符串
URL https://undefined.im/hello?name=Lily
中的?name=Lily
即为查询字符串(query string)
一个完整的请求:
浏览器发送请求(request),报文(message)在浏览器和服务器之间传输,服务器根据请求返回的数据为响应报文(response message)。
常见的HTTP方法:
方法 | 用途 |
---|---|
GET | 获取资源 |
POST | 发送数据 |
PUT | 传输文件 |
DELETE | 删除资源 |
HEAD | 获得报文头部 |
OPTIONS | 询问支持的方法 |
Flask中的请求对象request
获取请求URL中的查询字符串参数:
request.args.get('name','默认值')
print request.args
# {'name':value}
flask routes 命令
使用flask routes
命令可以查看所有路由
视图函数同时监听GET请求和POST请求:
@app.route('/api',methods=['GET','POST'])
def api():
...
转换器的使用:
转换器通过使用<转换器:变量名>(<int:age>)
把变量转换成为整数。
@app.route('/api/<int:age>')
def api():
...
any 转换器:
any转换器可以设置可选值。
@app.route('/api/<any(blog,page,media):data>')
def api(data):
...
# 另外一种方式
dataType = ['blog','page','media']
@app.route('/api/<any(%s):data>'%str(data)[1:-1])
def api(data):
...
请求钩子
Flask 默认实现的5种请求钩子
钩子类型 | 作用 |
---|---|
before_first_request | 注册一个在第一个请求之前触发的函数 |
before_request | 注册一个在每个请求之前触发的函数 |
after_request | 注册一个如果没有异常抛出,则在请求之后触发的函数 |
teardown_request | 注册一个在每个请求之后触发的函数,如果发生异常,异常对象将作为参数 |
after_this_request | 在视图函数内注册一个在这个请求结束后出发的函数 |
注册一个钩子的基本示例
@app.before_request
def doSomething():
pass
# 这个函数将在每个请求处理之前触发
2.HTTP 响应
视图函数可以返回最多由三个元素组成的元组:响应主体、状态码、首部字段。其中首部字段可以为字典,或是两元素元组组成的列表。
手工指定响应状态码
@app.route('/hello')
def hello():
...
return 'hello'
# 默认状态码为200
@app.route('/hello')
def hello():
...
return 'hello',201
# 指定状态码为201
重定向的方法
@app.route('/hello')
def hello():
...
return redirect('https://notekit.cn/',302)
# 重定向
@app.route('/hi')
def hi():
...
return redirect(url_for('hello'))
# 重定向到某个视图函数