#python #python-3.x #django #python-requests
#python #python-3.x #django #python-запросы
Вопрос:
У меня есть мой веб-сайт Django, работающий на моем локальном сервере на порту 8000. Из отдельного файла python я хочу отправить post-запрос, запускающий одну конечную точку моего веб-сайта.
Но это невозможно сделать даже после добавления всей необходимой информации. Пожалуйста, помогите!!
import requests
URL = 'http://127.0.0.1:8000/api/org/create/'
client = requests.Session()
client.get(URL)
csrftoken = client.cookies['csrftoken']
data = dict(csrfmiddlewaretoken=csrftoken)
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'}
response = client.post(URL, data=data,cookies=client.cookies, headers=headers)
print(response.status_code)
Это выдает мне эту ошибку.
EC:Program FilesPython37libunittestcase.py:643: ResourceWarning: unclosed <socket.socket fd=420, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 10510), raddr=('127.0.0
.1', 8000)>
outcome.errors.clear()
======================================================================
ERROR: test_org_create (test_org.TestOrg)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_org.py", line 13, in test_org_create
csrftoken = client.cookies['csrftoken']
File "venvlibsite-packagesrequestscookies.py", line 328, in __getitem__
return self._find_no_duplicates(name)
File "venvlibsite-packagesrequestscookies.py", line 399, in _find_no_duplicates
raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
KeyError: "name='csrftoken', domain=None, path=None"
Как это решить?
Пожалуйста, прокомментируйте любую другую информацию.
Комментарии:
1. Почему вы хотите использовать
requests
module здесь?2. Что еще я могу использовать? На самом деле я пишу модульный тест для своего Rest API и записываю тесты в отдельный тестовый файл. Есть еще идеи?
3. Как насчет тестового клиента Django ?
4. На самом деле, я не могу использовать это, поскольку для этого требуются зависимости, такие как database engine, и я использую Dynamo DB извне. Вот почему я написал отдельный тестовый файл для тестирования своего веб-сайта. Многие люди сталкивались с одной и той же проблемой. Как отправить post-запрос на мой локальный сервер?
Ответ №1:
Итак, рассмотрим документы об ошибке и запросах из следующего раздела:
def _find_no_duplicates(self, name, domain=None, path=None):
"""Both ``__get_item__`` and ``get`` call this function: it's never
used elsewhere in Requests.
... blah blah ignore this, alot of stuff
:raises KeyError: if cookie is not found
... blah blah also ignore this, another lot of stuff
:raises KeyError: if cookie is not found
Кажется, что вам не хватает файла cookie. Вы проверили, правильно ли он задан в ответе, как вы предполагали?
Комментарии:
1. Хотя я добавил файлы cookie, но проверю, соответствуют ли они требованиям.