16 lines
589 B
Python
16 lines
589 B
Python
# common/private_files/helpers.py
|
|
from django.urls import reverse
|
|
from django.core import signing
|
|
|
|
|
|
def build_private_url(app_label: str, model_name: str, pk: int | str, field_name: str, *, sign: bool = True) -> str:
|
|
params = f"?app={app_label}&model={model_name}&pk={pk}&field={field_name}"
|
|
|
|
if sign:
|
|
token = signing.dumps(
|
|
{"app": app_label, "model": model_name, "pk": pk, "field": field_name},
|
|
salt="private-files",
|
|
compress=True,
|
|
)
|
|
params += f"&token={token}"
|
|
return reverse("private_file_download") + params
|