【问题标题】:Define URL root with flask用烧瓶定义 URL 根
【发布时间】:2016-01-18 07:27:06
【问题描述】:

我有多个具有相同 URL 根的路由。 示例:

  • abc/def/上传
  • abc/def/list
  • abc/def/page/{page_id}

我可以将 abc/def 定义为 URL 根吗? (类似于在 Java 中使用 Spring 或 Apache CXF 可以完成的事情)

谢谢

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    flask-restful 中,可以在 api initialization 上为所有路由添加前缀:

    >>> app = Flask(__name__)
    >>> api = restful.Api(app, prefix='/abc/def')
    

    然后您可以忽略任何前缀连接您的资源:

    >>> api.add_resource(MyResource, '/upload')
    >>> ...
    

    【讨论】:

      【解决方案2】:

      您可以使用APPLICATION_ROOT 键进行应用配置。

      app.config['APPLICATION_ROOT'] = "/abc/def"
      

      来源 - Add a prefix to all Flask routes

      【讨论】:

      • 有蓝图的工作没有任何麻烦。上述解决方案需要 WSGI 应用程序的上下文。
      • 您可能应该添加一个对后代更有效的答案。
      • @Harshdeep 那么为什么不使用蓝图呢?
      【解决方案3】:

      我需要类似的所谓“上下文根”。我使用 WSGIScriptAlias 在 /etc/httpd/conf.d/ 下的 conf 文件中完成了它:

      myapp.conf

      <VirtualHost *:80>
          WSGIScriptAlias /myapp /home/<myid>/myapp/wsgi.py
      
          <Directory /home/<myid>/myapp>
              Order deny,allow
              Allow from all
          </Directory>
      
      </VirtualHost>
      

      所以现在我可以使用以下身份访问我的应用:http://localhost:5000/myapp

      查看指南 - http://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html

      【讨论】:

        【解决方案4】:

        只需使用来自FlaskBlueprint

        app = Flask(__name__)
        bp = Blueprint('', __name__, url_prefix="/abc/def")
        
        def upload():
            pass
        
        def list():
            pass
        
        bp.add_url_rule('/upload', 'upload', view_func=upload)
        bp.add_url_rule('/list', 'list', view_func=list)
        ...
        
        app.register_blueprint(bp)
        

        【讨论】:

          猜你喜欢
          • 2021-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-11
          • 2019-07-19
          • 1970-01-01
          • 2020-07-04
          • 1970-01-01
          相关资源
          最近更新 更多