【问题标题】:raise exception in django oauth toolkit在 django oauth 工具包中引发异常
【发布时间】:2019-01-27 11:21:53
【问题描述】:

我正在使用 Django 2.xdjango-oauth-toolkit 来生成访问令牌。

我编写了一个自定义令牌视图来对帐户运行一些检查,然后为用户生成访问令牌。如果自定义检查失败,我想用 400 状态码引发异常。

class CustomTokenView(TokenView):
    def create_token_response(self, request):
        login = request.POST.pop('username', None)

        username = get_user_model().objects.filter(
            email=login[0]
        ).last()

        if not username.verified:
            raise HttpResponse(content='User not verified', status=status.HTTP_400_BAD_REQUEST)

        request.POST._mutable = mutable

        return super(TokenView, self).create_token_response(request)

但这会产生错误

TypeError: exceptions must derive from BaseException

我也试过

from rest_framework.response import Response  
return Response('User not verified', status=status.HTTP_400_BAD_REQUEST)

但没有一个有效。

【问题讨论】:

    标签: django django-oauth


    【解决方案1】:

    您不能raise 回复。响应也不例外。相反,您可以返回它或从 django-rest-framework 引发一个实际异常(所有可用的异常都描述了here,选择最适合您情况的异常。在我看来,它应该是您的自定义异常,从 APIException 创建) .

    【讨论】:

    • 当我使用return 时,它会给出django.template.response.ContentNotRenderedError: The response content must be rendered before it can be iterated over.。似乎它在返回时从基类TokenView 调用该函数。我正在返回错误消息,而它需要带有用户名和密码参数的请求正文。
    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 2020-06-26
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2014-04-02
    • 2019-04-16
    相关资源
    最近更新 更多