0

我为在我的电子商务网站中搜索一个产品做了一个简单的视图。

在我想将搜索到的参数(使用创建查询集)保存在特定模型中以获取搜索历史记录之后,视图(API)等待 GET 参数(如http://example.com/search/12345 )。

但是,如果我从上一个 Firefox 版本调用视图/api,我会在数据库中获得两条记录,而 Edge 中只有一条。

深化主题的问题是 HTTP RFC on Get 方法所期望的幂等性。有些浏览器可以做不止一个请求...

我需要为搜索 api 保留 GET 方法,但我需要保存搜索到的字符串。

我可以使用 GET 参数进行搜索并将其保存在数据库中吗?没有 CSRF/Cookie/用户代理?

为了更好地理解代码非常简化:

# 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 ... :-)')
4

1 回答 1

0

我解决了这个问题。我的模板中有一个错误的 img 标签。

违规元素:

<img src="#" />

当 Firefox 在 DOM 中读取此元素时,重新加载页面。

于 2020-04-20T13:31:45.710 回答