Django использует данные в представлении на основе классов - PullRequest
0 голосов
/ 23 октября 2019

У меня есть классное представление в Django. Я реализовал метод get_context_data. Пользователь может войти в систему или обновить свои данные и перенаправляется в шаблон представления на основе классов. Я хочу получить информацию о вошедшем в систему пользователе внутри представления на основе классов. Я не представляю вид, просто перенаправляю. Есть ли такой подход, как сохранение данных в памяти во время вычислений или глобальных переменных, чтобы они были доступны в любом месте views.py.

1 Ответ

1 голос
/ 23 октября 2019

если пользователь входит в систему, используя метод authenticate / login, и у вас загружен SessionMiddleware, как вы должны, то информация о пользователе должна быть в вашем объекте request.user.

В объекте View на основе классов вы можете прочитать request примерно так:

class SomeView(View):
    def get(self, *args, **kwargs):
        user = self.request.user
        #recommended: check if the user is authenticated, ie, not anonymous.
        if user.is_authenticated:
            check_something(user) #do whatever you need.

в случае TemplateView подклассов (я полагаю, поскольку вы упомянули get_context_data) - этото же самое:

class SomeTemplateView(TemplateView):
    def get_context_data(self, *args, **kwargs):
        if self.request.user and self.request.user.is_authenticated:
            #do something

Глобалы и другие вещи не будут работать в сервисе Django, это может работать на разработке, но в производственном процессе запрос вашего пользователя может быть обработан различными процессами Python в целом, а память не будетбыть разделенным между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...