不需要应用程序singleton的aiohttp@route decorator

aiohttp_route_decorator的Python项目详细描述


aiohttp_route_decorator

库为aiohttp.web提供了@routedecorator,类似于Flask@app.route的契约。

虚构的aiohttp@app.routedecorator是multiplereasonsdiscouraged;这一个试图解决这些问题的一部分(至少app不需要是全局的)。

安装

pip install aiohttp_route_decorator

用法

在每个处理程序模块中创建一个route对象,并装饰处理程序:

# myapp/handlers.pyfromaiohttp_route_decoratorimportRouteCollectorroute=RouteCollector()@route('/')asyncdefindex(request):returnweb.Response(body=b'OK')@route('/publish',method='POST')asyncdefpublish(request):returnweb.Response(body=b'OK')@route('/login',methods=['GET','POST'],name='login')asyncdeflogin(request):ifrequest.method=='POST':returnweb.Response(body=b'OK')returnweb.Response(body=b'Login')

初始化应用程序时,将收集的routes推入app.router

fromaiohttpimportwebfrommyappimporthandlersdefrun():app=web.Application()handlers.route.add_to_router(app.router)web.run_app(app)

非装饰性使用

如果您希望保持您的路线在一起,您可以在handers之后手动构建列表:

fromaiohttp_route_decoratorimportRouteCollector,Routeasyncdefindex(request):returnweb.Response(body=b'OK')asyncdefpublish(request):returnweb.Response(body=b'OK')asyncdeflogin(request):ifrequest.method=='POST':returnweb.Response(body=b'OK')returnweb.Response(body=b'Login')routes=RouteCollector([Route('/',index),Route('/publish',publish,method='POST'),Route('/login',login,methods=['GET','POST'],name='login'),])

前缀路由

您可以提供所有路由前面的公用路由前缀:

fromaiohttp_route_decoratorimportRouteCollectorroutes=RouteCollector(prefix='/app')@route('/')asyncdefindex(request):returnweb.Response(body=b'OK')@route('/publish',method='POST')asyncdefpublish(request):returnweb.Response(body=b'OK')...handlers.route.add_to_router(app.router)# /app/ -> index# /app/publish -> publish

您也可以在add_to_router()调用中提供前缀:

fromaiohttp_route_decoratorimportRouteCollectorroutes=RouteCollector()@route('/')asyncdefindex(request):returnweb.Response(body=b'OK')@route('/publish',method='POST')asyncdefpublish(request):returnweb.Response(body=b'OK')...handlers.route.add_to_router(app.router,prefix='/app')# /app/ -> index# /app/publish -> publish

…或同时使用:

fromaiohttp_route_decoratorimportRouteCollectorroutes=RouteCollector(prefix='/app')@route('/')asyncdefindex(request):returnweb.Response(body=b'OK')@route('/publish',method='POST')asyncdefpublish(request):returnweb.Response(body=b'OK')...handlers.route.add_to_router(app.router,prefix='/project')# /project/app/ -> index# /project/app/publish -> publish

RouteCollector的非装饰版本也可以接受前缀:

fromaiohttp_route_decoratorimportRouteCollector,Routeasyncdefindex(request):returnweb.Response(body=b'OK')asyncdefpublish(request):returnweb.Response(body=b'OK')routes=RouteCollector(prefix='/app',routes=[Route('/',index),Route('/publish',publish,method='POST'),])

参数参考

route(path, *, method='GET', methods=None, name=None, **kwargs)

  • pathstr)-路由路径。应该以斜线('/')开头。
  • 方法str)-路由的http方法。对于任何方法,都应该是'GET''POST''PUT''DELETE''PATCH''HEAD''OPTIONS''*'之一。
  • methodslist[str])-一次创建多个具有不同http方法的路由的可选快捷方式。如果使用,则应为method参数的可接受值列表。
  • namestr)-可选路由名。
  • kwargs-要传递给aiohttp.web.Resource.add_route()的其他参数。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
swing Java按钮/网格布局   java列出Google日历中的所有事件   java无效:单击API publisher test按钮后连接到后端时出错   带有内部赋值的java While循环导致checkstyle错误   java为什么trimToSize/ensureCapacity方法提供“公共”级访问?   文件输出流的java问题   ListIterator和并发修改异常的java问题   java如何使用两个URL映射   无法识别使用“./../”构造的字符串java相对路径,为什么?   首次写入remotelyclosedsocket不会触发异常,对吗?JAVA   java OneDrive REST API为文件上载提供了400个无效谓词   Java泛型、集合接口和对象类的问题   OpenSSL Java安全提供程序   jmeter java运行jmx禁用操作