当前位置: 首页 > 面试题库 >

使用Flask和非唯一处理程序名称构建URL

吕昀
2023-03-14
问题内容

Flask提供了url_for根据URL模式为处理程序生成URL的功能。但这意味着处理程序函数在整个应用程序中必须具有唯一的名称。那是对的吗?

模块A有一个处理程序index

@app.route('/')
def index(): pass

模块B还有另一个处理程序index

@app.route('/anotherindex')
def index(): pass

如何区分index在构建URL时调用的处理程序?

url_for('index')

问题答案:

我不知道如何处理同一模块路由的所有视图。

我通常要做的是将视图分开放在不同的模块中(就像您对moduleA和进行的操作一样B),然后将它们注册为蓝图,此后,在使用该url_for()函数时,可以在视图名称前加上蓝图名称,以避免冲突和潜在的冲突。问题。

这是一个例子:

main_views.py:

from flask import Blueprint
main = Blueprint('main', __name__)

@main.route('/')
def index():
    pass

admin_views.py:

from flask import Blueprint
admin = Blueprint('admin', __name__)

@admin.route('/admin')
def index():
    pass

application.py:

from flask import Flask
from main_views import main
from admin_views import admin

app = Flask('my_application')
app.register_blueprint(main)
app.register_blueprint(admin)

现在,要访问2个索引视图并仍然可以将另一个视图分开,只需使用url_for('main.index')url_for('admin.index')

编辑:

关于使用蓝图进行路由的一个有用的详细信息,在注册蓝图时,您可以传递一个url_prefix参数,该参数将应用于该蓝图中的每个视图。

例如,给出以下代码:

admin_views.py

from flask import Blueprint
admin = Blueprint('admin', __name__)

@admin.route('/')
def index():
    pass

@admin.route('/logout')
def logout():
    pass

application.py:

from flask import Flask
from admin_views import admin

app = Flask('my_application')
app.register_blueprint(admin, url_prefix='/admin')

2个视图将在URL/admin//admin/logout



 类似资料:
  • 问题内容: 我注意到,当我启动Netbeans时,它会显示在任务管理器中,因为我所有自己的Java应用程序都显示为或。 我该如何更改以使进程名称显示为? 问题答案: 进程名称是JVM的名称。因此,如果重命名jvm,则您将拥有另一个进程名称。有一些工具可以为您做到这一点。例如Launch4J

  • 我是Java和Gradle的新手,有一个非常新的问题。我有以下Java文件: 我能够使用javac编译上述文件,并使用命令“java TestMain”运行它。 我现在正在尝试使用gradle build框架做同样的事情。我执行了以下步骤:run"gradle init--type java-Library将上述文件复制到src/main/java/ 当我跑的时候”。/gradle build”,

  • 问题内容: 我试图在Go中启动一个HTTP服务器,该服务器将使用自己的处理程序来提供自己的数据,但与此同时,我想使用默认的http FileServer来提供文件。 我在使FileServer的处理程序在URL子目录中工作时遇到问题。 该代码不起作用: 我期望在localhost:1234 / files /中找到本地目录,但是它返回一个。 但是,如果我将文件服务器的处理程序地址更改为/,它将起作

  • 我想知道一个应用程序的包名,我只知道那个应用程序的应用程序名。假设我想知道一个电子邮件应用程序的包名,只是它的名字,然后如何得到它 我只知道应用程序名。 这是代码,以获得所有的应用程序的包名称,但我需要知道特定的应用程序。

  • 我有一个Java程序,我可以把它变成一个安装程序exe,使一个应用程序exe 我希望安装程序exe看起来像,而实际的应用程序看起来像jpackage,我看不到这样做的方法,也看不到其他人这样做的例子。目前,我的安装程序和我的应用程序具有相同的名称。 我不想要jpackage的替代品,我知道还有其他方法,我只是在寻找用jpackage做这件事的方法。

  • 我有一个注册表格,通过以下步骤: 填写用户信息(姓名,地址等)和用户名 如果用户按下提交按钮,则检查用户名是否已经在数据库中 如果用户名已经在使用,他必须重命名用户名,如果没有,则显示他输入的内容(名称,地址等)。 他必须确认网站规则和他输入的数据是正确的。如果他按下确认按钮,数据库中将插入一行他的详细信息和用户名。 我不想在步骤2之后将行插入数据库中。,因为我不希望数据库中没有确认规则的用户的行