在Django上构建带用户认证的文件上传API

2 投票
3 回答
1084 浏览
提问于 2025-04-16 23:43

我有一个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.

0

如果你的应用不需要特别复杂的认证方式,我建议你可以考虑使用OAuth来进行API的身份验证。还有一个叫做oauth2app的django模块,可以帮助你用OAuth认证来保护某个网址。

2

我认为可以简单地使用 django.contrib.auth 这个应用。在处理POST请求中的实际文件数据之前,先确认这个请求里有有效的身份验证信息。你可以通过调用 authenticate 函数来做到这一点,具体可以参考这个链接:https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.authenticate

以上方法适用于你想要在一个请求中完成整个过程的情况。不过,这样的话就意味着在检查身份验证信息之前,整个文件会被上传。 如果你可以把这个过程分成一个身份验证请求和一个文件上传请求,那你可以创建一个视图来处理身份验证,然后用 login_required 装饰器来保护你的文件上传视图。这就需要用到会话...

撰写回答