金字塔网络框架中可能存在的奇怪错误

Posted

技术标签:

【中文标题】金字塔网络框架中可能存在的奇怪错误【英文标题】:possible weird bug in pyramid web framework 【发布时间】:2021-11-22 16:41:22 【问题描述】:

我正在关注链接中给出的金字塔网络框架教程步骤: https://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/cookiecutters.html

设置好后访问 http://localhost:6543/ 一切正常,路线名称中的项目名称“金字塔脚手架”正确显示。

然后我添加了第二个视图函数并将其添加到路线中。但随后家乡路线开始显示 404。 第二条路线有效,但第一条路线和视图停止工作并在浏览器中加载时给出 404。

我找不到问题所在。添加几个功能和路线后,我无法找到问题。 我认为这是提供的 cookiecutter 或金字塔框架本身的一些问题。 这在金字塔版本小于 2 的情况下从未发生过。还尝试添加不同的视图和路线。似乎只有一条路线有效,所有其他路线都返回 404 异常。

除了此处列出的文件之外,没有任何文件被删除或编辑。

有人可以帮我解决这个问题吗?

文件的原始内容

# File location 'views/default.py"

from pyramid.view import view_config


@view_config(route_name='home', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
    return 'project': 'Pyramid Scaffold'

# File location 'routes.py"


def includeme(config):
    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_route('home', '/')

更改后

# File location 'views/default.py"

from pyramid.view import view_config


@view_config(route_name='home', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
    return 'project': 'Pyramid Scaffold'


@view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
    return 'project': 'this works'

# File location 'routes.py"


def includeme(config):
    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_route('home', '/')
    config.add_route('second', '/second')

终端登录错误:

2021-10-01 02:41:29,880 INFO  [pyramid_debugtoolbar:287][waitress-0] Squashed pyramid.httpexceptions.HTTPNotFound at http://localhost:6543/
traceback url: http://localhost:6543/_debug_toolbar/313430323330373531313831343038/exception

访问回溯 URL 时,除了说没有任何有用的信息

env/lib/python3.8/site-packages/pyramid/router.py", line 169, in handle_request
raise HTTPNotFound(msg)

【问题讨论】:

【参考方案1】:

Bug 几乎总是在开发人员的代码中,很少出现在 Pyramid 等成熟的包中。

在你的例子中,你定义了两个同名的方法,用第二个覆盖第一个。因此删除了第一条路线home 的视图。

为了纠正这种情况,给第二个视图函数一个唯一的名字。

@view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_second_view(request):
    return 'project': 'this works'

【讨论】:

昨晚深夜,我的大脑并没有像我希望的那样运作。从 svelte js 前端代码切换后,在 python 中也犯了类似的错误。我现在好尴尬。我看到您是金字塔网络框架以及许多其他项目的核心贡献者。感谢您付出的努力。 “昨晚深夜,我的大脑并没有像我希望的那样运作。”我知道那种感觉;)

以上是关于金字塔网络框架中可能存在的奇怪错误的主要内容,如果未能解决你的问题,请参考以下文章

当存在多个网络接口时,可访问性框架在检测接口类型时无法正常工作

gnet框架

TensorFlow框架之CNN卷积神经网络详解

RxRetrofit 网络框架解析

RxRetrofit 网络框架解析

RxRetrofit 网络框架解析