python - Django 媒体文件(图像)安全性
问题描述
我正在 Django 中进行图像处理。我正在使用普通图像模型存储方法。
所以,我的模型是这样的,
class PictureModel(models.Model):
def user_directory_path(instance, filename):
return 'images/{0}/{1}'.format(instance.user.username, filename)
user = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to=user_directory_path)
view.py 有点像,
@login_required(login_url='/accounts/login/')
def myMethod(request):
user = request.user
myImage = PictureModel.objects.get(user=request.user)
return render(request, 'main/myPage.html', {'myImage': myImage})
我有一个媒体根设置,
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
url.py 设置如下,
url(r'^static/(?P<path>.*)$', django.views.static.serve, {'document_root': settings.STATIC_ROOT, 'show_indexes': settings.DEBUG})
现在在正常流程中,图像上传和获取按预期工作。但问题在于获取媒体文件时的用户验证/身份验证。
假设,我通过 URL 获取图像,
media/images/user_1/mypic.jpg
但是整个媒体文件夹在没有任何验证的情况下就暴露了,我可以访问,
media/images/user_2/mypic.jpg
也可以通过浏览器。我在网上对此进行了搜索,发现有一些随机的第三方库可用,但它们并不那么标准/流行。任何人都可以建议最佳实践和库来处理这种情况。
解决方案
在您的模板中添加它可以解决问题
<img style="height:200px; width:200px; border-radius:50%; margin:auto" src="{{ appname.function_name.image.url }}" alt="Photo">
推荐阅读
- linux - 在 Linux 上的 Docker 中查看交互式 Cypress 测试运行程序
- javascript - Django使用ajax更新表数据
- spring-batch - Spring批量读取对文件夹中的大量文件进行分区
- reactjs - 为什么我无法访问从 redux 商店获取的产品?
- python - Pygame擦除颜色使其透明
- r - 用 append 添加两个值
- maven - Maven找不到依赖项
- python - Tensorflow:并行在 2 个 GPU 上进行矩阵乘法
- python - Django:ImportError:无法从“芹菜”导入名称“芹菜”
- php - 使用 PHP 在 MySQL DB 中的项目列表中排序标题