Я новичок в Джанго. Я пытаюсь отправить данные 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 'same-origin' 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.
Спасибо.