Django: запустить функцию перед доступом к медиа через url - PullRequest
0 голосов
/ 28 мая 2020

Пишу проект django. В моем проекте будут картинки, которые хранятся не в базе данных, а в папке с медиа. Каждый может просто набрать http://mywebsite/media/pictures.jpg, чтобы просмотреть фотографии. Что мне делать, если я хочу запустить функцию до того, как пользователь получит доступ к URL-адресу мультимедиа? Сценарий:

  1. Введите пользователя http://mywebsite/media/pictures.jpg и нажмите ввод
  2. Запустите функцию python в бэкэнде, например, просто распечатайте имя пользователя
  3. Распечатайте имя пользователя
  4. Пользователь, наконец, может go перейти по URL-адресу для просмотра изображения, не зная, что функция только что запущена

1 Ответ

0 голосов
/ 28 мая 2020

Для этого вам нужно будет реализовать собственное решение, что-то вроде центрального представления, которое будет принимать 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)

Urlpattern

urlpatterns = [
    path('servemedia/', MediServeView, name="servemedia"),
]

В вашем шаблоне или URL-преобразователе

<a href="{% url 'servemedia' %}?next={{ yourmedia.url }}" />

u = reverse('servemedia') + "?next=%s" % yourmedia.url

Надеюсь, это поможет.

...