带有 login_required 装饰器的 Django 3.1 异步视图
Posted
技术标签:
【中文标题】带有 login_required 装饰器的 Django 3.1 异步视图【英文标题】:Django 3.1 async view with login_required decorator 【发布时间】:2020-12-01 00:18:10 【问题描述】:我尝试使用由 login_required 修饰的异步视图。 目前我在我的 urls.py 中装饰它
urls.py:
from . import views
from django.urls import path
from django.contrib.auth.decorators import login_required
urlpatterns = [
path('', login_required(views.my_view), name='my_view'),
]
views.py:
async def my_view(request):
return render(request, 'app/test.html', context=)
测试时我得到一个错误,这个视图将返回一个未等待的协程
等待渲染时,它告诉我不能等待 http 响应。
views.py:
@async_to_sync
async def my_view(request):
return render(request, 'app/test.html', context=)
似乎可以,但是, 在我的理解@async_to_sync 应该把它同步,但执行它异步?
编辑: 没有 login_required @async_to_sync 似乎不是必需的,它可以工作。
正确的做法是什么?
【问题讨论】:
【参考方案1】:您可能需要编写 login_required
装饰器的异步感知版本。
目前对你没有多大帮助,我敢打赌:如果你使用默认的身份验证后端,访问 request.user
将涉及数据库访问,这仍然是同步的。
【讨论】:
以上是关于带有 login_required 装饰器的 Django 3.1 异步视图的主要内容,如果未能解决你的问题,请参考以下文章
带有 AJAX 的 Django login_required 装饰器