2016-07-21 2 views
0

Ich arbeite derzeit an einem Projekt basierend auf Django-Framework, die Apis erstellt werden müssen, die POST-Anfragen nur mit Ausnahme von ein oder zwei, die GET-Anfragen erhalten können. Eine dieser Apis, etwa/x /, wird bei der Einreichung des Formulars mit dem Methodentyp als POST aufgerufen. Die an dieses api/x/angehängte Ansicht ändert die Anforderung und muss dann eine andere API aufrufen (say/y /) oder anzeigen, die wiederum nur POST-Anfragen akzeptiert. Mein Code ist wie folgt:zum Umleiten an URL, die POST-Anfragen nur in Django akzeptiert

views.py

from django.template import RequestContext 
from django.shortcuts import render, redirect 
from django.contrib.auth import authenticate,login,logout 
from django.http import HttpResponseRedirect, HttpResponse 
from django.contrib.auth.decorators import login_required 
from rest_framework import status 
from rest_framework.decorators import api_view 
from rest_framework.response import Response 
import logging 

#print "__name__ : " + __name__ 
logger = logging.getLogger('django.request') 
logger_info = logging.getLogger('correct_info') 

#to_be_commented 
@api_view(['POST','GET']) 
def load_filter(request): 

     context = RequestContext(request) 
     if request.method == 'POST': 

       print request.data 
       filter_list = request.POST.getlist('profile') 
       print filter_list 

       stdd_filters = ['gender','state','country','examEnrolled','examDefault','examSelected'] 
       profFilters = {} 
       #profFilters['filters'] = {} 
       for flter in stdd_filters: 
         if flter in filter_list: 
           profFilters[flter] = request.POST.getlist(flter) 
         else: 
           profFilters[flter] = [] 
       print profFilters 
       if not request.POST._mutable: 
        request.POST._mutable = True 



       request.POST['filters'] = profFilters 

       if 'AND' in request.data: 
        print "TRUE AND" 
        **#problem here** 
        #return redirect('profile_filter_and') 
        return HttpResponseRedirect('../filtered/and/') 

     elif request.method == 'GET': 
      return render(request,"filters.html",{}) 

@api_view(['POST'])  
def profile_filter_and(request): 
     if request.method == POST: 
     #entire code 

Ich habe versucht, beide umleiten und HttpResponseRedirect Methoden aber beide die URL oder die View-Funktionen als GET-Request aufrufen, aufgrund derer ich die bekommen Folgefehler:

während ich die Umleitung als POST-Anfrage an die URL oder Ansicht möchte, da es nur POST-Anfragen akzeptiert. Ich habe versucht, im Internet nach dem gleichen zu suchen, aber habe nichts fruchtbares. Ich bin Anfänger bei der Entwicklung von Apis im Django. Also, bitte Hilfe.

Antwort

1

„Ich habe versucht, beide umleiten und HttpResponseRedirect Methoden aber beide rufen Sie die URL oder View-Funktionen als GET“

Dies liegt daran, Umleiten Daten POST ist schlechtes Design Wahl angesehen und wird nicht von Django in einem der unterstützten offensichtlicher Weg. Sehen Sie sich diese Antwort auf ähnliche Frage:

https://stackoverflow.com/a/3024528/4400065

Eine einfache Lösung für Ihr Problem sein würde, Daten Funktion übergeben, statt Senden Antoher HTTP-Anforderung.