Как сделать так, чтобы содержимое, полученное при входе в систему, сохранялось, даже если пользователь выходит из системы и снова входит в нее?

В настоящее время я работаю над проектом, в котором пользователь проходит аутентификацию, и когда он перенаправляется на домашнюю страницу, выполняется GET-запрос к API:

def home(request):
    url = f'https://icanhazdadjoke.com/'
    headers = {
    "Accept": "application/json"
    } #Putting the application/json in the header to get a JSON result
    r = requests.get(url,headers=headers) #Making a get request to get a random dad joke
    data = r.json() #Converting JSON data to a python dictionary
    required_joke = {'joke': data['joke']}
    return render(request,'test_section/Home.html',required_joke)

Сейчас у меня в основном два требования:

  1. Когда пользователь нажимает кнопку обновления, должна быть сгенерирована (удовлетворена) новая шутка.
  2. Если пользователь выходит из системы и снова входит в нее, то должна быть показана та же шутка, которая была показана на экране ранее.

Например, если пользователь сейчас выйдет из системы и снова войдет в нее, он увидит на экране ту же самую шутку. enter image description here

Я буду очень благодарен, если кто-нибудь подскажет мне, как решить эту проблему. Это выглядит просто, но я не понимаю, с чего начать.

Храните последнюю шутку в базе данных. Посадочная страница сразу после входа в систему, которая извлекает из базы данных последнюю шутку и отображает ее, если пользователь вошел в систему менее 10 секунд назад.

Грубый срез (не проверял). Модель

MAX_JOKE_LEN = 200 # or whatever
class Lastjoke( models.Model)
     user = models.Foreignkey( User, models.CASCADE, related_name='joke')
     text = models.CharField( max_length= MAX_JOKE_LEN)

Ваш вид домашней страницы

import datetime

def home(request):

    # has this user just logged in?
    user = request.user
    seconds = 1000000
    data = None
    if user:
        now = datetime.datetime.now()
        ago = now - user.last_login    
        seconds = ago.seconds + ago.days * 3600 * 24
    if seconds < 10:   # user logged in less than 10 seconds ago
        lastjoke = user.joke.last()
        if lastjoke:   # new user doesn't yet have one
            data = { 'joke': lastjoke.text }

    # if data exists it contains a last joke for a just-logged-in user
    if not data:

        url = f'https://icanhazdadjoke.com/'
        headers = {
            "Accept": "application/json"
        } #Putting the application/json in the header to get a JSON result
        r = requests.get(url,headers=headers) #Making a get request to get a random dad joke
        data = r.json() #Converting JSON data to a python dictionary

    required_joke = {'joke': data['joke']}

    # remember the last joke which is about to be displayed 
    # purists will complain that a GET should not alter a database...

    if lastjoke:  # it exists so update it
        lastjoke.text = data['joke']
        lastjoke.save()
    elif user:
        Lastjoke.objects.create( user=user, text = data['joke'] )

    return render(request,'test_section/Home.html',required_joke)
Вернуться на верх