Python social-auth-app-django 'social' 不是一个注册的命名空间



我正在使用Python(3.6(和Django(2.0(进行一个项目,在该项目中,我试图使用social-auth-app-django包集成社交登录。

管理users应用程序中的用户。

以下是我的配置:

从设置.py:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'phone_field',
'social_django',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'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_django.middleware.SocialAuthExceptionMiddleware',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR, 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'social_django.context_processors.backends',  # <- Here
'social_django.context_processors.login_redirect',
],
},
},
]
LOGIN_URL = 'users/login/'
AUTHENTICATION_BACKENDS = (
'social_core.backends.open_id.OpenIdAuth',  # for Google authentication
'social_core.backends.google.GoogleOpenId',  # for Google authentication
'social_core.backends.google.GoogleOAuth2',  # for Google authentication
'social_core.backends.linkedin.LinkedinOAuth2',  # for Github authentication
'social_core.backends.facebook.FacebookOAuth2',  # for Facebook authentication
'django.contrib.auth.backends.ModelBackend',
)

来自用户/urls.py:

app_name = 'users'
urlpatterns = [
path('signup/', views.SignUpView.as_view(), name='signup'),
path('login/', views.LoginView.as_view(), name='login'),
path('logout/', views.LogoutView.as_view(), name='logout'),
url(r'^activate/(?P<uidb64>[0-9A-Za-z_-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
views.activate, name='activate'),
url(r'^auth/', include('social_django.urls', namespace='social')),
]
SOCIAL_AUTH_URL_NAMESPACE = "users:social"

从login.html:

<div class="col-lg-12 center-aligned">
<div style="margin: auto">
<div class="or-seperator"><b>or</b></div>
<div class="social-btn text-center">
<a href="{% url 'social:begin' 'facebook-oauth2' %}" class="btn btn-primary btn-lg" title="Facebook"><i class="fa fa-facebook"></i></a>
<a href="{% url 'social_django.urls.url' %}" class="btn btn-info btn-lg" title="LinkedIn"><i class="fa fa-linkedin"></i></a>
<a href="{% url 'social:begin' 'google-oauth2' %}" class="btn btn-danger btn-lg" title="Google"><i class="fa fa-google"></i></a>
</div>
</div>
</div>

当我加载login模板时,它返回一个错误:

异常类型:NoReverseMatch

异常值:
'social'不是已注册的命名空间

根据文档

urlpatterns = patterns('',
...
url('', include('social_django.urls', namespace='social'))
...
)

更重要的是:

SOCIAL_AUTH_URL_NAMESPACE = 'social'

当你有时

SOCIAL_AUTH_URL_NAMESPACE = "users:social"

还要考虑SOCIAL_AUTH_URL_NAMESPACE必须写入settings.py,而不是urls.py

url(r'^auth/', include('social_django.urls', namespace='social')),

您应该在myproject_root/urls.py中导入,而不是在myapp/urls.py中导入

相关内容

最新更新