Python 如何为django应用程序设置图像上载根

Python 如何为django应用程序设置图像上载根,python,django,Python,Django,我无法设置上载图像的根文件夹。上载映像位于名为api的django应用程序中 视图在图像上返回此链接: 然而,当我在那个链接上,我得到了错误,因为图像不在那个里 我在settings.py中设置: STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework

我无法设置上载图像的根文件夹。上载映像位于名为api的django应用程序中

视图在图像上返回此链接:

然而,当我在那个链接上,我得到了错误,因为图像不在那个里

我在settings.py中设置:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAdminUser',
    ],
    'PAGE_SIZE': 1
}

MEDIA_ROOT = os.path.join(BASE_DIR,STATIC_ROOT,'media')
MEDIA_URL = '/media/'
我在api/models.py中编写了以下代码:

from django.db import models
import uuid

def scramble_uploaded_filename(instance, filename):
    extension = filename.split(".")[-1]
    return "{}.{}".format(uuid.uuid4(), extension)

def filename(instance, filename):
    return filename

# Create your models here.
class UploadImage(models.Model):
    image = models.ImageField("Uploaded image",upload_to=scramble_uploaded_filename)
    captcha_type = models.IntegerField("Image type")
views.py

from rest_framework import viewsets
from api.models import UploadImage
from api.serializers import UploadedImageSerializer
from rest_framework import authentication, permissions
from rest_framework.parsers import MultiPartParser,FormParser
import MySQLdb

class FileUploadViewSet(viewsets.ModelViewSet):
    #create queryset view
    permission_classes = (permissions.IsAuthenticated,)
    queryset = UploadImage.objects.filter(id=1,user='auth.User')
    serializer_class = UploadedImageSerializer
    parser_classes = (MultiPartParser, FormParser,)
序列化程序.py

from rest_framework import serializers
from api.models import UploadImage # Import our UploadedImage model

class UploadedImageSerializer(serializers.ModelSerializer):
    # current_user = serializers.HiddenField(default=serializers.CurrentUserDefault())
    class Meta:
        model = UploadImage
        fields = ('id', 'image','captcha_type','created','user','result') #

有什么想法吗?

根据您在OP下面的评论,假设您正在尝试将其部署到远程服务器:

首先要检查的是,您上传的图像实际上存在于路径[project root]/media/4a273bdf-564d-4dec-b657-43db27f04042.jpeg中

第二件需要检查的事情是,Nginx或Apache或[insert web server]是否正确地将请求路由到媒体目录,并将其发送到服务器上的正确位置

编辑1

这是Nginx配置文件的示例位置块,用于将请求从url www.example.com/media/filename_of_image.jpeg路由到/absolute/path/to/media/:


这应该放在服务器块中,在定义路径/

的位置块之前,根据OP下面的注释假设您正试图将其部署到远程服务器:

首先要检查的是,您上传的图像实际上存在于路径[project root]/media/4a273bdf-564d-4dec-b657-43db27f04042.jpeg中

第二件需要检查的事情是,Nginx或Apache或[insert web server]是否正确地将请求路由到媒体目录,并将其发送到服务器上的正确位置

编辑1

这是Nginx配置文件的示例位置块,用于将请求从url www.example.com/media/filename_of_image.jpeg路由到/absolute/path/to/media/:


这应该放在一个服务器块中,在定义路径的位置块之前/

Hi m8您所要做的就是编辑url.py添加这行,它应该可以工作

from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
   url(r'^admin/', admin.site.urls),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

嗨,m8你所要做的就是编辑URL.py添加这行,它应该会工作

from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
   url(r'^admin/', admin.site.urls),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

发布视图如何渲染图像和html没有html我使用的是rest\u框架。。我添加了模型、视图和序列化器,所以你发布的链接会显示什么?它会显示上传的图像。。url是图像上传的地方,但它不是。那么,你有什么可以在该url上为图像提供服务的呢?发布视图你是如何呈现图像和html的?没有html我正在使用rest\u框架。。我添加了模型、视图和序列化器,所以你发布的链接会显示什么?它会显示上传的图像。。url是图像上传的地方,但事实并非如此。你们有什么可以在那个url上提供图像?我使用的是Nginx。让我检查一下,我会给你们回复的。好的,所以路径在项目根目录中。。。文件夹介质与manage.py位于同一位置。jpeg在那里。所以,唯一要做的就是正确设置将请求路由到我的媒体目录。你知道怎么做吗?我在用Nginx。让我检查一下,我会给你们回复的。好的,所以路径在项目根目录中。。。文件夹介质与manage.py位于同一位置。jpeg在那里。所以,唯一要做的就是正确设置将请求路由到我的媒体目录。你知道怎么做吗?