我有一个小型django应用程序,您可以上传PDF文件。
过去只有人类才使用网络应用程序。
将来,脚本应该能够上传文件。
到目前为止,我们使用ModelBackend进行身份验证(settings.AUTHENTICATION_BACKENDS)
脚本应该能够验证和上传文件
我添加了一个新用户remote-system-foo
并给他一个密码。
以某种方式登录django Web应用程序,然后通过脚本上传pdf文件。
我想将请求库用于http客户端脚本。
答案 0 :(得分:1)
您可以使用请求库登录任何站点,您当然需要根据您的站点所需的参数来定制POST。如果事情并非微不足道,请在登录您的网站时查看Chrome开发者工具中的帖子数据。以下是我用于登录网站的一些代码,可以轻松扩展以执行您需要的任务。
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。但我从未试图通过请求上传。看看relevant requests documentation
话虽如此,这感觉就像一个奇怪的解决方案。您可以考虑将文件上载为fixtures或RunSQL,或者更确切地说,将它们的位置(例如AWS桶URL)上载到数据库。但对我来说这是一个新的领域。 希望它有所帮助。
答案 1 :(得分:0)
我们现在使用此库:https://github.com/hirokiky/django-basicauth
通过这种方式,我们将http-basic-auth用于API视图,并将session / cookie auth用于交互式人类。
答案 2 :(得分:0)
由于我找不到匹配的解决方案,我写了并发表了这个:
https://pypi.python.org/pypi/tbzuploader/
通用http上传工具。
如果http上传成功,则文件将移至“完成”子 。目录
如果服务器,tbzuploader认为上传成功 回复,http状态为201创建
其他功能:处理文件对。
例如,您有四个文件:a.pdf,a.xml,b.pdf,b.xml
第一次上传应该是a.pdf和a.xml,第二次上传 b.pdf和b.xml,然后阅读-patterns的文档。