django 在某处引发异常

Raj*_*mon 1 python django django-views python-social-auth

SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.associate_by_email',
)
Run Code Online (Sandbox Code Playgroud)

通过使用上面的代码settings.py我可以避免...

(1062, "Duplicate entry 'example@example.com' for key 'email'")错误信息。

但我在网上搜索,发现这个方便的代码可以放入exception所需的 html 页面中:

[代码1]: #backends.py

class MySocialAuthExceptionMiddleware(SocialAuthExceptionMiddleware):
    def process_exception(self, request, exception):
        msg = None
        if #no duplicate email:
            return HttpResponse("# catched exception")
        else:
            # processing msg here
            return render_to_response(# html, {msg}, context)
Run Code Online (Sandbox Code Playgroud)

# 设置.py

MIDDLEWARE_CLASSES = (
    'frontend.backends.MySocialAuthExceptionMiddleware'
)
Run Code Online (Sandbox Code Playgroud)

我的问题是solved基于上面的代码。但之前我使用以下代码使用了另一种功能,它与上述概念完全不同。

[代码2]:

def function(request):
    #actual code here
    return HttpResponse('msg here')
Run Code Online (Sandbox Code Playgroud)

但是在运行上面的代码时,我收到了类似的错误消息,

tuple index out of range在这个MySocialAuthExceptionMiddleware..

实际上,对于上述代码来说,这不是正确的错误消息。该消息与“ [Code 1] ”代码相关。

那么,我怎样才能获得“ [代码2] ”的实际错误消息。

Bur*_*lid 7

您不需要经历所有这些令人头痛的事情。异常在 django 中并不特殊,它们是 Python 的一部分。

如果您想引发自定义异常 - 无论您想在何处这样做:

class MyException(Exception):
    pass

def function(request):
    raise MyException('msg here')
Run Code Online (Sandbox Code Playgroud)

您面临的问题是,在 django 中,每个请求都会调用中间件,即使该请求与该中间件“不相关”。

因此,在编写中间件时,您需要记住,每个请求都会调用它,并且它应该正确处理这些情况。

  • 没有中间件“api”不是用于视图的,而是用于中间件的。您为什么不写一篇文章来描述您的问题,而不是寻求解决方案的帮助呢?这样,当他们不知道问题是什么时,就不会浪费时间帮助您找到解决方案。 (2认同)