webentwicklung-frage-antwort-db.com.de

Django Rest Framework - Fehlendes statisches Verzeichnis

Ich habe kürzlich einen Digital-Ocean-Server mit einem vorinstallierten Django-Image auf Ubuntu 14.04 gestartet. Ich wollte eine API erstellen und habe mich für das Django Rest Framework entschieden. Ich habe das Django Rest Framework genau nach http://www.Django-rest-framework.org/ installiert.

So sieht die Tutorial-Site aus, wenn ich auf meinem Server darauf zugreife.

enter image description here

Wie Sie sehen, sieht es nicht so aus wie die Website auf der Rest-Framework-Tutorial-Website. Dies liegt an der Tatsache, dass alle /static/rest_framework/*-Dateien beim Anzeigen des Quellcodes meiner Website einen 404-Fehler anzeigen.

Hier ist meine Datei "settings.py" im Django-Stammverzeichnis "Django_project".

"""
Django settings for Django_project project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/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/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '7Vnib8zBUEV3LfacGKi2rT185N36A8svyq8azJLvNpv7BxxzMK'

# 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',
    'rest_framework',
)

REST_FRAMEWORK = {
    # Use hyperlinked styles by default.
    # Only used if the `serializer_class` attribute is not set on a view.
    'DEFAULT_MODEL_SERIALIZER_CLASS':
        'rest_framework.serializers.HyperlinkedModelSerializer',

    # Use Django's standard `Django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

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',
)

ROOT_URLCONF = 'Django_project.urls'

WSGI_APPLICATION = 'Django_project.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.postgresql_psycopg2',
        'NAME': 'Django',
        'USER': 'Django',
        'PASSWORD': 'yj4SM6qcP0',
        'Host': 'localhost',
        'PORT': '',
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.6/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/1.6/howto/static-files/

STATIC_URL = '/static/'

Kann mir jemand helfen, diesen fehlenden/static/rest_framework/location-Fehler zu beheben? Wenn ich eine API für meine Anwendung haben möchte, möchte ich, dass diese gut aussieht.

Lassen Sie mich wissen, wenn Sie noch etwas brauchen, um Ihnen bei der Behebung dieses Problems zu helfen, und bedanken Sie sich im Voraus für Ihre Hilfe.

16
BigBerger

Ich habe die Lösung für mein Problem gefunden!

Nach langem Nachforschen habe ich die this stack-Überlauffrage erneut gelesen, die mir beim letzten Blick nicht weitergeholfen hat.

Meine neue settings.py in meinem Django_project-Ordner sieht jetzt so aus.

"""
Django settings for Django_project project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/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/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'DwGCDqtcqzzGO2XK87u7bVSEUqHogZRFl4UdhkcCudSHxLUVvx'

# 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',
    'rest_framework',
)

REST_FRAMEWORK = {
    # Use hyperlinked styles by default.
    # Only used if the `serializer_class` attribute is not set on a view.
    'DEFAULT_MODEL_SERIALIZER_CLASS':
        'rest_framework.serializers.HyperlinkedModelSerializer',

    # Use Django's standard `Django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

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',
)

ROOT_URLCONF = 'Django_project.urls'

WSGI_APPLICATION = 'Django_project.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.postgresql_psycopg2',
        'NAME': 'Django',
        'USER': 'Django',
        'PASSWORD': 'mpOQzpYFci',
        'Host': 'localhost',
        'PORT': '',
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.6/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/1.6/howto/static-files/

STATIC_ROOT = '/home/Django/django_project/Django_project/static'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Ich habe jetzt einen Ordner namens 'static' direkt neben meiner Datei settings.py in meinem Ordner Django_project mit allen erforderlichen Ressourcen wie 'rest_framework' und 'admin'. Ich habe gunicorn nach dieser Änderung neu gestartet und meine Webseite neu geladen und es hat funktioniert!

Dank derjenigen von Ihnen, die versucht haben zu helfen, haben Sie mich in die richtige Richtung geführt und dies wahrscheinlich viel schneller gemacht.

14
BigBerger

Zuerst müssen Sie in Django settings.py eine statische URL und ein statisches Stammverzeichnis festlegen

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static") 

Dann sammeln Sie alle statischen Dateien

python manage.py collectstatic
1
Rajiv Sharma

Ich war nicht in der Lage, eine der oben genannten Lösungen für unsere Webapp zu verwenden, entdeckte jedoch, dass Django rest_framework ziemlich nahtlos funktioniert, wenn die App eine Verbindung zu einem S3-Bucket herstellen kann, um auf statische Dateien zuzugreifen (siehe hier ). . Hier ist der relevante Code für unsere Einstellungen.py:

    aws = pcfenv.get_service(label='aws-s3') # or however you are accessing your s3 bucket & credentials

    if aws is not None:
        keys = aws.credentials
        AWS_ACCESS_KEY_ID = keys["access_key_id"]
        AWS_SECRET_ACCESS_KEY = keys["secret_access_key"]
        AWS_STORAGE_BUCKET_NAME = keys["bucket"]
        AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
        AWS_S3_OBJECT_PARAMETERS = {
            'CacheControl': 'max-age=86400',
        }
        AWS_LOCATION = 'static'
        STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
        STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
        DEFAULT_FILE_STORAGE = 'mysite.storage_backends.MediaStorage'

    # static files
    STATIC_URL = '/static/'
    STATIC_ROOT = 'static/'

    # local storage
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    MEDIA_URL = '/media/uploads/'

Sie müssen die Abhängigkeiten boto3 und Django-storages per Pip installieren, damit alles funktioniert.

0
k80oshea