Django

2009-10-24 5 views
5

का उपयोग कर ऐप इंजन पर छवियों को संग्रहीत करना मैं Django का उपयोग करके Google App Engine पर एक डीबी.ब्लोबप्रॉपर्टी फ़ील्ड में एक आकार की छवि को अपलोड और सहेजने का प्रयास कर रहा हूं।Django

मेरे विचार से प्रासंगिक बात यह है कि की प्रक्रिया अनुरोध इस तरह दिखता है: (

from google.appengine.api import images 

class Guestbook(webapp.RequestHandler): 
    def post(self): 
    greeting = Greeting() 
    if users.get_current_user(): 
     greeting.author = users.get_current_user() 
    greeting.content = self.request.get("content") 
    avatar = images.resize(self.request.get("img"), 32, 32) 
    greeting.avatar = db.Blob(avatar) 
    greeting.put() 
    self.redirect('/') 

:

image = images.resize(request.POST.get('image'), 100, 100) 
recipe.large_image = db.Blob(image) 
recipe.put() 

कौन सा यह की तरह लगता है डॉक्स में उदाहरण के तार्किक Django बराबर होगा स्रोत: http://code.google.com/appengine/docs/python/images/usingimages.html#Transform)

लेकिन, मुझे एक त्रुटि मिलती है जो कहती है: NotImageError/खाली छवि डेटा।

और इस लाइन को संदर्भित करता है:

image = images.resize(request.POST.get('image'), 100, 100) 

मैं मुसीबत छवि डेटा के लिए हो रही हो रही है। ऐसा लगता है कि इसे अपलोड नहीं किया जा रहा है लेकिन मुझे पता नहीं लगाया जा रहा है क्यों। मेरे रूप में enctype = "multipart/form-data" और वह सब है। मुझे लगता है कि मैं छवि डेटा का जिक्र कैसे कर रहा हूं इसके साथ कुछ गलत है। "request.POST.get ('image')" लेकिन मैं यह नहीं समझ सकता कि इसका संदर्भ कैसे दिया जाए। कोई विचार?

अग्रिम धन्यवाद।

उत्तर

9

"hcalves" से कुछ मार्गदर्शन के बाद मैंने समस्या का पता लगाया। सबसे पहले, ऐप इंजन के साथ बंडल किए जाने वाले Django का डिफ़ॉल्ट संस्करण संस्करण 0.96 है और तब से ढांचे को अपलोड की गई फ़ाइलों को कैसे प्रबंधित किया जाता है। हालांकि आदेश पुराने एप्लिकेशन के साथ संगतता बनाए रखने के लिए आप स्पष्ट रूप से App इंजन बताने के लिए इस तरह Django 1.1 उपयोग करने के लिए:

from google.appengine.dist import use_library 
use_library('django', '1.1') 

आपको लगता है कि in the app engine docs के बारे में अधिक पढ़ सकते हैं। ,

from google.appengine.api import images 

image = request.FILES['large_image'].read() 
recipe.large_image = db.Blob(images.resize(image, 480)) 
recipe.put() 

फिर, डेटास्टोर से वापस फिर से गतिशील छवियों की सेवा के लिए इस तरह छवियों के लिए एक हैंडलर का निर्माण:

ठीक है, इसलिए यहाँ समाधान है

from django.http import HttpResponse, HttpResponseRedirect 

def recipe_image(request,key_name): 
    recipe = Recipe.get_by_key_name(key_name) 

    if recipe.large_image: 
     image = recipe.large_image 
    else: 
     return HttpResponseRedirect("/static/image_not_found.png") 

    #build your response 
    response = HttpResponse(image) 
    # set the content type to png because that's what the Google images api 
    # stores modified images as by default 
    response['Content-Type'] = 'image/png' 
    # set some reasonable cache headers unless you want the image pulled on every request 
    response['Cache-Control'] = 'max-age=7200' 
    return response 
3

आप अनुरोध के माध्यम से अपलोड किए गए डेटा तक पहुंच सकते हैं। FILES ['field_name']।

http://docs.djangoproject.com/en/dev/topics/http/file-uploads/


गूगल की छवि API के बारे में अधिक पढ़ना, आप कुछ इस तरह करना चाहिए मुझे लगता है:।

from google.appengine.api import images 

image = Image(request.FILES['image'].read()) 
image = image.resize(100, 100) 
recipe.large_image = db.Blob(image) 
recipe.put() 

request.FILES [ 'छवि'] पढ़ा() काम करना चाहिए क्योंकि यह एक Django के अपलोड किया गया फ़ाइल उदाहरण होना चाहिए।

+0

आपकी मदद के लिए धन्यवाद hcalves , मुझे कुछ भी गलत करना होगा क्योंकि मैंने बदल दिया है: image = images.resize (request.FILES ['image'], 300, 200) recipe.large_image = db.Blob (छवि) नुस्खा। रखो() अब मुझे आकार बदलने() कॉल पर BadImageError मिल रहा है। इसके अलावा, जीएई डिफ़ॉल्ट रूप से django .96 का उपयोग करता है ...शायद मुझे इसे बदलने की कोशिश करनी चाहिए ?? मैंने भी अनुरोध करने का प्रयास किया। FILES ['image']। पढ़ें() लेकिन यह काम नहीं किया। यह मुझे बताता है कि "dict dict ऑब्जेक्ट में कोई विशेषता नहीं है ' मैं इस कल के साथ गड़बड़ कर रखूंगा। लेकिन अगर आपके पास कोई और सुझाव है तो मैं सभी कान हूं। एक बार फिर धन्यवाद। –