【问题标题】:Python Social Auth- import error when using Google AuthenticationPython Social Auth-使用谷歌身份验证时导入错误
【发布时间】:2014-12-22 23:56:29
【问题描述】:

一个多月前我成功关注了这篇博文:http://www.artandlogic.com/blog/2014/04/tutorial-adding-facebooktwittergoogle-authentication-to-a-django-application/

当我创建一个新环境并重新创建这些步骤时,我现在在模板渲染期间遇到了一个导入错误 no module named google_auth

追溯到这一行:

<a href="{% url 'social:begin' 'google-oauth2' %}?next={{ request.path }}">Login</a>

看起来 django 没有在社交应用中寻找正确的模板处理?关于为什么这不再起作用的任何想法?

#settings.py
INSTALLED_APPS = (... , 'social.apps.django_app.default', ...)

AUTHENTICATION_BACKENDS = ('social.backends.google.GoogleOAuth2', 'django.contrib.auth.backends.ModelBackend')

TEMPLATE_CONTEXT_PROCESSORS = ('django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect')

#urls.py
urlpatterns = patterns('', 
url('', include('social.apps.django_app.urls', namespace='social')),
url('', include('django.contrib.auth.urls', namespace='auth')),
url(r'^$', 'app.views.home', name='home'),
)

编辑:下面的完整追溯

Environment:
Request Method: GET

Django Version: 1.7
Python Version: 2.7.8
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'charts',
 'social.apps.django_app.default',
 'djcelery',
 'kombu.transport.django')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'social.apps.django_app.middleware.SocialAuthExceptionMiddleware',
 'charts.middleware.SocialAuthExceptionMiddleware')


Template error:
In template charts/templates/base.html, error at line 69
   No module named google_auth
   59 :           </ul>


   60 :         </li>


   61 :         <li>


   62 :           Hello, <strong>{{ user.get_full_name|default:user.username }}</strong>!


   63 :         </li>


   64 :         <li>


   65 :           <a href="{% url 'auth:logout' %}?next={{ request.path }}">Logout</a>


   66 :         </li>


   67 :         {% else %}


   68 :         <li>


   69 :           <a href=" {% url 'social:begin' 'google-oauth2' %} ?next={{ request.path }}">Login</a>


   70 :         </li>


   71 :         {% endif %}


   72 :       </ul>


   73 :     </nav>


   74 : </head>


   75 : <body>


   76 : {% block content %}


   77 : {% endblock %}


   78 : <div id="footer">


   79 :     <center>


Traceback:
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/charts/views.py" in home
  743.                              context_instance=context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/shortcuts.py" in render_to_response
  23.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  174.         return t.render(context_instance)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in render
  148.             return self._render(context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in _render
  142.         return self.nodelist.render(context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in render
  844.                 bit = self.render_node(node, context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/debug.py" in render_node
  80.             return node.render(context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  126.         return compiled_parent._render(context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in _render
  142.         return self.nodelist.render(context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in render
  844.                 bit = self.render_node(node, context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/debug.py" in render_node
  80.             return node.render(context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  312.                 return nodelist.render(context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/base.py" in render
  844.                 bit = self.render_node(node, context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/debug.py" in render_node
  80.             return node.render(context)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  444.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse
  517.                 app_list = resolver.app_dict[ns]
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in app_dict
  329.             self._populate()
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in _populate
  303.                 lookups.appendlist(pattern.callback, (bits, p_pattern, pattern.default_args))
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in callback
  231.         self._callback = get_callable(self._callback_str)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/utils/lru_cache.py" in wrapper
  101.                     result = user_function(*args, **kwds)
File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/urlresolvers.py" in get_callable
  101.                     not module_has_submodule(import_module(parentmod), submod)):
File "//anaconda/envs/analytics/lib/python2.7/importlib/__init__.py" in import_module
  37.     __import__(name)

Exception Type: ImportError at /
Exception Value: No module named google_auth

【问题讨论】:

  • 不应该是url 'social:begin'...
  • 你是对的。在我的实际 html 中,它实际上是 'social:begin'。固定问题。
  • 由于递归依赖项中的导入错误,可能会引发导入错误,这可能不会显示在 django runserver 日志中。进入 django shell,然后尝试导入应用程序。它会显示正确的错误。
  • 我可以使用 manage.py shell 并成功导入社交。不会产生任何错误。
  • 您有该导入错误的完整回溯吗? python-social-auth 中没有 google_auth 导入

标签: python django python-social-auth


【解决方案1】:

如果您可以选择,我建议改用 django-allauth。我同时使用了 django-allauth 和 Python Social Auth,个人觉得使用 django-allauth 更容易。所以如果有机会,不妨一试

【讨论】:

  • 不幸的是,这是我必须做的。 django-allauth 库一直运行良好。
【解决方案2】:

这是一个难题。

错误,堆栈跟踪的第一行给出了一个线索:“Traceback: .... Wrapped_callback ....” social.apps.django_app.views.auth 视图被调用并包裹在装饰器 psa 中。这最终会产生错误,但我认为django.core.handlers.base.get_response 隐藏了实际的异常源。我认为此时 reraise 会使堆栈跟踪不完整。

异常可能发生在from social.backends.utils.get_backend。但是很难远程调试。

你能把文件django.core.handlers.baseresponse = wrapped_callback(request, *callback_args, **callback_kwargs) 周围的try-catch 注释掉吗?加载页面时获得的新堆栈跟踪是什么?

【讨论】:

  • 这次我抛出了 valueerror。 Charts 是应用程序 Traceback 的名称:文件 "//anaconda/envs/analytics/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 131. % (callback.__module__, view_name )) 异常类型:ValueError at / 异常值:视图 charts.views.home 没有返回 HttpResponse 对象。它返回 None 。
  • 嗯,没有预期的那么有用。然而,我确实注意到我的主要嫌疑人psa 包装器“最近”有一个更新。该提交甚至显示为“重构后端/策略以避免循环依赖”。 src:github.com/omab/python-social-auth/blob/master/social/backends/… 该提交可能没有帮助,甚至在您的设置中引入了新的循环依赖问题。现在看来,这个提交是从 0.2.0 及更高版本开始使用的。所以让我建议降级你的包:pip install "python-social-auth&lt;0.2.0"。顺便说一句:你的 Django 和 python-social 版本是什么?
  • django 是1.7。我在此问题开始时降级为 python social auth 0.1.26 以查看该库最近是否存在问题,但没有成功。也许0.2.0 可能会更好。我会试试的
  • 我的建议是尝试使用低于0.2.0 的版本,否则会失败。如果可能的话,试试 Django 1.6。根据我的经验,许多软件包都落后于 Django 的变化(尽管我不希望 python-social-auth 成为其中之一)。如果这不起作用,我就没主意了。
  • 我降级到Django 1.6,现在又收到一个新错误。仍然是导入错误,但情况不同。 40. __import__(name) File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/contrib/contenttypes/admin.py" in 7. from django.contrib.contenttypes.fields import GenericForeignKey File "//anaconda/envs/analytics/lib/python2.7/site-packages/django/contrib/contenttypes/fields.py" in 13. from django.db.models.sql.datastructures import Col异常类型:ImportError at / 异常值:无法导入名称 Col
猜你喜欢
  • 2016-08-04
  • 2014-06-11
  • 2016-10-16
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2012-06-05
相关资源
最近更新 更多