Django POST URL error - PullRequest
       3

Django POST URL error

16 голосов
/ 16 марта 2012

Я пытаюсь создать REST Api в Django, выводя Json.У меня проблемы, если я делаю POST-запрос, используя curl в терминале.Я получаю ошибку:

Вы назвали этот URL через POST, но URL не заканчивается косой чертой, и у вас установлено APPEND_SLASH.Django не может перенаправить на косую черту при сохранении данных POST.Измените вашу форму на 127.0.0.1:8000/add/ (обратите внимание на косую черту) или установите APPEND_SLASH = False в настройках Django.

Мой url.py равен

    from django.conf.urls.defaults import patterns, include, url
import search

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',

    url(r'^query/$', 'search.views.query'),
    url(r'^add/$','search.views.add'),
)

и мои взгляды

# Create your views here.
from django.http import HttpResponse
from django.template import Context,loader
import memcache
import json

def query(request):
    data=['a','b']

    mc=memcache.Client(['127.0.0.1:11221'],debug=0)
    mc.set("d",data);

    val=mc.get("d")

    return HttpResponse("MEMCACHE: %s<br/>ORIGINAL: %s" % (json.dumps(val),json.dumps(data)) )

def add(request):
    #s=""
    #for data in request.POST:
    #   s="%s,%s" % (s,data)
    s=request.POST['b']
    return HttpResponse("%s" % s)

Я знаю, что это не дает Json, но у меня возникает проблема, упомянутая выше, когда я делаю POST-запрос в терминале

curl http://127.0.0.1:8000/add/ -d b=2 >> output.html

ЯВпрочем, новичок в Django.

Ответы [ 3 ]

28 голосов
/ 17 марта 2012

Сначала убедитесь, что вы отправляете запрос на http://127.0.0.1/add/, а не http://127.0.0.1/add.

Во-вторых, вы также можете освободить представление от обработки csrf, добавив декоратор @csrf_exempt - поскольку вы не отправляете соответствующий токен из cURL.

20 голосов
/ 16 марта 2012

Для согласованности URL-адреса Django имеет параметр APPEND_SLASH, который всегда добавляет косую черту в конец URL-адреса, если он не был отправлен таким образом с самого начала.Это гарантирует, что /my/awesome/url/ всегда подается с этого URL, а не /my/awesome/url и /my/awesome/url/.

Однако Django делает это, автоматически перенаправляя версию без косой черты вконец к одному с косой чертой в конце.Перенаправления не несут с собой состояние запроса, поэтому, когда это происходит, ваши данные POST удаляются.

Все, что вам нужно сделать, это убедиться, что при отправке вашего POST вы отправляете его в версию скосая черта в конце.

0 голосов
/ 04 марта 2019

ДЛЯ ПОЛУЧЕНИЯ ==> http://127.0.0.1:8000/create?name=wpwqekhqw/

Для POST ==> http://127.0.0.1:8000/create/?name=wpwqekhqw/

Вы должны добавить '/' после создания в POST ... запрос

...