如何正确集成Filepicker.io,Django和S3

时间:2013-01-23 05:00:08

标签: python django filepicker.io

我正在制作一个Django应用程序,允许用户通过管理界面上传图片,然后通过API端点访问这些图片的URL。在管理界面上,应向用户显示Filepicker.io小部件(以启用拖放功能等),并将文件上载到S3。我已将S3凭据输入到我帐户的Filpicker管理页面中。

我的问题是如何将所有这些元素结合在一起。这是我项目中的相应文件:

# models.py
from django.db import models
from django_filepicker.models import FPFileField

# Add field introspection for FPFileField 
# See http://south.aeracode.org/wiki/MyFieldsDontWork
from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^django_filepicker\.models\.FPFileField"])

class Product(models.Model):
    product_logo = FPFileField(upload_to='uploads')

# forms.py
from django import forms
from django_filepicker.forms import FPFileField
from django_filepicker.widgets import FPFileWidget
from example.models import Product

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product

    def __init__(self, *args, **kwargs):
        self.fields['product_logo'] = FPFileField(widget = FPFileWidget)
        super(ProductForm, self).__init__(*args, **kwargs)

# views.py
from django.http import HttpResponse
from example.models import Product
import json

def example_view():
    result = []
    products = Product.objects.all()
    for product in products:
        # I want the S3 URL here!
        result.append(product.product_logo.url)
    return HttpResponse(json.dumps(result, indent=2))

我的问题是:

  1. Django管理界面显示正常的Django FileField小部件,而我想要FPFileWidget
  2. 我希望将图片文件上传到S3(不是我网站的/ media目录)
  3. 我想检索S3网址而不是/ media / xxxx网址。
  4. 例如,目前典型的反应如下:

    [
      "/media/uploads/fp-file", 
      "/media/uploads/fp-file_1", 
      "/media/uploads/fp-file_2", 
      "/media/uploads/fp-file_3", 
      "/media/uploads/fp-file_4", 
      "/media/uploads/fp-file_5"
    ]
    

    但我想要的是:

    [
      "https://s3-ap-southeast-2.amazonaws.com/XXXXXXXXX/TBtOcRSNyBAZZuNBFOpA_blah.png", 
      "https://s3-ap-southeast-2.amazonaws.com/XXXXXXXXX/8ODleDuKRIOAglFs0sKl_etc.png", 
    ]
    

2 个答案:

答案 0 :(得分:3)

您需要将DEFAULT_STORAGE_BACKEND更改为s3存储后端。请查看amazon-S3 backend of django-storages

要在管理面板上使用FPFileWidget,请查看Django Admin: Using a custom widget for only one model field

更改这两个设置应该适合您。

答案 1 :(得分:1)

看一下FPUrlField,它应该能满足您的需求。当前的FP *字段没有管理界面,但如果您想要提交代码,我们很乐意接受拉取请求