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之路由的主要内容,如果未能解决你的问题,请参考以下文章

Flask从入门到精通之链接的使用

Flask之模板之宏继承包含

Flask从入门到精通之自定义错误界面

小白学flask之路由,反向路由,路由参数

flask之路由

Flask之路由系统