从urllib在Django中上载文件

从urllib在Django中上载文件,django,authentication,Django,Authentication,我有一个小的django应用程序,你可以上传PDF文件 在过去,只有人类使用web应用程序 将来,脚本应该能够上载文件 到目前为止,我们用于身份验证(settings.authentication\u BACKENDS) 目标 脚本应该能够验证和上载文件 我目前的战略 我添加了一个新用户远程系统foo,并给他一个密码 以某种方式登录到django web应用程序,然后通过脚本上载pdf文件 我想使用http客户端脚本的请求库 问题: 如何登录到django web应用程序 我目前的策略是正确的

我有一个小的django应用程序,你可以上传PDF文件

在过去,只有人类使用web应用程序

将来,脚本应该能够上载文件

到目前为止,我们用于身份验证(settings.authentication\u BACKENDS)

目标 脚本应该能够验证和上载文件

我目前的战略 我添加了一个新用户
远程系统foo
,并给他一个密码

以某种方式登录到django web应用程序,然后通过脚本上载pdf文件

我想使用http客户端脚本的请求库

问题:
  • 如何登录到django web应用程序
  • 我目前的策略是正确的,还是有更好的策略

您可以使用请求库登录任何站点,当然您需要根据站点需要的参数定制帖子。如果事情不是琐碎的,那么看看当你登录到你的站点时Chrome开发者工具中的post数据。这是我用来登录网站的一些代码,可以很容易地进行扩展,以完成您需要它做的任何事情

from bs4 import BeautifulSoup as bs
import requests


data = requests.session.get(page)
soup = bs(data.text, "lxml")

# Grab csrf token
# soup.find(...) or something

# The POST data for authorizing, this may or may not have been a django
# site, so see what your POST needs
data = {
    'user[login]': 'foo' ,
    'user[password]': 'foofoo',
    }

# Act like a computer, and insert token here, not with data!
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) 
           AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 
           Safari/537.36', 'X-CSRF-Token': token
}

requests.session.post('https://www.examplesite.com/users/sign_in', data=data, 
headers=headers)
现在,您的会话已登录,您应该能够上载pdf。但我从未尝试过通过请求上传。看一看

尽管如此,这似乎是一个奇怪的解决方案。您可以考虑将文件上传为RunSQL,或者更确切地说,将它们的位置(如AWS桶URL)发送到数据库。但这对我来说是一个新领域。 希望有帮助。

我们现在使用此库:


通过这种方式,我们将http basic auth用于API视图,并将session/cookie auth用于交互式人员。

因为我没有找到匹配的解决方案,所以我编写并发布了以下内容:

通用http上传工具

如果http上载成功,文件将移动到“完成”子文件夹 目录

如果服务器 已创建http状态为201的答复

附加功能:处理成对的文件

例如,您有四个文件:a.pdf、a.xml、b.pdf、b.xml

第一次上传应该是a.pdf和a.xml,第二次上传应该是a.pdf和a.xml b、 pdf和b.xml,然后阅读文档中的–模式


是的,这应该行得通。我完全控制django web应用程序。我可以修改它。我想让客户更简单。不知怎的,我觉得你的解决方案有点脆弱。别误会我。你的答案是正确的。