0

我正在尝试使用 python 请求通过 django 管理站点上传视频。我登录很好:

import requests

login_url = "http://127.0.0.1:8000/admin"
client = requests.client()
csrftoken = client.cookies['csrftoken']

login_data = {'username': 'username', 'password': 'password',
              'this_is_the_login_form': '1',
              'csrfmiddlewaretoken': csrftoken
             }

r = client.post(login_url, data=login_data)

登录后,我拉出将上传(视频)文件的页面:

target_url = "http://127.0.0.1:8000/admin/product/700/"
r = client.get(target_url)

在 HTML 中,我有一个脚本(它没有被 .get() 请求拉入)在文件上传时进行监听:

var object_id = 700;
$(document).ready(function() {
    // Upload button handler
    $('.file').on('change', handleFileSelect);
    ...

我已尝试将文件设置为我要上传的对象,并发出另一个获取请求,希望设置文件参数,从而使脚本触发并开始上传过程。

<input id="file" class="file" type="file" name="file">


data = {'file': open('file.flv', 'rb')}
r = client.get(target_url, data=data)

如何向 target_url 发出请求,拉下上传脚本,并触发上传脚本以上传文件?

4

1 回答 1

1

上传脚本在 Javascript 中运行,它需要一个浏览器(客户端)。由于您是从 python(服务器端)执行此过程,因此 Javascript 将无法运行。

我要做的是在浏览器中使用 Firebug,并检查您实际上传文件时发送的请求(同时阅读 Javascript 函数可能有助于了解客户端浏览器通常会做什么来上传该文件)。

然后,您可以使用 python-requests 从 python 执行等效的 POST(包括所有必要的参数)。但是请注意,由于您要发送文件,因此您可能需要发布“多部分编码”文件: http: //www.python-requests.org/en/latest/user/quickstart/#post-a-多部分编码文件

于 2013-10-31T19:39:02.240 回答