如何使用不同的py文件来处理不同的路由?

Phi*_*hil 3 python flask python-2.7 webapp2

我一直在研究python很长一段时间,最近我决定开始学习Web开发方面的事情.我有PHP和PHP框架的经验,以及ruby,其中:

  • 路由在(单个)文件中定义,然后在该文件中,每个路由被分配给一个模型(py文件),该模型将唯一地处理与该路由匹配的传入请求.

如何使用flask AND webapp2实现此目的

我完整地阅读了文档和教程,但它让我非常困惑.我只想要一个文件,其中所有路由和它们应该如何处理都被设置,然后每个路由请求由它自己的模型(python文件)处理.

所有示例都会导致单个文件应用程序.

非常感谢你,真的.请以一种简单的方式亲切地教导.

Sea*_*ira 5

Webapp2实际上提供了开箱即用的功能 - WSGIApplication类实例Router在其router属性中提供了一个实例,可用于集中式URL maping ,如文档中所示.

Flask没有,但实际上这是在Flask模式中最基本的形式:Lazy Loading.使用LazyView它定义可以打造出一个系统,提供中央URL映射类-或者在每个模块预先定义的符号或特定功能的类的实例中的模块.

我实际上最近发布了一个包(HipPocket),它提供了包装器来简化这种模式的入门.它提供了两类用于此目的LateLoaderMapper.使用HipPocket,您的中央路由配置文件可能看起来像这样(这假设包布局类似于此处讨论的):

app.py

from flask import Flask

app = Flask("yourapp")
# ... snip ...
Run Code Online (Sandbox Code Playgroud)

urls.py

from .app import app
from hip_pocket import Mapper

mapper = Mapper(app)

mapper.add_url_rule("/", "index.index")
mapper.add_url_rule("/test", "index.test_endpoint", methods=["POST"])

mapper.add_url_rule("/say-hello/<name>",
                        "say_hello.greeter",
                        methods=["GET", "POST"])
Run Code Online (Sandbox Code Playgroud)

index.py

def index():
    return "Hello from yourapp.index.index!"

def test_endpoint():
    return "Got a post request at yourapp.index.test_endpoint"
Run Code Online (Sandbox Code Playgroud)

say_hello.py

def say_hello(name=None):
    name = name if name is not None else "World"
    return "Greetings {name}!".format(name=name)
Run Code Online (Sandbox Code Playgroud)

run_app.py

from yourapp.app import app
from yourapp.urls import mapper
# We need to import the mapper to cause the URLs to be mapped.

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

欢迎提出拉动请求发布报告!