gpt4 book ai didi

python-3.x - 如何在 Django Async View 中访问用户?

转载 作者:行者123 更新时间:2023-12-04 15:03:31 27 4
gpt4 key购买 nike

我正在尝试访问用户,但在 View 为 async 时出现错误.
代码:

from django.http import JsonResponse


async def archive(request):
user = request.user
return JsonResponse({'msg': 'success'})

错误信息:
django.myproject.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
我试过的:
from django.http import JsonResponse
from asgiref.sync import sync_to_async


async def archive(request):
# user = sync_to_async(request.user)
# user = sync_to_async(request.user)()
# user = await sync_to_async(request.user)
user = await sync_to_async(request.user)()
return JsonResponse({'msg': 'success'})
仍然得到同样的错误。
我想访问用户以检查他/她是否有权存档文件。
编辑:
我最终发现我必须将它移动到一个临时方法中并以 sync_to_async 运行它。 .我在下面做了这个:
def _check_user(request):
user = request.user
''' Logic here '''
return

async def archive(request):
await sync_to_async(_check_user, thread_sensitive=True)(request=request)
''' Logic here '''

这似乎有效,但不确定这是否是正确的做法?

最佳答案

尝试这个:

from django.http import JsonResponse
from asgiref.sync import async_to_sync, sync_to_async

@sync_to_async
def archive(request):
user = request.user
return JsonResponse({'msg': 'success'})
我不知道它是否真的是异步的,我也在尝试解决这个问题。

我找到了一些东西: https://www.valentinog.com/blog/django-q/
如果第一个选项不起作用,请参阅此链接。

关于python-3.x - 如何在 Django Async View 中访问用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66562445/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com