flask之路由
Posted 博
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask之路由相关的知识,希望对你有一定的参考价值。
flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi
实例化Flask的对象,里面有参数
app = Flask(__name__,template_folder=‘templates‘,static_url_path=‘/xxxxxx‘)
1.添加路由的两种方式
程序第一次启动起来,是将url和视图一一对应起来
服务器启动,是将url和视图的关系找出来
在flask中添加路由有两种方式,根据装饰器的源码发现的,一般我们用第一种
路由方式一:
@app.route(‘/index‘,methods=[‘GET‘,‘POST‘])
def index():
return "Index"
路由方式二:
def order():
return ‘Order‘
app.add_url_rule(‘/order‘,view_func=order)
2.有关endpoint,相当于Django中起别名
from flask import Flask,render_template,redirect,url_for app = Flask(__name__) #实例化一个对象 ‘‘‘ 执行流程 1.执行[email protected](‘/index‘,methods=[‘GET‘,‘POST‘]) [email protected] 新 index = decorator(index) 本质是执行了 add_url_rule self.add_url_rule(rule, endpoint, f, **options) ‘‘‘ # 所以创建路由就有两种方式 # endpoint=‘n1‘ 相当于我们django中的路由中起的别名, @app.route(‘/index‘,methods=[‘GET‘,‘POST‘],endpoint=‘n1‘) #调用route方法,返回一个值 # 这里可以看route的源码,route返回一个函数 def index(): v1=url_for(‘n1‘) v2=url_for(‘n2‘) v3=url_for(‘n3‘) print(v1,v2,v3) return "index" @app.route(‘/login‘,methods=[‘GET‘,‘POST‘],endpoint=‘n2‘) def login(): return "login" @app.route(‘/logout‘,methods=[‘GET‘,‘POST‘],endpoint=‘n3‘) def logout(): return "logout" #这是第二种添加路由的方式,一般我们用第一种 def order(): return ‘Order‘ app.add_url_rule(‘/order‘,view_func=order) if __name__ == ‘__main__‘: app.run()
3.有关转换器
from flask import Flask from werkzeug.routing import BaseConverter app = Flask(__name__) class RegexConverter(BaseConverter): ‘‘‘ 自定义URL匹配正则表达式 ‘‘‘ def __init__(self,map,regex): super(RegexConverter,self).__init__(map) self.regex = regex def to_python(self, value): """ 路由匹配时,匹配成功后传递给视图函数中参数得值 :param value: :return: """ return int(value) def to_url(self, value): """ 使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数 :param value: :return: """ val = super(RegexConverter, self).to_url(value) #继承父类 return val app.url_map.converters[‘xxx‘] = RegexConverter @app.route(‘/index/<xxx("\d+"):nid>‘,methods=[‘GET‘,‘POST‘]) def index(nid): #这个参数的意思是index后面支持填写一个数字,这个数字会自动填写给nid这个参数 print(nid,type(nid)) return "index" if __name__ == ‘__main__‘: app.run()
4.由老功能的路径直接调到新功能 (redirect_to = ‘/index‘)
from flask import Flask app = Flask(__name__) @app.route(‘/index‘,methods=[‘GET‘,‘POST‘],redirect_to=‘/index‘) def index(): return "老功能" @app.route(‘/new‘,methods=[‘GET‘,‘POST‘]) def new(): return "新功能" if __name__ == ‘__main__‘: app.run()
5.装饰器作业
from flask import Flask,render_template,redirect import functools app = Flask(__name__) def wapper(func): @functools.wraps(func) def inner(*args,**kwargs): print(‘before‘) return func(*args,**kwargs) return inner @app.route(‘/xxx‘,methods=[‘GET‘,‘POST‘]) @wapper def index(): return "index" @app.route(‘/order‘,methods=[‘GET‘,‘POST‘]) @wapper def order(): return "order" if __name__ == ‘__main__‘: app.run()
以上是关于flask之路由的主要内容,如果未能解决你的问题,请参考以下文章