Python Django:通过GET请求、POST请求或URL进行搜索?
我正在Django中实现一个搜索表单。我可以做一个POST或GET请求。每个都有自己的用例(POST请求,如果我想更改服务器上的数据,GET请求,如果我只想从服务器获取数据)Python Django:通过GET请求、POST请求或URL进行搜索?,python,django,Python,Django,我正在Django中实现一个搜索表单。我可以做一个POST或GET请求。每个都有自己的用例(POST请求,如果我想更改服务器上的数据,GET请求,如果我只想从服务器获取数据) 通过POST请求(搜索关键字在URL中不可见,而是在dict in request.POST中可见);缺点:我无法将搜索添加到书签中 通过GET请求(对于intancelocalhost:8000/books/?author=schultz,搜索关键字在URL中可见);缺点(?):URL处理程序无法处理部分?author
- 通过POST请求(搜索关键字在URL中不可见,而是在dict in request.POST中可见);缺点:我无法将搜索添加到书签中
- 通过GET请求(对于intance
,搜索关键字在URL中可见);缺点(?):URL处理程序无法处理部分localhost:8000/books/?author=schultz
(请参见下面的[2])。我需要从我的视图函数中的?author=schultz
读取数据request.GET.GET(“author”,None)
- 或者直接在URL中,比如:
localhost:8000/books/search/author/schultz
/category\u check\u view/?item\u id=2
,而是通过GET处理URL(例如:/category\u check\u 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] 他说 GET参数不是由URL处理程序处理的,而是传递的 直接到GET param dict,可在request.GET视图中访问 Django(即首选)处理URL的方法是第一种
[2] 首先,GET用于读取数据,POST用于创建。由于搜索是读取数据的一种形式,您将使用GET 这就引出了url的问题。正如您所提到的,在Django中有两种不同的方法通过url传递参数:
url(r'^books/author/(?P<author>\w+)/$',
'yourviewname',
name='author_search'
)
您的URL将具有以下形状:/books/?author=author\u name\u here&other=other\u param
-@Quentin-
有关上述两种方法的简短实现示例,请查看也可用的是:
from django.urls import path
import <your_view> from views.py
path('news/<str:author>/', <your_view>.as_view())
从django.url导入路径
从views.py导入
路径('news/',.as_view())
我不明白您在搜索时将如何修改数据。在大多数用例中,搜索都是使用GET请求完成的。我没有说我想修改数据。只是,如果我不希望搜索关键字显示在URL或日志文件中,可以通过POST请求来完成。etcI看不到重定向的必要性。搜索的要点是它可以接受多个参数,并显示组合查找的结果。无需重定向到任何地方。因此,您总是使用GET请求?非常好的答案!谢谢!如果我想在URL中使用参数实现它(您的第一个示例),逻辑是这样的吗?我会有一个books/
页面,其中有一个搜索表单。现在提交搜索表单后,我会重定向到books/author/(searchword)
?或者我如何连接这两个URLbooks/
和books/author/(searchword)
-我并不是说我更喜欢用那种方式进行搜索。只是想知道哪种方式是惯用的方式。@Ugur您不需要重定向到任何地方!您的视图只需返回查询结果即可(这两种情况下我都是这样做的!):)但搜索发生在本页books/
。如果视图从request.GET.GET(“searchword”,None)
读取搜索词,我的URL(突然)如何显示books/author/(searchword)
。即使搜索发生在本页books/author/
,提交后,URL如何反映books/author/(searchword)
?我从根本上遗漏了什么吗?:)@Ugur看看这里:它可能会帮助你:)
from django.urls import path
import <your_view> from views.py
path('news/<str:author>/', <your_view>.as_view())