Как сделать так, чтобы содержимое, полученное при входе в систему, сохранялось, даже если пользователь выходит из системы и снова входит в нее?
В настоящее время я работаю над проектом, в котором пользователь проходит аутентификацию, и когда он перенаправляется на домашнюю страницу, выполняется 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)
Сейчас у меня в основном два требования:
- Когда пользователь нажимает кнопку обновления, должна быть сгенерирована (удовлетворена) новая шутка.
- Если пользователь выходит из системы и снова входит в нее, то должна быть показана та же шутка, которая была показана на экране ранее.
Например, если пользователь сейчас выйдет из системы и снова войдет в нее, он увидит на экране ту же самую шутку.
Я буду очень благодарен, если кто-нибудь подскажет мне, как решить эту проблему. Это выглядит просто, но я не понимаю, с чего начать.
Храните последнюю шутку в базе данных. Посадочная страница сразу после входа в систему, которая извлекает из базы данных последнюю шутку и отображает ее, если пользователь вошел в систему менее 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)