【问题标题】:To redirect to URL which accepts POST requests only in Django重定向到仅在 Django 中接受 POST 请求的 URL
【发布时间】: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


    【解决方案1】:

    “我已经尝试过重定向和 HttpResponseRedirect 方法,但它们都将 url 或视图函数称为 GET”

    这是因为重定向 POST 数据被认为是糟糕的设计选择,并且 Django 不以任何明显的方式支持。查看类似问题的答案:

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

    解决问题的一个简单方法是将数据传递给函数,而不是发送另一个 HTTP 请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 2014-08-02
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多