2015-11-06 11 views
5

Non riesco a registrare uno APIView nelle mie rotte URL.Struttura del resto di Django APIView registro route

Codice da vista:

class PayOrderViewSet(APIView): 
    queryset = PayOrder.objects.all() 

Codice da URL:

router = routers.DefaultRouter() 
router.register(r'document/payorder', PayOrderViewSet) 

Questo URL appena creato non esiste affatto.

Qual è la soluzione per questo?

+0

Aggiungi una barra finale alla fine della URL nel browser e vedere se funziona. – Cheng

+0

Ancora lo stesso, non trovato:/ –

+0

puoi pubblicare il tuo urls.py? – Cheng

risposta

3

I router non funzioneranno con APIView. Funzionano solo con ViewSets e i loro derivati.

È probabile che desidera:

class PayOrderViewSet(ModelViewSet): 
+0

"I router non funzioneranno con APIView" Eventuali citazioni? – nehemiah

+1

Non c'è bisogno di citare. 'Routers' si aspetta API/dati forniti da' Viewset' ma non sono disponibili con 'APIView'. – Linovia

5

Router e APIViews (generici o non) sono due modi diversi per creare endpoint API. I router funzionano solo con le viste.

Nel codice, si sta provando a creare un viewet per un router il codice sta estendendo la classe APIView.

Il problema sarà risolto con quanto suggerito da @linovia nel suo asnwer. Suggerirei che sarebbe una buona idea capire la differenza tra questi due.

GenericViewSet eredita da GenericAPIView ma non fornisce alcuna implementazione delle azioni di base. Solo solo get_object, get_queryset.

ModelViewSet eredita da GenericAPIView e include implementazioni per varie azioni. In altre parole, non è necessario implementare azioni di base come elenco, recupero, creazione, aggiornamento o distruzione. Ovviamente puoi sovrascriverli e implementare la tua lista o i tuoi metodi di creazione.

Per saperne di più su viewsets e Generic Class Based APIViews: