在Django上构建带用户认证的文件上传API
我有一个Django应用,用户可以上传文件并对其进行处理,现在我需要为这个应用写一个API。具体要求如下:
- 这个API必须能够接受文件上传(这基本上就是这个API的主要功能)
- 需要支持用户身份验证,也就是说,每个上传的文件都必须和一个已经存在的Django用户关联起来
我很容易就完成了第一部分,只需要告诉Django在一个特定的URL上监听POST请求(我通过用curl
传递一个文件来测试这个URL),但这样显然无法实现用户身份验证。
我该怎么添加这个功能呢?我是不是应该尝试使用tastypie,因为它是专门用来构建API的,并且支持用户身份验证,尽管我这个简单的API只会用到它的一小部分功能?还是说我可以简单地让Django在POST请求中接受用户名和密码,连同文件一起上传?在Django上构建的API中,用户身份验证有没有什么最佳实践?
3 个回答
0
认证
- 给API添加一个认证ID。例如,像这样使用:url/uploadfile?file=1.txt&authid=xxx
- 这个认证ID可以通过另一个API获取,前提是你需要用用户名和密码进行认证。
请查看我的代码,了解文件上传和API认证的具体实现,链接在这里:git.
2
我认为可以简单地使用 django.contrib.auth
这个应用。在处理POST请求中的实际文件数据之前,先确认这个请求里有有效的身份验证信息。你可以通过调用 authenticate
函数来做到这一点,具体可以参考这个链接:https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.authenticate
以上方法适用于你想要在一个请求中完成整个过程的情况。不过,这样的话就意味着在检查身份验证信息之前,整个文件会被上传。 如果你可以把这个过程分成一个身份验证请求和一个文件上传请求,那你可以创建一个视图来处理身份验证,然后用 login_required
装饰器来保护你的文件上传视图。这就需要用到会话...