gpt4 book ai didi

python - 如何让不同的py文件来处理不同的路由?

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:41 26 4
gpt4 key购买 nike

我学习 Python 已经有一段时间了,最​​近我决定开始学习 Web 开发方面的知识。我有使用 PHP 和 PHP 框架以及 ruby​​ 的经验,其中:

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

如何使用 flaskwebapp2 实现这一点?

我完整地阅读了文档和教程,但它让我很困惑。我只想要一个文件,其中设置了所有路由及其处理方式,然后每个路由请求都由其自己的模型(python 文件)处理。

所有示例都指向单文件应用。

非常感谢,真的。请以简单的方式亲切地教导。

最佳答案

Webapp2 实际上开箱即用 - WSGIApplication 类实例在其 router 属性中提供了一个 Router 实例,可以是用于集中式 URL 映射 as shown in the documentation .

Flask 没有,但这实际上以最基本的形式记录在 Patterns for Flask: Lazy Loading 中.使用它定义的 LazyView 类,您可以构建一个系统来提供中央 URL 映射 - 无论是映射到每个模块中的预定义符号,还是映射到模块中的特定函数或类实例。

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

app.py

from flask import Flask

app = Flask("yourapp")
# ... snip ...

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"])

索引.py

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

def test_endpoint():
return "Got a post request at yourapp.index.test_endpoint"

say_hello.py

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

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()

Pull requestsissue reports欢迎!

关于python - 如何让不同的py文件来处理不同的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com