API для создания профиля пользователя - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь закодировать 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' 

И, наконец, я закодировал свои URL-адреса так:

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, которые позволят мне добавить UserProfile на основе модели UserSavedPreferences и изменить атрибут 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 голосов
/ 11 ноября 2019

похоже, что вы пропустили название модели в представлении

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...