【发布时间】:2017-10-30 21:26:12
【问题描述】:
我正在 Django 中实现一个搜索表单。我可以执行 POST 或 GET 请求。每个都有自己的用例(POST 请求,如果我想更改服务器上的数据,GET 请求,如果我只想从服务器获取数据)。
- 通过 POST 请求(搜索关键字在 URL 中不可见,而是在 request.POST 中的 dict 中可见);缺点:我无法为搜索添加书签
- 通过GET请求(搜索关键字在URL中可见,例如
localhost:8000/books/?author=schultz);缺点(?):?author=schultz部分不能被 URL 处理程序处理(参见下面的 [2])。我需要在我的视图函数中读取来自request.GET.get("author", None)的数据。 - 或直接在 URL 中像这样:
localhost:8000/books/search/author/schultz?
[1] 中的作者说,Django 处理 URL 的首选方式不是通过 GET(像这样:/category_check_view/?item_id=2,而是像这样 /category_check_view/2)
如果我想实现这样的搜索:localhost:8000/books/author/schultz,那么我必须处理一个 GET 请求,通过request.GET.get("author", None) 读取参数?author=schultz,并在我看来从这个 URL localhost:8000/books 进行重定向(其中我有一个表单和一个 GET 请求)到这个localhost:8000/books/author/schultz。
这种方法有意义吗?还是我把事情复杂化了?只需将其留在 GET 请求中即可实现我的搜索表单?
[1] Yuval Adam 在this post 中说
GET 参数不由 URL 处理程序处理,而是通过 直接指向在 request.GET 的视图中可访问的 GET 参数字典。
处理 URL 的 Django(即首选)方法是第一种。
【问题讨论】:
-
我不明白您将如何在搜索时修改数据。大多数用例中的搜索都是使用 GET 请求完成的。
-
我没说要修改数据。只是可以通过 POST 请求来完成,如果我不希望搜索关键字显示在 URL 或日志文件等中
-
我看不出需要重定向。搜索的重点是它可以接受多个参数,并显示组合查找的结果。无需重定向到任何地方。
-
所以你总是使用 GET 请求?