gpt4 book ai didi

python - 在 Python Pyramid 路由配置中使用查询字符串

转载 作者:太空狗 更新时间:2023-10-29 22:11:51 26 4
gpt4 key购买 nike

这是非常具体的我正在尝试做的事情所以我开始描述它是什么:

  • 一个 Pyramid 应用程序,提供像 http://localhost:6543/path/to/myplot/plot001.png 这样的图
  • 如果该图不可用,则提供另一张图片 (work.png)
  • 另一部分是变形 View ,它提供了一个 HTML 表单来输入绘图的配置,例如:http://localhost:6543/path/to/myplot/plot001.png?action=edit .请注意此处的查询字符串“action=edit”。
  • 配置由数据文件、模板等组成。
  • 表单有保存(保存配置)和渲染按钮(http://localhost:6543/path/to/myplot/plot001.png?action=render)。将结果呈现为 png 文件,然后以静态方式使用。

我弄清楚了所有的部分,比如使用 Matplotlib 等进行渲染,但我是 Pyramid 和 Deform 的新手。我还有一个工作 View ,可以从文件中获取绘图。变形形式也可以。目前我不清楚如何最好地构造 ULR 以区分服务、编辑和渲染用例。我猜在 Pyramid talk 中这意味着如何配置 serve_view 和 edit_view 的路由。

__init__.py:
config.add_route('serve_route',
'/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png')
config.add_route('edit_route',
'/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png')
# can I use query strings like "?action=edit" here to distinguish the difference?


views.py:
@view_config(context=Root, route_name='serve_route')
def plot_view(context, request):
...
@view_config(context=Root, renderer='bunseki:templates/form.pt', route_name='edit_route')
def edit_view(request):
...

我在 Pyramid 手册中找不到如何在路由中设置参数的引用。我想指向一些文档或示例的指针就足够了,我可以自己弄清楚细节。谢谢!

最佳答案

有两种方法可以做到这一点,具体取决于您喜欢以何种方式分离代码。

  1. 将所有逻辑放入您的 View 中,用 request.GET.get('action') 上的“if”语句分隔。

    config.add_route('plot', '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png')
    config.scan()

    @view_config(route_name='plot')
    def plot_view(request):
    action = request.GET('action')
    if action == 'edit':
    # do something
    return render_to_response('bunseki:templates/form.pt', {}, request)

    # return the png
  2. 注册多个 View 并使用 Pyramid 的 View 查找机制在它们之间进行委托(delegate)。

    config.add_route('plot', '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png')
    config.scan()

    @view_config(route_name='plot')
    def plot_image_view(request):
    # return the plot image

    @view_config(route_name='plot', request_param='action=edit',
    renderer='bunseki:templates/form.pt')
    def edit_plot_view(request):
    # edit the plot
    return {}

    # etc..

希望这对您有所帮助。这是注册单个 url 模式并针对该 url 上的不同类型请求使用不同 View 的绝佳示例。

关于python - 在 Python Pyramid 路由配置中使用查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6896943/

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