Routes 如果我的处理程序位于不同的文件中,我的应用程序将提供404 not found
我正在尝试中间件,但没有找到中间件为请求编写的代码,即使请求是有效的。然后,我删除了中间件,并测试了请求是否正常工作。我不知道发生了什么变化,但这些文件正在运行。 如果我将views.py中的处理程序(即index_视图和subapp_视图)添加回main.py,代码就会正常工作 这是main.pyRoutes 如果我的处理程序位于不同的文件中,我的应用程序将提供404 not found,routes,python-3.6,python-decorators,aiohttp,Routes,Python 3.6,Python Decorators,Aiohttp,我正在尝试中间件,但没有找到中间件为请求编写的代码,即使请求是有效的。然后,我删除了中间件,并测试了请求是否正常工作。我不知道发生了什么变化,但这些文件正在运行。 如果我将views.py中的处理程序(即index_视图和subapp_视图)添加回main.py,代码就会正常工作 这是main.py from aiohttp import web import asyncio app_routes = web.RouteTableDef() subapp_routes = web.RouteT
from aiohttp import web
import asyncio
app_routes = web.RouteTableDef()
subapp_routes = web.RouteTableDef()
def init():
greet = web.Application()
greet.router.add_routes(subapp_routes)
app.router.add_routes(app_routes)
app.add_subapp('/greet/', greet)
web.run_app(app, host='127.0.0.1', port=8089)
async def shutdown(server, handler, app):
server.close()
await server.wait_closed()
app.client.close() # db connection closed
await app.shutdown()
await handler.finish_connections(10.0)
await app.cleanup()
loop = asyncio.get_event_loop()
app = web.Application(loop=loop)
serv_generator, handler, application = loop.run_until_complete(init())
serv = loop.run_until_complete(serv_generator)
try:
loop.run_forever()
except KeyboardInterrupt:
print(' Stop server begin')
finally:
loop.run_until_complete(shutdown(serv, handler, application))
loop.close()
print('Stop server end')
这是views.py
from aiohttp import web
from main import app_routes, subapp_routes
@app_routes.get('/')
async def index_view(request):
return web.Response(text='index\n')
@subapp_routes.get('/{name}')
async def subapp_view(request):
name = request.match_info.get('name', "Anonymous")
txt = "Hello {}\n".format(name)
return web.Response(text=txt)
我是否遗漏了任何进口声明?我没有收到任何编译器错误 通过反复试验解决了这个问题。不确定为什么会这样,但显然应该在使用装饰器路由的位置定义它们。下面是正确的代码 main.py
from aiohttp import web
from views import app_routes, subapp_routes
def init():
greet = web.Application()
greet.router.add_routes(subapp_routes)
app.router.add_routes(app_routes)
app.add_subapp('/greet/', greet)
web.run_app(app, host='127.0.0.1', port=8089)
async def shutdown(server, handler, app):
server.close()
await server.wait_closed()
app.client.close() # db connection closed
await app.shutdown()
await handler.finish_connections(10.0)
await app.cleanup()
loop = asyncio.get_event_loop()
app = web.Application(loop=loop)
serv_generator, handler, application = loop.run_until_complete(init())
serv = loop.run_until_complete(serv_generator)
try:
loop.run_forever()
except KeyboardInterrupt:
print(' Stop server begin')
finally:
loop.run_until_complete(shutdown(serv, handler, application))
loop.close()
print('Stop server end')
views.py
from aiohttp import web
app_routes = web.RouteTableDef()
subapp_routes = web.RouteTableDef()
@app_routes.get('/')
async def index_view(request):
return web.Response(text='index\n')
@subapp_routes.get('/{name}')
async def subapp_view(request):
name = request.match_info.get('name', "Anonymous")
txt = "Hello {}\n".format(name)
return web.Response(text=txt)
您没有收到任何错误,但路由没有正确注册 我没有看过aiohttp代码,但我假设装饰器修改了给定的路由集。在Python中,当源文件被解释器导入和解析时,会对其进行评估 您需要确保解释器通过导入视图“看到”了
views.py
文件。在您的示例中,该文件被忽略,因为没有可导入的内容。您必须手动执行此操作-实际上不需要对它的引用并不重要