简单的说路由就是我们打在浏览器的url的一部分,是用来寻找处理过程用的标识,如我们在浏览器中访问http://blog.csdn.net/a540366413这个链接,服务器就会寻找到/a540366413这个路由对应的处理过程,然后返回处理结果。
在Flask中路由是用装饰器的方式来表示的。
@app.route('/login') def login(): pass在上面的例子中@app.route就是用来设置路由的,如果我们在浏览器中敲入http://ip:port/login服务端就会执行login函数,login返回的处理结果就会在浏览器中显示。 注意:在路由中有个有趣的规则,当我们设置路由为/login时,我们访问/login/会返回404,但是我们如果路由设置的是/login/时,我们访问/login会自动重定向到/login/。
这样设置的路由访问/和/index都会执行index函数
使用<name>或者<type:name> type是转换器,会帮你把值转成type类型 type包含: * string 字符串 默认类(不加type就是默认为string) * int 整数 * float 浮点数 * path 也是字符串类型不过可以包含斜杠/ * any 任意类型 * uuid uuid字符串
@app.route('/var/<var>') def getVar(var): return var @app.route('/var/<int:id>') def getId(id): return str(type(id))上述例子如果访问/var/aaa则会匹配getVar函数,如果访问/var/123则会匹配getId处理函数。
HTTP常见方法如下:
GET:获取信息,这是最常用的方法。 HEAD:获取消息头,不分发实际内容。在 Flask 中你完全无需 人工 干预,底层的 Werkzeug 库已经替你打点好了。 POST:在URL上传新信息。 PUT:类似 POST 但是服务器可能触发了存储过程多次,多次覆盖掉旧值。 DELETE:删除给定位置的信息。 OPTIONS:给客户端提供一个敏捷的途径来弄清这个 URL 支持哪些 HTTP 方法。 从 Flask 0.6 开始,实现了自动处理。
给路由设置访问方式:
使用methods参数设置,如@app.route('/login',methods=['GET','POST']) 这样/login路由就支持了GET和POST方法。
如果一个处理函数使用了多种访问方式该如何区分?
需要从flask库导入request对象,通过request.method == “GET|POST|….”方式来判断。
例如:
from flask import Flask,render_template,request #... @app.route('/upload', methods=['GET','POST']) def upload(): if request.method == 'POST':#判断当前是否是POST方式的访问 return request.files['upload'].stream.read()#返回文件内容 return render_template('upload.html')#渲染模板,以后介绍大家可能有疑问,request.method为什么就能知道是本次访问的方式,如果一次一百个人访问不会被覆盖吗?关于这个疑问,可以查看我的另一篇blog来获取答案《Python 多进程和多线程》http://blog.csdn.net/a540366413/article/details/58589598
使用flask中的url_for来构造url
from flask import url_for,Flask#导入flask和url_for app = Flask(__name__)#实例化flask @app.route('/index') #建立路由 def index(): #定义处理函数 pass with app.test_request_context(): #使用flask测试上下文,用于单元测试 print(url_for('index'))#url_for(路由对应处理函数名) 返回该路由url ''' 结果: /index '''