首页 > 技术文章 > flask 路由和视图

erhao9767 2019-03-03 12:11 原文

路由设置的俩种方式

@app.route('/xxx')
    def index():
        return 'index'

------------------------------------------
def index():
    return "index

app.add_url_rule('/xxx',None,index)

   注意事项:

    - 不要让endpoint重名

    - 如果重名函数也一样要相同

 

参数

rule,                            url规则
view_func,                   视图函数名称
endpoint=None,           名称, 用于反向生成url, 即: url_for('str')
methods=None,           允许的请求方式, 如: ["GET","POST"]
strict_slashes=None,    对url最后的/ 是否严格要求
redirect_to=None,        重定向

defaults=None,            默认值,使用defaults={'k':'v'}为函数提供参数
subdomain=None,        子域名访问

 

 CBV

 

import functools
form flask    import Flask,views
app = Flask(__name__)

def wrapper(func):

    @functools.wraps(func)
    def inner(*args,**kwargs):
        return func(*args,**kwargs)

    return inner


class UserView(view.MethodView):
    methods      = ['GET']
    decorators   =  [wrapper,]

    def get(self,*args,**kwargs):
        return    "get"   

 

 

 

 自定义正则

from flask import Flask,url_for

app = Flask(__name__)


# 步骤一: 定制类
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
    def __init__(self, map, regex):
        super(RegexConverter, self).__init__(map)
        self.regex = regex
        
    def to_python(self, value):
        """
        路由匹配时, 匹配成功后传递给视图函数中参数的值
        """
        return int(value)
        
    def to_url(self, value)
        """
        使用url_for反向生成URL时,传递的参数经过该方法处理,赶回的值用于生成URL中的参数
        """
        val = super(RegexConverter, slef).to_url(value)
        return val
        
#步骤二: 添加到转换器    
app.url_map.converters['reg'] = RegexConverter
"""
1. 用户发送请求
2. flask内部进正则匹配
3. 调用to_python(正则匹配的结果)方法
4. to_python方法的返回值会交给视图函数的参数
"""


#步骤三 :使用自定义正则
@app.route('/index/<reg("\d+"):nid>')
def index(nid):
    print(nid, type(nid))
    
    url_for('index',nid=988)
    
    return    "index"
    
if __name__ == '__main__':
    app.run()

 

推荐阅读