如何为django应用程序设置图像上传根目录

时间:2017-07-10 15:36:55

标签: python django

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

该视图在图片上返回此链接: http://www.example.com/media/4a273bdf-564d-4dec-b657-43db27f04042.jpeg

然而,当我继续该链接时,我收到错误,因为图像不在那里。

我在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,)

serializers.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') #

任何想法?

2 个答案:

答案 0 :(得分:3)

你好m8所有你要做的就是编辑urls.py添加这一行,它应该可以工作。

var myApp = angular.module('myApp',[]);

myApp.controller('myController',function($scope){
    console.log("My controller");
    $scope.newuser = {};
    $scope.users = [
        {username:"Satya",fullname:"Satya",email:"satya@gmail.com"}
    ];
    $scope.saveuser = function(){
        $scope.users.push($scope.newuser);
        $scope.newuser = {};
    };
});

答案 1 :(得分:1)

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

要检查的第一件事是您上传的图片实际上存在于路径[project root]/media/4a273bdf-564d-4dec-b657-43db27f04042.jpeg

要检查的第二件事是Nginx或Apache或[插入Web服务器]正确地将请求路由到您的media目录到服务器上的正确位置。

编辑#1

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

location /media/  {
       alias /absolute/path/to/media/;
}

这应放在server块中,位于定义路径location的{​​{1}}块之前。