1. 使用 Django 的 Filters
和 Q
对象实现一个简单的搜索功能
下面是一个用 Django 的 Filters
和 Q
对象实现的简单的搜索功能:
template 文件:
q
views.py
文件:
def search_results_view(request):
query = request.GET.get('q')
blog_list = Blog.objects.filter(
Q(title__icontains=query) |
Q(intro__icontains=query)
)
可以看到, 标签有一个
method
属性值是 get
,它是用来指定搜索时的请求类型的。而 action
属性是用来指定表单中的数据应该发到哪一个 url
。 标签内部的
标签是用来让用户输入搜索关键词的。
2.1 method
属性:GET 和 POST
提交表单数据时只会用到 GET 和 POST 两种 HTTP 请求方法。
2.1.1 GET
- GET 方法提交的数据会被附加到 URL 中,请求结束后,可以看到在 URL 后有一个问号
?
,在问号后面还有以&
符号分隔的键值对。 - GET 应该只被用于获取数据。
- GET 方法不适用于提交密码的表单,因为这样的话密码会编码到发起请求的 URL 中,存在泄露密码的风险。
- GET 方法也不适用于处理大量的数据和二进制数据,因为 GET 可提交的数据量受到 URL 长度的限制,虽然 HTTP 协议规范没有对 URL 长度进行限制,但是不同的浏览器和服务器都对它有所限制。
- GET 请求存在的安全隐患:攻击者很容易通过模拟请求来访问系统的敏感数据。
2.1.2 POST
- 任何更改数据库状态的请求都应使用POST, 比如创建,编辑或删除数据。
2.2 action
属性
这个属性指定了表单中的数据所要发往的 URL,它的值必须是一个有效的 URL。如果没有提供此属性,那么数据将被发送到这个表单所在页面的 URL。
