首页 > 解决方案 > Django:在通过 url 访问媒体之前运行一个函数

问题描述

我正在写一个 Django 项目。在我的项目中,会有图片不是存储在数据库中,而是存储在媒体文件夹中。每个人都可以键入http://mywebsite/media/pictures.jpg以查看图片。如果我想在用户访问媒体 url 之前先运行一个函数,我应该怎么做?设想:

  1. 用户类型http://mywebsite/media/pictures.jpg并按回车
  2. 在后端运行 python 函数,例如简单地打印出用户名
  3. 打印用户名
  4. 用户终于可以在不知道有一个函数刚刚运行的情况下,去 url 查看图片

标签: pythondjangomedia

解决方案


您需要为此实现自定义解决方案,有点像中央视图,它将获取媒体的 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

希望能帮助到你。


推荐阅读