SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.associate_by_email',
)
使用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)
#settings.py
MIDDLEWARE_CLASSES = (
'frontend.backends.MySocialAuthExceptionMiddleware'
)
根据上面的代码,我的问题是solved
。但是之前我使用以下代码处理了另一个功能,它与上述概念完全不同。
[代码2]:
def function(request):
#actual code here
return HttpResponse('msg here')
但是在运行上面的代码时,我收到了错误消息,如
此tuple index out of range
.. 中 实际上这不是上述代码的错误消息。此消息与“ [代码1] ”的代码有关。 然后,我如何获得“ [Code 2] ”的实际错误消息。MySocialAuthExceptionMiddleware
答案 0 :(得分:1)
你不需要经历所有这些头痛。 django中的异常并不特殊,它们是Python的一部分。
如果您想提出自定义异常 - 您可以在任何地方执行此操作:
class MyException(Exception):
pass
def function(request):
raise MyException('msg here')
您面临的问题是,在django中,即使请求与该中间件“无关”,也会在每个请求上调用中间件。
因此,在编写中间件时,您需要记住,它将针对每个请求进行调用,并且应该正确处理这些情况。