2011-09-01 68 views
0

我有以下模板表單,其中包含多個變量。如何在變量處理之前將變量傳遞給表單

<form action="https://me.s3.amazonaws.com/" method="post" enctype='multipart/form-data' class="upload-form"> 
    <input type="hidden" name="key" value="videos/{{filename}}"> 
    <input type="hidden" name="AWSAccessKeyId" value="{{access_key}}"> 
    <input type="hidden" name="acl" value="public-read"> 
    <input type="hidden" name="policy" value="{{policy}}"> 
    <input type="hidden" name="signature" value="{{signature}}"> 
    <input type="hidden" name="Content-Type" value="{{content_type}}"> 
    <input name="file" type="file"> 
    <input type="submit" value="Upload" name="upload"> 
</form> 

然而,只要提交按鈕被擊中,形式發送到Amazon,我不能將它傳遞變量。這是我一直在努力做的,失敗 -

if 'upload' in request.POST: 
     policy = base64.b64encode(...) 
     signature = base64.b64encode(
      hmac.new('secret_key', policy, sha).digest()) 
     file = request.POST['files'] 
     filename=file.name 
     content_type=mimetypes.guess_type(filename)[0] 

什麼我需要做的POST請求後,通過變量的形式,但亞馬遜的前處理形式?謝謝。

回答

2

你應該改變你的窗體的行動,你的Django視圖,並在您的視圖中,可以重新發布到https://me.s3.amazonaws.com/

在模板

<form action="http://mywebsite/upload" method="post" ... 

在你view.py:

def upload(request): 
    # Your treatment here. 
    # Post the data to amazon S3. 
    urllib2.urlopen("https://me.s3.amazonaws.com/", your_data) 
    ... 
+1

太好了,謝謝。而「your_data」究竟是一本字典,還是我將如何通過它?謝謝。 – David542

+0

@ David542:是的,它是一個字典,當它傳遞給urllib2.urlopen它會發出一個請求,你可以檢查相關的[doc] [http://docs.python.org/library/urllib2.html#urllib2。 urlopen]獲取更多信息。 – mouad

0

您可以將表單更改爲發佈到您自己的視圖之一,然後在您的視圖中進行後期處理,然後在您的視圖代碼中使用urllib2或使用正確的值向Amazon發佈POST類似。