2016-07-19 8 views
-1

Ich richte eine Django/Django Rest Framework API ein und die meisten Abfragen werden mithilfe von Parametern innerhalb der URL generiert. Das Muster folgt {param name}/{param value}.Django - Parsing URL in beliebiger Reihenfolge?

Zum Beispiel:

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

Die Parameter werden mit Regexes geparst und gesendet Methoden wie im Tutorial anzuzeigen. Jede dieser drei hat eine separate Ansichtsmethode.

ich neugierig bin, ob es einen Weg gibt, eine Ansicht Methode zu schreiben, die alle diese Parameter erfassen kann, unabhängig von der Reihenfolge, wie sie in Beispiel dargestellt werden.

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

alle einen Blick gehen Methode, die das Benutzermodell/die Tabelle filtert. Ist es möglich, einen präzisen Regex/URL-Resolver zu schreiben, der dies tut, ohne eine URL-Musterübereinstimmung schreiben zu müssen, die alle möglichen Iterationen abdeckt?

Antwort

1

Ich würde stattdessen Abfrage String empfehlen.

query: /users/[email protected] & name = Doge

Dann in Ihren Ansichten:

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

Ihr URL-Muster würde so einfach aussehen:

r'^/users/$' 

Oder Sie könnten tun:

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

Aber dann müssen Sie für alle Fälle in der Ansicht überprüfen:

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

ich dies als Backup gedacht hatte, aber ich bin auch gespannt, ob es stricly innerhalb der URL machbar ist. –

+0

aktualisierte meine Antwort :) – Eska

Verwandte Themen