Django просмотреть как API с методом Get, сохранить дважды записи из Firefox - PullRequest
0 голосов
/ 09 апреля 2020

Я сделал простое представление для поиска одного продукта на своем веб-сайте электронной коммерции.

Представление (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 ... :-)')

1 Ответ

0 голосов
/ 20 апреля 2020

Я решил проблему. У меня был плохой тег img в моем шаблоне.

Неисправный элемент:

<img src="#" />

Когда Firefox читает этот элемент в DOM, перезагрузите страницу.

...