我写了一个基于Django&#ORM的REST API。这是我的REST API的一些示例
curl "http://example.com/api/pcserver?last_update__lt=2012-06-01 00:00:00&hostname__startswith=xen"
在服务器端,我使用queryset.filter()
函数处理所有GET
参数,并将结果queryset
转换为json
,然后返回给用户。< / p>
现在我无法将此API转换为基于网络的搜索表单。
我想要了解这个神奇的搜索表单:
AND
加入它们(我不需要OR
这些参数之间)__lt
,__gt
,__regex
那里有轮子所以我不必重新发明它吗?谢谢: - )
答案 0 :(得分:1)
@yegle
我建议使用这种媒体类型:http://code.ge/media-types/collection-next-json/它是:http://amundsen.com/media-types/collection/format/媒体类型的扩展,您可以毫无问题地实现目标。
请看这个文件:
{"collection": {
"version": 1.0,
"queries": [
{
"href": "http://service.com/my-resource",
"rel": "search",
"prompt": "Enter search string",
"data" : [
{
"name": "query",
"prompt": "Search query",
"required": true
}, {
"name": "gender",
"prompt": "Gender",
"list": {
"default": "female",
"options": [
{"value": "female", "prompt": "Female"},
{"value": "male", "prompt": "Male"}
]
}
}
]
}
]
}}
使用“queries”数组,您可以描述几个可以轻松转换为HTML表单的搜索模板。在每个查询对象中,您可以定义:
正如您从上面的示例中看到的,有两个查询参数 - “查询”和“性别”,其中“查询”参数可以转换为HTML.input,“gender”参数可以转换为HTML.select。
我希望我正确理解你的问题和目标。
答案 1 :(得分:0)
我不确定django工具。但是,您可以使用MYSQL的全文布尔搜索来实现上述大部分要求。请阅读以下链接并返回您的评论!
http://dev.mysql.com/doc/refman//5.5/en/fulltext-boolean.html
答案 2 :(得分:0)
或者,以某种黑客方式,使用Django Admin。您可以为目标模型自定义ModelAdmin
,并使用ChangeList
来处理w / querystring。以内置User
为例:
from django.contrib.admin.options.IncorrectLookupParameters
from django.contrib.admin.views.main import ChangeList
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
self = UserAdmin(User, None) # or taken from admin.site._registry if the model admin is registered
cl = ChangeList(request, User, self.list_display,
self.list_display_links, self.list_filter, self.date_hierarchy,
self.search_fields, self.list_select_related,
self.list_per_page, self.list_max_show_all, self.list_editable,
self)
# then cl.get_query_set would process querystring and generate the queryset
try:
cl.get_query_set(request)
except IncorrectLookupParameters:
'encounter an invalid lookup'