背景:
你一定见过,py文件class中,同一个地址,写了get,post, put,delete函数。有些好奇,内部是如何区分的。
首先,猜想是对的,同一个地址访问是,py可以根据请求方法不同,去寻找对应的函数,比如:Get请求调用get方法,Post请求调用post方法等。那么是如何实现的呢?
看代码
from flask import Flask
app = Flask(__name__)
class MyResource:def get(self):return "GET request"def post(self):return "POST request"
resource = MyResource()
app.add_url_rule('/resource', view_func=resource.get, methods=["GET"])
app.add_url_rule('/resource', view_func=resource.post, methods=["POST"])
if __name__ == '__main__':app.run()
你才想的没错,这里最重要的就是add_url_rule方法,是他完成了我们背景中的功能。详情可以点进去看一下。
注意,flask中提供了app.add_resource(AClass,“/getA”)方法,使用此方法后,我们可以在AClass同样使用get,post等函数。就是因为add_resource内部使用了add_url_rule方法。
若使用@app.route()装饰器,则可以使用以下写法,在同一函数中区分不同请求所执行的逻辑
@app.route('/login',methods = ['POST', 'GET'])def login():if request.method == 'POST':user = request.form['name']return redirect(url_for('success',name = user))else:user = request.args.get('name')return redirect(url_for('success',name = user))
如果@app.route()装饰器中没有定义methods属性时,默认只响应get请求