Django频道的HTTP帮助程序
lesync的Python项目详细描述
lesync
用于django-channels
你好,世界
fromlesyncimportlogin_required@login_requiredasyncdefhello(request):return{'hello':request.user.username}
安装
pip install lesync
将ApiConsumer
添加到routing.py
:
fromdjango.urlsimportpathfromchannels.routingimportProtocolTypeRouter,URLRouterfromchannels.sessionsimportSessionMiddlewareStackfromlesyncimportApiConsumerapplication=ProtocolTypeRouter({# ... websockets or something'http':SessionMiddlewareStack(URLRouter([path('/async/<path:path>',ApiConsumer),# ... fallback to sync views]),),})
就这样。现在您可以添加异步视图,这些视图将在win/async/
url中提供服务
前缀。
请求
channels.http.AsgiRequest
的子类,具有:
json
属性async load_user()
方法-返回标准django用户user
属性-如果使用@login_required
或@staff_member_required
装饰器
响应
除了django.http.HttpResponse
您可以使用sugary json响应和流:
asyncdefstandard(request):returnHttpResponse('hello, world')asyncdefjson_data(request):return{'hello':'world'}asyncdefwith_status(request):return{'bad':'request'},400asyncdefwith_headers(request):return{},200,{'my':'header'}asyncdefstreaming(request):asyncdefstream():foriinrange(1,1000):yieldf'{i},{i**2}\n'awaitasyncio.sleep(.1)returnstream(),200,{'Content-Type':'text/csv'}
认证
熟悉的@login_required
和@staff_member_required
装饰器:
fromlesyncimportstaff_member_required@staff_member_requiredasyncdefhello(request):return{'admin':request.user.username}
请求验证
您可以使用@validate_query
和@validate_json
装饰符
以验证请求数据。他们正在使用trafaret
库来执行
验证,请确保已安装。
fromlesync.trafaretimportvalidate_json@validate_json({'ids':[int],'hello?':str})asyncdeffoo(request):returnrequest.json
测试
python -m venv .venv
source .venv/bin/activate
pip install -Ur requirements-dev.txt
python -m pytest tests/