2014-04-15 15 views
7

Was ist der richtige Weg, um ein benutzerdefiniertes Backend in settings.py zu importieren? Im Moment habe ich folgendes in settings.py:Django AUTHENTICATION_BACKENDS Importfehler

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

wo apployment_site die app ist, Auth ist Dateiname und CustomAuth ist der Klassenname.

Meiner Ansicht erhalte ich: ImportError: a doesn't look like a module path nachdem ich den folgenden Code ausführen:

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

Hier ist meine volle 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/' 

Antwort

15

stellen Sie sicher, es ist ein Tupel:

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

Notiz das Komma am Ende

+0

Das war richtig, danke! Ich musste auch "Apps" entfernen. Die richtige Zeile war AUTHENTICATION_BACKENDS = ('apployment_site.auth.CustomAuth',) –

+0

Ich habe das gleiche Problem, aber AUTHENTICATION_BACKENDS = ('apployment_site.auth.CustomAuth',) funktioniert nicht für mich. es heißt ImportError: Kein Modul namens apployment_site.auth –

+0

@Nitheesh, ist der Name Ihrer benutzerdefinierten App eigentlich 'apployment_site', oder ist es etwas anderes? Und enthält Ihr Python-Modul 'custom_app_name.auth.py' die 'CutomAuth'-Klasse? –

0

ich Ihnen Import tatsächlich brauchen nicht denken es in Ihre view. Laut the documentation wird Django alle Ihre Authentifizierungsbackends durchlaufen, wenn Sie authenticate() anrufen.

So stellen Sie sicher, dass Sie alle Authentifizierungs-Back-Ends in Ihrer haben.

+0

Richtig, aber Django scheint nicht die Art und Weise mag ich meine benutzerdefinierte Backend in settings.py verweisen. Weißt du, was die richtige Syntax dafür ist? Weder 'apps.apployment_site.auth.CustomAuth' noch apployment_site.auth.CustomAuth'work –

+0

Was ist Ihre Verzeichnisstruktur? Wo befindet sich Ihr CustomAuth? Warum haben Sie den 'from apployment_site import * 'in Ihrem Views Code? Ist das nicht der Fehler? – Alex

+0

Nein, das importiert nur meine Modelle. Der Fehler ist in meiner settings.py, wenn ich authentication_backend definiere. Derzeit ist auth eine Datei, die in meiner apployment_site App definiert ist, und die Hauptklasse heißt CustomAuth. Deshalb habe ich angenommen, dass AUTHENTICATION_BACKENDS = ('apps.apployment_site.auth.CustomAuth') der richtige Weg war, dies zu referenzieren. –