Jer*_*cer 6 python routing blogs packages flask
我刚刚开始使用烧瓶,我遇到了麻烦.我正在尝试写一个小博客来习惯这个框架,所以我制作了两个包,一个"auth"和"posts".我通读了Flask文档中的Large Applications部分.
我的目录看起来像这样.
>/root
>>run.py
>>/posts
>>>____init____.py
>>>views.py
>>>/templates
>>>/static
>>/auth
>>>____init____.py
>>>views.py
>>>/templates
>>>/static
Run Code Online (Sandbox Code Playgroud)
run.py看起来像这样:
from flask import Flask
from auth import auth_app
from posts import posts_app
auth_app.run()
posts_app.run()
Run Code Online (Sandbox Code Playgroud)
/posts/__init__.py
而/auth/__init__.py
像这样:
from flask import Flask
auth_app = Flask(__name__)
import auth.views
Run Code Online (Sandbox Code Playgroud)
和views.py看起来像这样:
from auth import auth_app
@auth_app.route('/auth/')
def index():
return "hello auth!"
Run Code Online (Sandbox Code Playgroud)
但每当我运行服务器时,只有localhost/auth /可用,而其他所有内容都提供了404,som我假设帖子应用程序没有运行.
有人可以帮忙吗?
您的auth_app.run()方法阻止您的程序继续运行.这就是posts_apps应用程序无法运行的原因.提供页面的整个过程发生在Flask的run()方法中.因此,您可以得出结论,您无法在同一进程中运行两个Flask应用程序.
如果您希望将应用程序拆分为两个,建议的方法是使用蓝图.您可以创建两个蓝图,而不是创建两个应用程序(身份验证和帖子).然后你创建一个这样的应用程序......
from flask import Flask
from auth import auth_blueprint
from posts import post_blueprint
app = Flask(__name__)
app.register_blueprint(auth_blueprint)
app.register_blueprint(post_blueprint)
app.run()
Run Code Online (Sandbox Code Playgroud)
尽管看上去Mark的使用蓝图的方法很适合您的项目,但是如果您想对每个软件包使用单独的应用程序,则应该研究werkzeug.wsgi.DispatcherMiddleware
。
在运行第一个应用程序后(如您的问题中所述),单个进程无法运行第二个应用程序,但这与DispatcherMiddleware无关。您可以使用它来定义主应用程序以及基于URL前缀的其他应用程序。
文档上的示例区分了两个应用程序(前端和后端),它们根据用户请求的URL运行。
如果您想了解更多信息,请阅读Matt Wright的“我如何构造Flask应用程序”,并查看他的示例项目Overholt。他决定使用两个应用程序:一个用于主网站(前端),另一个用于API,并且他根据URL前缀在两者之间进行区分。从他的代码*:
从werkzeug.serving导入run_simple 从werkzeug.wsgi导入DispatcherMiddleware 从Overholt Import api,前端 应用程序= DispatcherMiddleware(frontend.create_app(),{ '/ api':api.create_app() }) 如果__name__ ==“ __main__”: run_simple('0.0.0.0',5000,application,use_reloader = True,use_debugger = True)
这样,他创建了两个应用程序,其中每个应用程序都有其定义的一组视图,配置等,并且能够从同一Python解释器进程运行它们。
*请注意,run_simple()
仅用于开发而非生产。
归档时间: |
|
查看次数: |
2257 次 |
最近记录: |