如何正确导入我的auth类

时间:2018-01-25 21:25:02

标签: django django-rest-framework

我创建了自己的身份验证' AuthOnPostOnly,但我无法正确导入它。

注意:我创建了一个名为' api'的应用。还从这个例子中的所有目录中省略了 init .py,但它们都在那里。

settings.py

INSTALLED_APPS = [
    'pipeline.apps.PipelineConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # for testing
    'django_nose',
    # thirdparty app
    'bootstrap3',
    'crispy_forms',
    'bootstrap_pagination',
    'mobilereports',
    'rest_framework',
    'api'
]

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'api.permissions.AuthOnPostOnly',
    )
}

目录结构

/proj
  /api
    urls.py
    views.py
    serializers.py
    /permissions
      permissions.py
  /proj
    /settings.py
    /urls.py

错误:

Could not import 'api.permissions.AuthOnPostOnly' for API setting 'DEFAULT_PERMISSION_CLASSES'. AttributeError: module 'api.permissions' has no attribute 'AuthOnPostOnly'

2 个答案:

答案 0 :(得分:1)

除非您从权限的 init .py中导入它,否则您可能需要将AuthOnPostOnly类更深一层地嵌套:

...
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'api.permissions.permissions.AuthOnPostOnly',
    )
}

如果这没有帮助,请注意发布与powers.py位于同一级别的 init .py的内容,以及permissions.py本身的内容吗?

答案 1 :(得分:0)

您有多种选择:

  1. 将导入更改为:

    'api.permissions.permissions.AuthOnPostOnly'
    
  2. 删除permissions文件夹,并将permissions.py文件放在api文件夹中。

  3. 如果您想保留permissions文件夹和api.permissions.AuthOnPostOnly,请permissions/__init__.py执行:

    from api.permissions.permissions import AuthOnPostOnly