【发布时间】:2016-07-21 17:36:19
【问题描述】:
我目前正在开发一个基于 Django 框架的项目,该项目需要构建仅接受 POST 请求的 API,除了一两个可以接收 GET 请求的 API。
其中一个api,比如/x/,在提交表单时调用,方法类型为POST。附加到此 api /x/ 的视图修改了请求,然后需要调用另一个 API(例如 /y/)或再次仅接受 POST 请求的视图。
我的代码如下:
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
我尝试了重定向和 HttpResponseRedirect 方法,但它们都将 url 或视图函数调用为 GET 请求,因此我收到以下错误:
HTTP 405 Method Not Allowed
Allow: POST, OPTIONS
Content-Type: application/json
Vary: Accept
{
"detail": "Method \"GET\" not allowed."
}
而我希望将重定向作为对 url 或视图的 POST 请求,因为它只接受 POST 请求。我曾尝试在互联网上搜索相同的内容,但没有任何成果。我是 Django 开发 API 的初学者。
【问题讨论】:
标签: python django redirect http-post