【问题标题】:django raise the exception somewheredjango 在某处引发异常
【发布时间】:2014-10-27 18:45:22
【问题描述】:
SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.associate_by_email',
)

通过在settings.py 中使用上述代码,我可以避免...

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

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

[代码 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)

#settings.py

MIDDLEWARE_CLASSES = (
    'frontend.backends.MySocialAuthExceptionMiddleware'
)

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

[代码 2]:

def function(request):
    #actual code here
    return HttpResponse('msg here')

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

tuple index out of range 在这个MySocialAuthExceptionMiddleware..

实际上这不是上述代码的正确错误信息。此信息与“[Code 1]”的代码有关。

那么,我怎样才能得到“[Code 2]”的实际错误信息。

【问题讨论】:

  • 因为那是引发异常的地方,但是您不能查看回溯以找到根本原因吗?
  • @Knyght 我编辑了我的问题更易于阅读......
  • @Knyght code 1 仅用于处理该特定异常。但是为什么code 2 错误消息会转到MySocialAuthExceptionMiddleware

标签: python django django-views python-social-auth


【解决方案1】:

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

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

class MyException(Exception):
    pass

def function(request):
    raise MyException('msg here')

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

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

【讨论】:

  • oh .. 它适用于每个请求,然后我会寻找另一种方法来实现。我应该在视图函数中使用middleware api 吗?
  • 没有中间件“api”不是用于视图,它用于中间件。与其寻求解决方案的帮助,不如写一篇描述您的问题的帖子?这样一来,当他们不知道问题出在哪里时,就不会浪费时间帮助您找出解决方案。
  • 在这种情况下,我没有其他选择。我会在工作时禁用它
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2014-10-14
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
相关资源
最近更新 更多