Pyramid框架:拆分视图类文件后REST服务报404问题求助
解决Pyramid视图移至单独文件后出现404的问题
嘿,我明白你遇到的麻烦了——把视图类挪到单独文件后,Pyramid压根没找到你的视图配置,所以才会返回404错误。咱们来一步步解决这个问题:
问题根源
Pyramid的config.scan()方法默认只会扫描当前运行的模块(也就是你的server.py),不会自动去识别其他文件里的@view_config或@view_defaults装饰器。你把RESTView移到test_view_defaults.py后,这些视图路由配置根本没被加载到应用里,自然访问时就找不到对应的处理逻辑了。
解决方案
有两种简单的办法可以搞定这个问题:
方法1:直接指定扫描目标模块
修改server.py里的config.scan(),明确告诉Pyramid要扫描test_view_defaults这个模块:
if __name__ == '__main__': with Configurator() as config: config.add_route('rest', '/rest') # 明确指定要扫描的模块 config.scan('test_view_defaults') app = config.make_wsgi_app() server = make_server('0.0.0.0', 6543, app) server.serve_forever()
方法2:用包结构组织代码(更适合长期维护)
如果你的项目以后会扩展,建议把代码整理成标准的Python包结构:
- 创建一个名为
myapp的文件夹,里面新建__init__.py(空文件即可)和views.py(把test_view_defaults.py里的代码移到这里) - 修改
server.py里的导入和扫描逻辑:
from wsgiref.simple_server import make_server from pyramid.config import Configurator from myapp.views import RESTView if __name__ == '__main__': with Configurator() as config: config.add_route('rest', '/rest') # 扫描整个myapp包 config.scan('myapp') app = config.make_wsgi_app() server = make_server('0.0.0.0', 6543, app) server.serve_forever()
额外检查点
确保test_view_defaults.py(或者myapp文件夹)和server.py在同一个目录下,这样Python才能正确导入模块,不会出现找不到文件的错误。
修改完成后重启服务,再访问http://localhost:6543/rest用GET方法,应该就能看到返回的get内容了,POST和DELETE请求也能正常响应啦。
内容的提问来源于stack exchange,提问作者Prince Francis
相关产品推荐
相关产品推荐

