Я работаю над приложением, в котором пользователь может выбрать категорию, которая будет возвращать случайный выбор из этой категории.Основная функциональность, которую я пытаюсь реализовать, заключается в том, что после выбора элемента его больше нельзя выбирать случайным образом в сеансе.
Например, у нас есть 3 категории фотографий: пейзаж,городские и портреты, каждый с 5 фото .Пользователь выбирает городские, а затем перенаправляется на страницу сведений со случайной фотографией из городской категории.Он может либо обновить страницу, либо нажать кнопку, чтобы получить новое фото из этой категории.Когда в этой категории нет новых фотографий, он перенаправляется домой.
Я могу получить свой случайный элемент из выбранной категории путем преобразования набора запросов в список, но данные не сохраняются.При каждом обновлении список, который у меня сбрасывается, таким образом, ранее выбранная фотография может появляться снова, игнорируя тот факт, что я удалил элемент из списка после его выбора.
Вот views.py с функциейОтветственный за это:
def randomPhoto(request, pk, **kwargs):
# queryset to get all photos from selected category
gallery = list(Photos.objects.filter(id=pk)
.values_list("partof__category", flat=True))
# select random photo from list
last = len(gallery) -1
randomInt = random.randint(0, last)
randomPic = gallery[randomInt]
gallery.remove(randomPic)
if len(gallery) == 0:
return render(request, 'gallery/category_select.html')
photoDetails = {
'category' : Category.objects.get(id=pk),
'author' : Author.objects.get(tookin__category=randomPic),
'uploadedPhoto' : 'http://localhost:8000/media/' +
str(Photo.objects.get(category=randomPic).photoUpload),
'randomPic' : randomPic,
}
return render(request, 'gallery/random_photo.html', {'photoDetails': photoDetails})
Функциональность, которую я ищу, (где каждый номер является объектом / элементом в списке):
- Пользователь выбирает категорию города:
- Городской имеет следующие предметы: [1, 2, 3, 4, 5]
- Случайный [3] выбран из городского
- Городской теперь имеет [1, 2, 4,5]
- Пользователь обновляет:
- случайный [4] выбран
- городской теперь имеет [1, 2, 5]
- Пользователь обновляет:
- В случайном порядке [2] выбрано
- Городской теперь имеет [1, 5]
- Пользователь обновляет:
- random [5] selected
- urban теперь имеет [1]
- Пользователь обновляет:
- random [1] selected
- городской теперь имеет []
- Пользователь redirected home
Я полагаю, что моя проблема заключается в необходимости настроить сеансы или файлы cookie для сохранения данных в анонимном сеансе.Со временем я добавлю модуль «Пользователи», чтобы у каждого пользователя была сохранена история просмотра, но сейчас я хочу, чтобы он работал как анонимный пользователь.
Я попытался добавить SESSION_SAVE_EVERY_REQUEST = True
к settings.py
ипоместив request.session.modified = True
в мой views.py
, хотя я сомневаюсь, что реализую их правильно.Я прочитал несколько вопросов о сеансах и файлах cookie, но не смог найти что-то, что помогло бы решить мою проблему.Документ Django Sessions Doc показался интересным, но ошеломляющим.Я не уверен, с чего начать пытаться экспериментировать с соединением аспектов сессий.
Мне интересно, есть ли простой / Pythonic способ добиться, чтобы мое веб-приложение дало мне неповторяющийся элемент из спискапока в сеансе не останется ни одного.