gpt4 book ai didi

python - 如何在不使用 html 表单的情况下将文件发布到 django

转载 作者:太空宇宙 更新时间:2023-11-03 19:14:56 25 4
gpt4 key购买 nike

我目前正在尝试将文件发布到用 django 编写的服务端点。

我可以找到很多这样的例子(exert from here):

def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
........

但是我如何使用 test client 发出请求或urllib当文件不是来自 HTML 表单时,它可以将文件传递到服务器? 我目前正在尝试将文件内容编码为 json 字符串,然后将其传递;但事实证明这很麻烦。

除了下面的答案:

  1. 不要忘记让您的服务免于 csrf
  2. 请勿设置内容类型或将其明确设置为多部分。
  3. Consult this for info on how to handle incoming files in your view.

最佳答案

正如 Goin 所说,Requests ,你可以这样做:

>>> r = requests.post('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json
{u'private_gists': 419, u'total_private_repos': 77, ...}

urllib2 中,这将是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib2

gh_url = 'https://api.github.com'

req = urllib2.Request(gh_url)

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, 'user', 'pass')

auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)

urllib2.install_opener(opener)

handler = urllib2.urlopen(req)

print handler.getcode()
print handler.headers.getheader('content-type')

来源:github

在请求中发布多部分编码的文件很容易。来自官方文档:

>>> url = '/your/recieving/end'
>>> files = {'report.xls': open('report.xls', 'rb')}

>>> r = requests.post(url, files=files)
>>> r.text # response json

关于python - 如何在不使用 html 表单的情况下将文件发布到 django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com