Django AUTHENTICATION_BACKENDS import error

2019-03-26 04:56发布

What is the proper way to import a custom backend in settings.py? I currently have the following in settings.py:

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

where apployment_site is the app, auth is file name, and CustomAuth is the class name.

In my view, I get: ImportError: a doesn't look like a module path after I run the following code:

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

Here's my full 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/'

2条回答
狗以群分
2楼-- · 2019-03-26 05:11

make sure it's a tuple:

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

note the comma at the end

查看更多
三岁会撩人
3楼-- · 2019-03-26 05:20

I don't think you need to actually import it into your view. According to the documentation, Django will go through all your authentication backends when you call authenticate().

Thus, just make sure you have all the authentication backends you want in your settings.py.

查看更多
登录 后发表回答