Я пытаюсь выборочно обрабатывать поле в приложении Django/Python на основе того, вошел ли пользователь в систему или нет. В принципе, у меня есть модель, аналогичную следующей:Установка значения поля модели на основе аутентификации пользователя в Django
class Resource(models.Model):
uploaded = models.DateTimeField()
name = models.CharField(max_length=200)
description = models.CharField(max_length=500, blank=True)
file = models.CharField(max_length=200)
То, что я хочу сделать, это для атрибута файла должен быть установлен в одно значение, если пользователь случается быть зарегистрированным (и имеет доступ к этому ресурсу на основе на тесте против некоторых разрешений) и другое значение, если пользователь не вошел в систему. Таким образом, когда какой-либо клиентский код пытается получить доступ к Resource.file, он получит что-то вроде следующего, если пользователь не войдет в систему «http: //mysite.com/dummy_resource_for_people_without_access. Однако, если пользователь вошел в систему и прошел несколько тестов для разрешений, то значение ресурса будет фактически истинным URL-адресом этого ресурса (включая любые ключи безопасности и т. Д. Для доступа к этому ресурсу).
Из того, что я прочитал, кажется, что вы можете учитывать только зарегистрированного пользователя, передав его через контекст запроса из функции просмотра в модель. Однако в приведенном выше примере использования я пытаюсь более точно контролировать доступ в модели, не требуя, чтобы клиентский код вызывал специальную функцию.
Нужно ли хранить URL-адрес в базе данных или его можно генерировать динамически? Возможность доступа к пользователю/запросу в модели не должна быть возможной в django для различных лучших методов проектирования; вы всегда должны передавать объект пользователя или пересматривать свой дизайн! –
URL-адрес должен генерироваться динамически, используя ключ файла вместе с другими данными безопасности. – Faisal