Я сделал простое представление для поиска одного продукта на своем веб-сайте электронной коммерции.
Представление (API) ожидает параметр GET (как http://example.com/search/12345) после того, как я хотел бы сохранить искомый параметр (с созданием набора запросов) в специфической c модели для получения истории поиска.
Но если я вызываю view / api из последней Firefox версии, я получаю две записи в базе данных из Edge только один.
Углубление топи c проблема заключается в идемпотентности, ожидаемой от HTTP RF C в методе Get. Некоторые браузеры могут выполнять более одного запроса ...
Мне нужно сохранить метод GET для поиска API, но мне нужно сохранить искомую строку.
Что можно использовать для поиска и сохранения параметра GET это в базе только один? без CSRF / Cookie / User-Agent?
Для лучшего понимания очень упрощенный код:
# models.py
class SearchHistory(models.Model):
searched_text = models.CharField(max_length=255)
results_number = models.IntegerField(default='0')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return f'{self.searched_text}'
class Meta:
verbose_name = "search term"
verbose_name_plural = "history search terms"
#url.py
urlpatterns = [
...
path('search/<str:search>', search, name='search'),
...
]
# views.py
def search(request, search):
products = Product.objects.filter(name__contains=search)
results_number = len(products) # I know a better way for this..
SearchHistory.objects.create(searched_text=search, results_number=results_number)
return HttpResponse('irrilevant ... :-)')