javascript – 通过验证用户使用Django rest框架下载文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 通过验证用户使用Django rest框架下载文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2096字,纯文字阅读大概需要3分钟。
内容图文
我正在开发一个项目,我使用Django作为后端.我正在使用Django休息框架,我有一个API来下载文件.
@detail_route(methods=['GET'], permission_classes=[IsAuthenticated])
def test(self, request, pk=None):
try:
ticket = Ticket.objects.get(id=pk, user=request.user)
file_path = ticket.qrcode_file.path
if os.path.exists(file_path):
with open(file_path, 'rb') as fh:
response = HttpResponse(fh.read(), content_type="image/jpeg")
name = "%s %s %s %s.jpg" % (ticket.show.title, datetime.strftime(ticket.show.date_time,
"%H_%M_%p"),
datetime.strftime(ticket.show.date_time, "%d %B %Y"), ticket.id)
response['Content-Disposition'] = "attachment; filename=%s" % name.replace(" ", "_")
return response
return Response({'error': 'Ticket doest not belong to requested user.'}, status=status.HTTP_403_FORBIDDEN)
except Ticket.DoesNotExist as e:
return Response({'error': str(e)}, status=status.HTTP_404_NOT_FOUND)
在前端我使用Nuxtjs(ssr for vuejs).这是一小段代码,用户可以通过单击目标空白链接来下载文件:
<a class="downloadBtn" target="_blank" :href="`${baseURL}/payments/api/tickets/${ticket.id}/download_ticket/`">Download e-ticket</a>
Web应用程序在Nuxtjs服务器(localhost:3000)上运行,Django服务器在localhost:8000上运行,只有API用于通过使用auth令牌在Nuxtjs和Django之间进行通信.
当我单击下载链接时,它会打开一个新选项卡并从该新选项卡发出请求,其中没有令牌与请求一起传递.因为,下载票证的django视图是permission_classes = [IsAuthenticated]我无法通过request.user匿名进行身份验证.
有没有其他方法可以让我通过检查所请求的用户是否是Ticket的所有者来下载文件?
解决方法:
因为您正在使用JWT,所以您应该在使用某种ajax请求和JWT标头从api请求它后从您的前端下载该文件.
some_api_request_hendler().then(function (response) {
var file = new Blob([response.data], {type: response.headers("Content-Type")});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(pdf);
link.download = "the_new_file_name";
link.click();
});
我以answer为例.您的API不应更改.你做到这一点的方式是要走的路.
你的链接现在需要调用你的新前端函数,而不仅仅是< a href. 编辑: 几年前我问了question这样的问题.你可能会在那里找到一些帮助.
浏览器兼容性
blob,createElement,createObjectURL
内容总结
以上是互联网集市为您收集整理的javascript – 通过验证用户使用Django rest框架下载文件全部内容,希望文章能够帮你解决javascript – 通过验证用户使用Django rest框架下载文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。