0

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からユーザーに返します。

現在、この API を Web ベースの検索フォームに変換する際に問題が発生しています。

この魔法の検索フォームについて私がしたいこと:

  1. javascriptを使用してクエリパラメーターを動的に追加/削除し、それらを結合します(これらのパラメーター間ANDは必要ありません)OR
  2. モデルに基づいて検索するフィールドを選択するためのドロップダウン メニューを提供する
  3. __lt、、などの演算子の選択の__gtサポート__regex

再発明する必要がない車輪はありますか? ありがとうございました:-)

4

3 に答える 3

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 フォームに簡単に変換できるいくつかの検索テンプレートを記述できます。各クエリ オブジェクトで、以下を定義できます。

  • 検索URI
  • 「フォーム」のタイトル (つまり、プロンプト)。と
  • 要件が異なる任意の数のクエリ パラメータ。

上記の例からわかるように、"query" と "gender" の 2 つのクエリ パラメータがあり、そのうちの "query" パラメータは HTML.input に、"gender" パラメータは HTML.select に変換できます。

あなたの質問と目標を正しく理解できたことを願っています。

于 2012-06-04T10:21:34.727 に答える
0

django-filterを見てください

または、何らかのハッキング方法で、Django Admin を使用します。ModelAdminターゲット モデル用にカスタマイズし、ChangeListクエリ文字列を処理するために使用できます。ビルトイン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'
于 2012-06-04T13:42:54.943 に答える
0

django ツールについてはよくわかりませんが、MYSQL の全文ブール検索を使用して、上記の要件のほとんどを達成できます。以下のリンクを参照し、コメントを元に戻してください!

http://dev.mysql.com/doc/refman//5.5/en/fulltext-boolean.html

于 2012-06-04T10:09:11.583 に答える