2016-07-19 20 views
-1

私はDjango/Django Rest Framework APIを設定しており、ほとんどのクエリはURL内のパラメータを使用して生成されます。パターンは{param name}/{param value}に従います。例えばDjango - 任意の順序でURLを解析しますか?

users/ 
users/id/{id}/ 
users/name/{name}/ 
users/group/{group}/name/{name}/ 
users/group/{group}/email/{email}/ 

パラメータは、正規表現を用いて解析され、チュートリアルのような方法を表示するために送信されます。これらの3つのそれぞれは別々のビューメソッドを持っています。

これらのパラメータのすべてを取り込むことができます1つのビューメソッドを作成する方法がある場合、私は、どんなに順序は、彼らがで好奇心提示されています例:。

users/id/{id}/ 
users/group/{group}/ 
users/name/{name}/ 
users/email/{email}/ 
users/email/{email}/group/{group} 

は、すべて1つのビューに行くだろうメソッドを使用して、Userモデル/テーブルをフィルタリングします。すべての可能な反復をカバーするURLパターンマッチを書く必要なしに、これを行う簡潔な正規表現/ URLリゾルバを書くことは可能ですか?

答えて

1

代わりにクエリ文字列を使用することをお勧めします。

クエリ:/users/[email protected] &名=元首あなたの意見ではその後

r'^/users/$' 

email = self.request.query_params.get('email', None) 
name = self.request.query_params.get('name', None) 

があなたのURLパターンが同じようになります

または可能な操作:

r'^/users/{paramtype}/{param}/({subparamtype}/{subparam})?$' 

しかし、その後、あなたはあなたのビュー内のすべてのケースをチェックする必要があります。

if paramtype == 'id': # query on id in param 
elif paramtype == 'email' # query on email in param 
elif ... 
+0

私はバックアップとしてこれを検討していたが、私はまた、URL内striclyなんとかですかどうかを確認するために好奇心旺盛です。 –

+0

更新された私の答え:) – Eska

関連する問題