2011-09-01 71 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类似。