• flask 路由和视图


    路由设置的俩种方式

    @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()
  • 相关阅读:
    [Codeup 25482]选美
    [Codeup 25481] swan
    暑假集训D12总结
    [技术]浅谈重载操作符
    2020年寒假第6次学*进度记录
    2020年寒假第5次学*进度记录
    2020年寒假第4次学*进度记录
    “家庭记账本”软件开发(1)
    阅读《梦断代码》随笔(1)
    2020年寒假第三次学*进度记录
  • 原文地址:https://www.cnblogs.com/erhao9767/p/10439258.html
Copyright © 2020-2023  润新知