python - Django:在通过 url 访问媒体之前运行一个函数
问题描述
我正在写一个 Django 项目。在我的项目中,会有图片不是存储在数据库中,而是存储在媒体文件夹中。每个人都可以键入http://mywebsite/media/pictures.jpg
以查看图片。如果我想在用户访问媒体 url 之前先运行一个函数,我应该怎么做?设想:
- 用户类型
http://mywebsite/media/pictures.jpg
并按回车 - 在后端运行 python 函数,例如简单地打印出用户名
- 打印用户名
- 用户终于可以在不知道有一个函数刚刚运行的情况下,去 url 查看图片
解决方案
您需要为此实现自定义解决方案,有点像中央视图,它将获取媒体的 URL,执行必要的操作并重定向用户。有点像这样:
看法
from django.shortcuts import redirect
from django.http import Http404
def MediaServeView(request):
next = request.GET.get('next', None)
if not next: raise Http404("Unknown Media File")
# Execute custom scripts
if request.user:
print(request.user.username)
return redirect(next, status=302)
网址模式
urlpatterns = [
path('servemedia/', MediServeView, name="servemedia"),
]
在您的模板或 URL 解析器中
<a href="{% url 'servemedia' %}?next={{ yourmedia.url }}" />
u = reverse('servemedia') + "?next=%s" % yourmedia.url
希望能帮助到你。
推荐阅读
- laravel-8 - Auth::attempt 返回 False
- arrays - 如何按时间获取 2 个项目并从没有“索引超出范围”的数组中打印它
- php - WordPress 使用 GD 图像引擎以编程方式将图像转换为 WebP 格式
- powershell - PowersShell 大写替换
- amazon-dynamodb - 使用全局二级索引从 dynamo db 表中获取多条记录
- ios - 使用Combine框架iOS重新认证后重试未经授权的请求
- python - Discord.py 机器人读取消息中的粗体文本
- reactjs - 使用 React Native FlatList 时阴影不会溢出。没有 FlatList 也可以
- reactjs - 如何使用具有功能的 React Router 进行重定向
- windows - JFROG Artifactory 的新手,尝试安装和服务将无法启动