如何在处理之前将变量传递给表单

时间:2011-09-01 13:17:23

标签: python django forms http-headers amazon-s3

我有以下模板表单,包含几个变量。

<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>

但是,只要点击提交按钮,表单就会发送到亚马逊,而我无法传递变量。这就是我一直想做的事,但没有成功 -

    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 个答案:

答案 0 :(得分: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 :(得分:0)

您可以将表单更改为POST到您自己的一个视图,然后在您的视图中进行后期处理,然后在您的视图代码中,使用正确的值向Amazon发出POST,例如{{3或类似的。