Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 7, 2017 16:06:47

Tseka
Зарегистрирован: 2016-12-27
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

Добрый день , есть админка для работы с заказами интернет магазина. Хочу с помощью POST поменять статус заказа , но не могу правильно всё оформить. Подскажите как правильно отправлять такие данные.

 import requests
s = requests.Session()
s.auth = ('manager', 'pass')
s.headers.update({'x-test': 'true'})
s.headers.update({
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0'})
data = {'status':'2'
        }
url0 = 'здесь адрес входа в админку'
url='здесь адрес заказа в админке'
s.get(url0,headers=s.headers)
r=s.post(url,data=data,headers=s.headers)

Cкрины
https://ibb.co/f2Lnwv
https://ibb.co/b4uEbv
https://ibb.co/f5Qy3a

Отредактировано Tseka (Сен. 7, 2017 16:12:36)

Прикреплённый файлы:
attachment contente-type.jpg (11,9 KБ)

Офлайн

#2 Сен. 7, 2017 16:21:56

keodomir
Зарегистрирован: 2017-06-14
Сообщения: 18
Репутация: +  2  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

А у вас авторизация проходит?

response = s.get(url0,headers=s.headers)
print(response.content)
тут есть примеры https://khashtamov.com/ru/python-requests/

Офлайн

#3 Сен. 7, 2017 16:53:04

Vintets
Зарегистрирован: 2016-07-05
Сообщения: 41
Репутация: +  6  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

Ты неправильно отправляешь. Там же Multipart-Encoded. Почитай в справке requests.

 files = {'status': '2'}
r = s.post(url, files=files)

У меня правильно принималось только так:
 files = {'status': ('', '2')}
r = s.post(url, files=files)
но там были и поля с файлами.


Не нужно в сессии писать headers=s.headers Это безсмысленно. headers и cookies и так передаются.
Если нужно в одном из запросов передать отличный от других headers, то можно указать его, чтоб не добавлять/удалять в сессионный.

Отредактировано Vintets (Сен. 7, 2017 16:54:47)

Офлайн

#4 Сен. 7, 2017 16:59:12

Tseka
Зарегистрирован: 2016-12-27
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

keodomir
А у вас авторизация проходит?
Да проходит.

Офлайн

#5 Сен. 7, 2017 17:37:28

keodomir
Зарегистрирован: 2017-06-14
Сообщения: 18
Репутация: +  2  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

Посмотрите, как выглядит запрос, когда вы нажимаете кнопку. Можно, например, через расширения браузера. Я использую это:
https://chrome.google.com/webstore/detail/jquery-ajax-capture/hgicjmfpmakeejdfemjhokokaijfdjng?utm_source=chrome-app-launcher-info-dialog

После этого можно будет легко сымитировать запрос.

Офлайн

#6 Сен. 7, 2017 17:44:37

Vintets
Зарегистрирован: 2016-07-05
Сообщения: 41
Репутация: +  6  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

Он же это всё сделал и приложил скрины.
По ним видно,что запрос Content-Type: multipart/form-data;

Офлайн

#7 Сен. 7, 2017 17:49:43

Tseka
Зарегистрирован: 2016-12-27
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

 <!-- Основная форма -->
<form method=post id=order enctype="multipart/form-data">
<input type=hidden name="session_id" value="rho48g04hq58qot9ir5j13h711">
<div id="name">
    <input name=id type="hidden" value="99153"/>
    <h1>Заказ №99153        <select class=status name="status">
            <option value='0' >Новый</option>
            <option value='1' >Принят</option>
            <option value='2' >Выполнен</option>
            <option value='3' selected>Удален</option>
        </select>

Когда отправляю POST то всегда в print(r.text) <option value='0' selected>Новый</option> .

Отредактировано Tseka (Сен. 7, 2017 17:52:05)

Офлайн

#8 Сен. 7, 2017 17:58:27

Vintets
Зарегистрирован: 2016-07-05
Сообщения: 41
Репутация: +  6  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

А почему ты отправляешь только одно поле?
Там же есть поле с номером заказа. Ещё ‘session_id’.
Как минимум нужно ещё их отправлять. Сервер разбирая ответ оттуда берёт данные куда ему в базу вставлять и к чему подвязывать.

Может там ещё что важное есть, что не влезло в скрин.

 files = {
        'id':('', 99153),
        'session_id':('', 'rho48g04hq58qot9ir5j13h711'),
        'status':('', 2)
        }

Где ты их будешь брать? Наверно парсить страницу, может session_id только там. А может и в куках.
Номер заказа есть наверно в параметрах твоего url.
В любом случае проще вытянуть со страницы, чтоб не ошибиться.

Отредактировано Vintets (Сен. 7, 2017 18:07:34)

Офлайн

#9 Сен. 7, 2017 18:05:53

Tseka
Зарегистрирован: 2016-12-27
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

Vintets
Может там ещё что важное есть, что не влезло в скрин.
 var formData = {
  "address": "Город,ул. Миргородская д.39-а, кв.8",
  "comment": "",
  "coupon_discount": "0.00",
  "delivery_id": "3",
  "delivery_price": "0.00",
  "discount": "0.00",
  "email": "",
  "id": "99153",
  "nalozhka": "1",
  "name": "Алла ",
  "note": "наложка(И) + Отправка 07,09",
  "np_city": "Марин",
  "np_warehouse": "Отделение №2 (до 30 кг): ул. Пирсовая, 2а",
  "order_option": "nalozhka",
  "payment_method_id": "5",
  "phone": "38099хххххххх",
  "purchases[amount][127654]": "1",
  "purchases[id][127654]": "127654",
  "purchases[price][127654]": "260.00",
  "purchases[variant_id][127654]": "26419",
  "related": "",
  "separate_delivery": "1",
  "session_id": "hov62ku9iolsrmcv7mhhri8fj6",
  "status": "2",
  "ttn": "2ХХХХХХХХХХХХ4",
  "user_id": ""
};
$.post('http://ххххххххххххххххххххххххх/index.php?module=OrderAdmin&page=2&id=99153', formData)
  .done (showResult)
  .fail(showError);

Вот с помощью приложения ,которое порекомендовал keodomir .
делал так s.post(url=url,data=formData) и s.post(url=url,files=formData)

Без изменений.

Отредактировано Tseka (Сен. 7, 2017 18:07:34)

Офлайн

#10 Сен. 7, 2017 18:18:18

Vintets
Зарегистрирован: 2016-07-05
Сообщения: 41
Репутация: +  6  -
Профиль   Отправить e-mail  

Как поменять статус заказа в админке с помощью requests.

Показывай новый код с передачей files.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version