用于创建用户个人资料的API

时间:2019-11-11 17:51:25

标签: python django-rest-framework

我尝试编写API i DRF的代码,这将允许我添加一些用户个人资料信息。因此,我创建了如下新模型:

models.py

from django.db import models
from django.contrib.auth.models import User

class UserSavedPreferences(models.Model): 
    employeeView = models.BooleanField(default=True)
    owner = models.OneToOneField(User, related_name="AppSavedProfile", on_delete=models.CASCADE, null=True)

现在,我为该模型准备了一个序列化器,如下所示:

serializers.py

from rest_framework import serializers
from django.contrib.auth.models import User
from accounts.models import UserSavedPreferences
from django.contrib.auth import authenticate

#UserSavedPreferences serializer

class UserSavedPreferencesSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
        model = UserSavedPreferences 
        fields = ( 
            'url',
            'pk',
            'employeeView'
        )

下面,我将我的代码与View相关:

view.py

from rest_framework import generics, permissions
from rest_framework.response import Response
from knox.models import AuthToken
from .serializers import UserSerializer, RegisterSerializer, LoginSerializer, ChangePasswordSerializer, UserSavedPreferencesSerializer
from accounts.models import UserSavedPreferences
from rest_framework import status
from django.contrib.auth.models import User
from . import serializers
from rest_framework.permissions import IsAuthenticated   

class UserSavedPreferencesList(generics.ListCreateAPIView): 
    permission_classes = [
        permissions.IsAuthenticated
    ]

    queryset = UserSavedPreferences.objects.all()
    serializer_class = UserSavedPreferencesSerializer 
    name = 'usersavedpreferences-list' 

class UserSavedPreferencesDetail(generics.RetrieveUpdateDestroyAPIView):
    permission_classes = [
        permissions.IsAuthenticated
    ] 

    queryset = UserSavedPreferences.objects.all()
    serializer_class = UserSavedPreferencesSerializer 
    name = 'usersavedpreferences-detail' 

最后,我将自己的网址编码如下:

urls.py

from django.urls import path, include
from .api import RegisterAPI, LoginAPI, UserAPI, ChangePasswordAPI, UserSavedPreferencesList, UserSavedPreferencesDetail
from knox import views as knox_views
from django.conf.urls import url

urlpatterns = [ 
  url(r'^auth/user-save-preferences/$', UserSavedPreferencesList.as_view()), 
  url(r'^auth/user-save-preferences/(?P<pk>[0-9]+)$', UserSavedPreferencesDetail.as_view())
]

我的目标是能够发送GET,POST,DELETE和PATCH请求,这将使我能够基于UserSavedPreferences模型添加UserProfile并更改UserSavedPreferences.EmployeeView属性。

但是当我发送带有以下正文的POST时:

{
    "employeeView": "True",
    "owner": 3
}

我收到这样的错误500:

ImproperlyConfigured at /auth/user-save-preferences/
Could not resolve URL for hyperlinked relationship using view name "usersavedpreferences-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.

Request Method: POST
Request URL: http://localhost:8000/auth/user-save-preferences/
Django Version: 2.2.6
Python Executable: C:\Users\User\.virtualenvs\backend-1XuBwiPA\Scripts\python.exe
Python Version: 3.7.4
Python Path: ['C:\\DevProj\\RadiolineExtranet2\\backend\\backend', 'C:\\Users\\User\\.virtualenvs\\backend-1XuBwiPA\\Scripts\\python37.zip', 'C:\\Users\\User\\.virtualenvs\\backend-1XuBwiPA\\DLLs', 'C:\\Users\\User\\.virtualenvs\\backend-1XuBwiPA\\lib', 'C:\\Users\\User\\.virtualenvs\\backend-1XuBwiPA\\Scripts', 'c:\\users\\user\\appdata\\local\\programs\\python\\python37-32\\Lib', 'c:\\users\\user\\appdata\\local\\programs\\python\\python37-32\\DLLs', 'C:\\Users\\User\\.virtualenvs\\backend-1XuBwiPA', 'C:\\Users\\User\\.virtualenvs\\backend-1XuBwiPA\\lib\\site-packages']
Server time: Mon, 11 Nov 2019 17:48:18 +0000
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'corsheaders',
 'extranet',
 'rest_framework',
 'knox',
 'accounts']
Installed 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',
 'corsheaders.middleware.CorsMiddleware',
 'django.middleware.common.CommonMiddleware',
 'corsheaders.middleware.CorsPostCsrfMiddleware']


Traceback:

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\relations.py" in to_representation
  393.             url = self.get_url(value, self.view_name, request, format)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\relations.py" in get_url
  331.         return self.reverse(view_name, kwargs=kwargs, request=request, format=format)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\reverse.py" in reverse
  47.         url = _reverse(viewname, args, kwargs, request, format, **extra)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\reverse.py" in _reverse
  60.     url = django_reverse(viewname, args=args, kwargs=kwargs, **extra)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\django\urls\base.py" in reverse
  90.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
  673.         raise NoReverseMatch(msg)

During handling of the above exception (Reverse for 'usersavedpreferences-detail' not found. 'usersavedpreferences-detail' is not a valid view function or pattern name.), another exception occurred:

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\django\core\handlers\base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\django\core\handlers\base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
  54.         return view_func(*args, **kwargs)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\django\views\generic\base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\views.py" in dispatch
  505.             response = self.handle_exception(exc)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\views.py" in handle_exception
  465.             self.raise_uncaught_exception(exc)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\views.py" in raise_uncaught_exception
  476.         raise exc

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\views.py" in dispatch
  502.             response = handler(request, *args, **kwargs)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\generics.py" in post
  242.         return self.create(request, *args, **kwargs)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\mixins.py" in create
  20.         headers = self.get_success_headers(serializer.data)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\serializers.py" in data
  559.         ret = super().data

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\serializers.py" in data
  261.                 self._data = self.to_representation(self.instance)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\serializers.py" in to_representation
  526.                 ret[field.field_name] = field.to_representation(attribute)

File "C:\Users\User\.virtualenvs\backend-1XuBwiPA\lib\site-packages\rest_framework\relations.py" in to_representation
  408.             raise ImproperlyConfigured(msg % self.view_name)

Exception Type: ImproperlyConfigured at /auth/user-save-preferences/
Exception Value: Could not resolve URL for hyperlinked relationship using view name "usersavedpreferences-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
Request information:
USER: kworoch

GET: No GET data

POST: No POST data

FILES: No FILES data

COOKIES:
csrftoken = 'PjjfXvS3heoe2kZHNfZI5U911z4UVKgQnwaezx39efJUnnWSZE19ZCFYWFUUPptc'

META:
ALLUSERSPROFILE = 'C:\\ProgramData'
APPDATA = 'C:\\Users\\User\\AppData\\Roaming'
COMMONPROGRAMFILES = 'C:\\Program Files (x86)\\Common Files'
COMMONPROGRAMFILES(X86) = 'C:\\Program Files (x86)\\Common Files'
COMMONPROGRAMW6432 = 'C:\\Program Files\\Common Files'
COMPUTERNAME = 'DESKTOP-6ULCLO1'
COMSPEC = 'C:\\Windows\\system32\\cmd.exe'
CONTENT_LENGTH = '40'
CONTENT_TYPE = 'application/json'
CSRF_COOKIE = 'PjjfXvS3heoe2kZHNfZI5U911z4UVKgQnwaezx39efJUnnWSZE19ZCFYWFUUPptc'
DJANGO_SETTINGS_MODULE = 'backend.settings'
DRIVERDATA = 'C:\\Windows\\System32\\Drivers\\DriverData'
FPS_BROWSER_APP_PROFILE_STRING = 'Internet Explorer'
FPS_BROWSER_USER_PROFILE_STRING = 'Default'
GATEWAY_INTERFACE = 'CGI/1.1'
HOMEDRIVE = 'C:'
HOMEPATH = '\\Users\\User'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_AUTHORIZATION = 'Token 78c0f25ca33467fd450f4446354d02803950b3739d8cc7d8f0035aab8a2ff941'
HTTP_CACHE_CONTROL = 'no-cache'
HTTP_CONNECTION = 'keep-alive'
HTTP_COOKIE = 'csrftoken=PjjfXvS3heoe2kZHNfZI5U911z4UVKgQnwaezx39efJUnnWSZE19ZCFYWFUUPptc'
HTTP_HOST = 'localhost:8000'
HTTP_POSTMAN_TOKEN = '0bd18d50-f548-42c3-9d92-df21fdb4d8c0'
HTTP_USER_AGENT = 'PostmanRuntime/7.19.0'
LOCALAPPDATA = 'C:\\Users\\User\\AppData\\Local'
LOGONSERVER = '\\\\DESKTOP-6ULCLO1'
NUMBER_OF_PROCESSORS = '4'
ONEDRIVE = 'C:\\Users\\User\\OneDrive'
ONEDRIVECONSUMER = 'C:\\Users\\User\\OneDrive'
OS = 'Windows_NT'
PATH = 'C:\\Users\\User\\.virtualenvs\\backend-1XuBwiPA\\Scripts;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\;C:\\Program Files\\nodejs\\;C:\\Program Files\\PuTTY\\;C:\\nauka\\;C:\\Program Files\\Git\\cmd;C:\\Program Files\\Git\\mingw64\\bin;C:\\Program Files\\Git\\usr\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\;C:\\Program Files (x86)\\Brackets\\command;C:\\Users\\User\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\User\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\User\\AppData\\Roaming\\npm;C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python37-32\\Scripts;'
PATHEXT = '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL'
PATH_INFO = '/auth/user-save-preferences/'
PIPENV_ACTIVE = '1'
PIP_DISABLE_PIP_VERSION_CHECK = '1'
PIP_PYTHON_PATH = 'c:\\users\\user\\appdata\\local\\programs\\python\\python37-32\\python.exe'
PROCESSOR_ARCHITECTURE = 'x86'
PROCESSOR_ARCHITEW6432 = 'AMD64'
PROCESSOR_IDENTIFIER = 'Intel64 Family 6 Model 69 Stepping 1, GenuineIntel'
PROCESSOR_LEVEL = '6'
PROCESSOR_REVISION = '4501'
PROGRAMDATA = 'C:\\ProgramData'
PROGRAMFILES = 'C:\\Program Files (x86)'
PROGRAMFILES(X86) = 'C:\\Program Files (x86)'
PROGRAMW6432 = 'C:\\Program Files'
PROMPT = '$P$G'
PSMODULEPATH = 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Users\\User\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files (x86)\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules'
PUBLIC = 'C:\\Users\\Public'
PYTHON3_SCRIPTS = 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python37-32\\Scripts'
PYTHONDONTWRITEBYTECODE = '1'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REMOTE_HOST = ''
REQUEST_METHOD = 'POST'
RUN_MAIN = 'true'
SCRIPT_NAME = ''
SERVER_NAME = 'DESKTOP-6ULCLO1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SOFTWARE = 'WSGIServer/0.2'
SESSIONNAME = 'Console'
SYSTEMDRIVE = 'C:'
SYSTEMROOT = 'C:\\Windows'
TEMP = 'C:\\Users\\User\\AppData\\Local\\Temp'
TMP = 'C:\\Users\\User\\AppData\\Local\\Temp'
USERDOMAIN = 'DESKTOP-6ULCLO1'
USERDOMAIN_ROAMINGPROFILE = 'DESKTOP-6ULCLO1'
USERNAME = 'User'
USERPROFILE = 'C:\\Users\\User'
VIRTUAL_ENV = 'C:\\Users\\User\\.virtualenvs\\backend-1XuBwiPA'
WINDIR = 'C:\\Windows'
wsgi.errors = <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>
wsgi.file_wrapper = ''
wsgi.input = <django.core.handlers.wsgi.LimitedStream object at 0x04CC80D0>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'

Settings:
Using settings module backend.settings
ABSOLUTE_URL_OVERRIDES = {}
ADMINS = []
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = 'C:\\DevProj\\RadiolineExtranet2\\backend\\backend'
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
CORS_ORIGIN_ALLOW_ALL = True
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'extranet2-dev', 'USER': 'mpapierz', 'PASSWORD': '********************', 'HOST': 'radioline-db-extranet.c5spnedddcev.eu-central-1.rds.amazonaws.com', 'PORT': '5432', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = True
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'webmaster@localhost'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'corsheaders', 'extranet', 'rest_framework', 'knox', 'accounts']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LOCALE_PATHS = []
LOGGING = {}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = '/accounts/profile/'
LOGIN_URL = '/accounts/login/'
LOGOUT_REDIRECT_URL = None
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
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', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'corsheaders.middleware.CorsPostCsrfMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
PREPEND_WWW = False
REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ('knox.auth.TokenAuthentication',)}
ROOT_URLCONF = 'backend.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root@localhost'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'backend.settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
STATICFILES_DIRS = []
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = 'C:\\DevProj\\RadiolineExtranet2\\backend\\backend\\static'
STATIC_URL = '/static/'
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']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'backend.wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'


You're seeing this error because you have DEBUG = True in your
Django settings file. Change that to False, and Django will
display a standard page generated by the handler for this status code.

你能告诉我在这里我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您似乎错过了视图中的模型名称

class UserSavedPreferencesList(generics.ListCreateAPIView): 
    permission_classes = [
        permissions.IsAuthenticated
    ]
    model = UserSavedPreferences
    queryset = UserSavedPreferences.objects.all()
    serializer_class = UserSavedPreferencesSerializer 
    name = 'usersavedpreferences-list' 

class UserSavedPreferencesDetail(generics.RetrieveUpdateDestroyAPIView):
    permission_classes = [
        permissions.IsAuthenticated
    ] 
    model = UserSavedPreferences
    queryset = UserSavedPreferences.objects.all()
    serializer_class = UserSavedPreferencesSerializer 
    name = 'usersavedpreferences-detail'

您需要在网址中添加名称

url(r'^auth/user-save-preferences/(?P<pk>[0-9]+)$', UserSavedPreferencesDetail.as_view(), name='usersavedpreferences-detail')