【问题标题】:How to get user in Django REST framework?如何在 Django REST 框架中获取用户?
【发布时间】:2018-09-17 11:02:44
【问题描述】:

我正在使用 Django REST 框架,并试图在我的基于类的视图之一中获得这样的用户:

class ListPDF(PDFTemplateView):
    """
    Return a PDF 
    """
    permission_classes = (IsAuthenticated,)
    template_name = 'pdf.html'

    def get_context_data(self, **kwargs):
        user = User.objects.get(id=self.request.user.id)

但由于某种原因,我不断收到错误User matching query does not exist。我正在使用rest_framework.authtoken 进行身份验证。

我进行了调查,当我不通过管理部分登录时,即使用户令牌随请求一起发送,用户也是匿名的。如何在此视图中获取用户对象?

**更新

我找到this answer

from rest_framework.authtoken.models import Token
user = Token.objects.get(key='token string').user

但是有没有更简单的方法来获取用户?

【问题讨论】:

  • 我们可以通过self.request.user访问登录用户。无需查询。

标签: python django django-rest-framework django-views django-class-based-views


【解决方案1】:

确保您已将 TokenAuthentication 添加到 DEFAULT_AUTHENTICATION_CLASSES:

# settings.py:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework.authtoken',
    ...
]

REST_FRAMEWORK = {
    ...
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    ...
}

文档:http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication


编辑:我注意到您正在继承 PDFTemplateView。你自己写的吗?它是从 DRF 的APIView 继承的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2018-05-15
    • 2013-05-27
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多