【发布时间】:2021-11-07 18:28:27
【问题描述】:
我对 python 有点陌生,我正在创建一个用户可以购买高分辨率图像的网站,现在我正在寻找一种方法让用户从 Django 下载他们购买的图像模型, 这是我的图片模型:
class Pic(models.Model):
name = models.CharField(max_length = 60, blank = False)
description_sizes = models.TextField(blank = False, name = 'des_sizes', max_length = 360)
captured_time = models.DateField(blank = False)
price = models.IntegerField(blank = False)
preview = models.ImageField(upload_to = f'static/post/preview/', null = False, blank = False)
tags = models.CharField(max_length = 1000, blank = False)
image_files = models.FileField(upload_to ='posts/ogFiles', null = True, blank = False)
我的views.py:
def singlePostView(request, pic_id = None):
pic = Pic.objects.get(id = pic_id)
print(pic)
context = {
'pic':pic,
}
return render(request,"post/single_post_view.html", context)
我正在寻找制作按钮或链接以在单个视图中从 pic 模型下载 image_file 的方法,我已经搜索了几天,我刚刚遇到了这些: xsendfile 模块
或像这样使用服务:
<a href="/project/download"> Download Document </a>
在 urls.py 中:
url(r'^download/(?P<path>.*)$', serve, {'document root': settings.MEDIA_ROOT}),
对于 xsendfile 模块来说,这并不是一个真正有效的方式
- 最初是为 Apache 2 和 2.2 设计的。
- 不是标准的 Apache 模块
- 自 2011 年以来未维护。
对于 serve,因为它不是受保护的 url,用户可以下载其他路径中的其他文件。
有没有从 Django 模型下载的替代解决方案??
【问题讨论】:
-
有几个要素需要考虑。首先,图像文件托管在哪里?它们是否在运行 Python 代码的同一台服务器上?其次,购买/交易是如何处理的——你也有 Python 代码吗?需要有一些逻辑来确保允许当前用户下载图像。你现在正在处理吗?
-
@GregSadetsky 是的,图像文件托管在同一台服务器上(使用 Python Web 应用程序),我正在使用 API 进行购买,它返回布尔值天气交易是否完成,然后如果完成,我将在我的上下文和模板中更改 Is_paid 值,它会像这样:
{% if Is_paid%} active download link {%else%} inactive download link {%endif%} -
好的,这将有助于查看您拥有的所有视图。您是否在视图中获得
Is_paid(在用户提交付款后),然后在会话中设置它?您是否将用户已付款的事实存储在数据库中,还是该值仅保存在内存中?我认为一种简单的(即使不是理想的)前进方式是使用会话对象,并注意用户在他们的会话中购买了图像。然后,创建一个新视图来检查这个会话值,然后用文件内容进行响应。
标签: python django django-models django-views django-templates