2014-04-15 23 views
7

Jaki jest właściwy sposób importowania niestandardowego backendu w settings.py? Obecnie mam następujący w settings.py:Django AUTHENTICATION_BACKENDS Błąd importu

AUTHENTICATION_BACKENDS = ('apps.apployment_site.auth.CustomAuth') 

gdzie apployment_site jest to aplikacja, auth jest nazwa pliku, a CustomAuth jest nazwa klasy.

Moim zdaniem, otrzymuję: ImportError: a doesn't look like a module path po uruchomić następujący kod:

from django.contrib.auth import authenticate 
from apployment_site import * 
authenticate(username="username", password="password") 

Oto mój pełny settings.py:

"""Django settings for apployment project. 

For more information on this file, see 
https://docs.djangoproject.com/en/dev/topics/settings/ 

For the full list of settings and their values, see 
https://docs.djangoproject.com/en/dev/ref/settings/ 
""" 

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


# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = '3(a=jr=tfedkqzv3f=495%0$ygxjt332(=n0&h=e2bzh(i#r*j' 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True 

TEMPLATE_DEBUG = True 

ALLOWED_HOSTS = [] 


# Application definition 

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'apployment_site' 
) 

MIDDLEWARE_CLASSES = (
    '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', 
) 

AUTHENTICATION_BACKENDS = ('apps.apployment_site.auth.CustomAuth') 

ROOT_URLCONF = 'apployment.urls' 

WSGI_APPLICATION = 'apployment.wsgi.application' 


# Database 
# https://docs.djangoproject.com/en/dev/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 

# Internationalization 
# https://docs.djangoproject.com/en/dev/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 


# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/dev/howto/static-files/ 

STATIC_URL = '/static/' 

Odpowiedz

15

upewnić się, że krotka:

AUTHENTICATION_BACKENDS = ('apps.apployment_site.auth.CustomAuth',) 

uwaga przecinek na końcu

+0

To było poprawne, dzięki! Musiałem też usunąć "aplikacje". Poprawna linia to AUTHENTICATION_BACKENDS = ("appsite_site.auth.CustomAuth",) –

+0

Mam ten sam problem, ale AUTHENTICATION_BACKENDS = ("appsite_site.auth.CustomAuth",) nie działa dla mnie. jest napisane: ImportError: Brak modułu o nazwie apployment_site.auth –

+0

@Nitheesh, czy nazwa Twojej niestandardowej aplikacji to w rzeczywistości 'site_aplikacji', czy jest to coś innego? A czy Twój moduł pythona 'custom_app_name.auth.py' zawiera klasę 'CutomAuth'? –

0

Nie sądzę, trzeba rzeczywiście import do twojej view. Zgodnie z the documentation, Django przejdzie przez wszystkie twoje backendi uwierzytelniające, gdy zadzwonisz pod numer authenticate().

Tak więc, upewnij się, że masz wszystkie potrzebne uwierzytelnienia w swoim settings.py.

+0

Prawo, ale Django wydaje się nie podoba sposób, w jaki ja odsyłania mój własny backend w settings.py. Czy wiesz, jaka jest prawidłowa składnia? Ani "apps.apployment_site.auth.CustomAuth" ani apployment_site.auth.CustomAuth'work –

+0

Jaka jest twoja struktura katalogów? Gdzie znajduje się Twoja CustomAuth? Co więcej, dlaczego w kodzie widoków masz "from appsite_site import *"? Czy to nie jest ten błąd? – Alex

+0

Nie, to tylko importowanie moich modeli. Błąd występuje w moim pliku settings.py podczas definiowania parametru authentication_backend. Obecnie auth to plik zdefiniowany w mojej aplikacji appsite_site, a główna klasa nazywa się CustomAuth. Właśnie dlatego założyłem, że AUTHENTICATION_BACKENDS = ("apps.apployment_site.auth.CustomAuth") było właściwym sposobem odniesienia się do tego. –