Данные POST от Python до Django - PullRequest
0 голосов
/ 20 марта 2019

Я новичок в Джанго. Я пытаюсь отправить данные JSON из Python на сайт Django.

import requests  
import json
url = "http://127.0.0.1:8000/esave/search/"
data = {'name':'bruce', 'drink':'cola', 'age':19}
r=requests.post(url, data=data)
got_response = r.text
print(got_response)

Это то, что я получил после некоторых поисков. и, с моей точки зрения, я получил этот код, но я не уверен, насколько он хорош.

def search(request):
if request.method == 'POST':
    data=json.loads(request.body.decode("utf-8"))
    name = data['name']
    #doing something like create and update database
    #Dont know what to return, just returning the name for verification if nothing return I got error 
    return HttpResponse("name")

когда я запускаю сервер на локальном хосте и запускаю код python для публикации данных, это то, что я получаю.

March 20, 2019 - 15:53:28
Django version 2.1.5, using settings 'jazztest.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Forbidden (CSRF cookie not set.): /esave/search/
[20/Mar/2019 15:53:43] "POST /esave/search/ HTTP/1.1" 403 2868

и в моем терминале Python я получил это.

<code>$ python dumper.py

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="robots" content="NONE,NOARCHIVE">
  <title>403 Forbidden</title>
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; background:#eee; color:#000; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; margin-bottom:.4em; }
    h1 span { font-size:60%; color:#666; font-weight:normal; }
    #info { background:#f6f6f6; }
    #info ul { margin: 0.5em 4em; }
    #info p, #summary p { padding-top:10px; }
    #summary { background: #ffc; }
    #explanation { background:#eee; border-bottom: 0px none; }
  </style>
</head>
<body>
<div id="summary">
  <h1>Forbidden <span>(403)</span></h1>
  <p>CSRF verification failed. Request aborted.</p>


  <p>You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.</p>
  <p>If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for &#39;same-origin&#39; requests.</p>

</div>

<div id="info">
  <h2>Help</h2>

    <p>Reason given for failure:</p>
    <pre>
    CSRF cookie not set.
    

Как правило, это может произойти, если имеется подлинная подделка межсайтовых запросов или когда <а HREF = "https://docs.djangoproject.com/en/2.1/ref/csrf/">Django's Механизм CSRF не был использован правильно. Для POST-форм вам необходимо обеспечить:

  • Ваш браузер принимает файлы cookie.
  • Функция просмотра передает request шаблону render способ.
  • В шаблоне есть тег шаблона {% csrf_token %} внутри каждой формы POST, который предназначается для внутреннего URL.
  • Если вы не используете CsrfViewMiddleware, то вы должны использовать csrf_protect для любых представлений, использующих csrf_token Шаблонный тег, а также те, которые принимают данные POST.
  • Форма имеет действительный токен CSRF. После входа в другой браузер После входа в систему или нажатия кнопки «Назад» может потребоваться перезагрузить страница с формой, потому что токен поворачивается после входа в систему.

Вы видите раздел справки на этой странице, потому что у вас есть DEBUG = True в вашем файле настроек Django. Измените это на False, и будет отображаться только начальное сообщение об ошибке.

Вы можете настроить эту страницу, используя параметр CSRF_FAILURE_VIEW.

Насколько я знаю, эта проблема из-за токена CSRF. Подобные проблемы возникают даже тогда, когда я работал с формами, но я получил разрешение с помощью

{% csrf_token %}

Теперь, что я должен сделать, чтобы отправлять данные из кода Python в Django. Спасибо.

...