social-auth-app-django'social'不是注册的名称空间

时间:2018-11-30 19:31:43

标签: python django

Python(3.6.7)和Django(2.1),试图集成 social-auth-app-django

this post不同,我已经声明了SOCIAL_AUTH_URL_NAMESPACE,但是它不起作用。

配置:

settings.py:

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Application definition

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "Microlly",
    "social_django",
]

AUTHENTICATION_BACKENDS = [
    'social_core.backends.github.GithubOAuth2',
    'social_core.backends.google.GoogleOAuth2',
    'django.contrib.auth.backends.ModelBackend',
]

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"
]

ROOT_URLCONF = "microblogging.urls"

TEMPLATES = [
{
    "BACKEND": "django.template.backends.django.DjangoTemplates",
    "DIRS": [],
    "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",
            "social_django.context_processors.login_redirect",
        ]
    },
}
]

WSGI_APPLICATION = "microblogging.wsgi.application"

SOCIAL_AUTH_URL_NAMESPACE = 'social'
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY="SECRET"
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET="SECRET"

SOCIAL_AUTH__KEY="ID"
SOCIAL_AUTH__SECRET="SECRET"

# Password validation
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
{
    "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"
},
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]

STATIC_ROOT = os.path.join(BASE_DIR, "static")

LOGIN_REDIRECT_URL = "/accounts/"

EMAIL_BACKEND = (
"django.core.mail.backends.console.EmailBackend"
)  # During development only

urls.py:

from django.conf.urls import url
from django.contrib.auth import views as auth_views
from django.urls import include, path, reverse_lazy

from Microlly import views

app_name = "Microlly"


urlpatterns = [
path("", views.index, name="index"),
path("accounts/", include("django.contrib.auth.urls")),
url('^api/v1/', include("social_django.urls", namespace='social'))
]

login.html

<a href="{% url "social:begin" "google-oauth2" %}">Google+</a>

返回的错误是:

  

在/ accounts / login /
中的NoReverseMatch   “社交”不是注册的名称空间

因此,我如何注册该名称空间,还是其他地方存在问题?

1 个答案:

答案 0 :(得分:0)

与您认为导入 django应用很多在django中的订单相反,这可能是一个问题您的应用程序正在使用contrib.auth,但在实例化之前调用了它的某些部分。

INSTALLED_APPS = [
"Microlly",   <-------------move down
"social_django",   <--------------move down
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]

尝试在底部放那些自定义的,然后告诉我它是否仍然存在。

如您所见,在您发布的链接上,自定义应用称为最后一个,因此它们可以使用auth和admin

相关问题