У меня есть следующие модели:записи данных к модели из запроса POST (Odoo 9,0)
class LibraryBook(models.Model):
_name = 'library.book'
name = fields.Char('Title', required=True)
date_release = fields.Date("Release Date")
author_ids = fields.Many2many("res.partner", string="Authors")
Я новичок в Odoo и пытается понять основы того, как сохранить данные в моей модели с POST просить как следующий
curl -i -X POST --data "name=Odoo%20-%20Much%20Mystery,%20Wow&author_id=Doge" http://0.0.0.0:8069/test
Я нашел способ сделать это, установив параметр csrf
в мой контроллер для false
так:
[...]
@http.route('/test', type='http', auth='public',methods=['POST'], website=True, csrf=False)
def test(self, **kwargs):
record = request.env['library.book'].sudo()
record.create(kwargs)
Мне интересно сейчас, если есть способ избежать установки csrf=false
, так как я читал, что это вообще плохая идея. Кроме того, что мне нужно, чтобы избавиться от этого .sudo()
? Не устанавливается csrf=false
приводит к 400 BAD REQUEST
с Invalid CSRF token
. Удаление sudo()
приводит к 500 INTERNAL SERVER ERROR
. В Odoo Development Cookbook говорится в одном примере с auth='none'
Отсутствия пользователя также, почему мы должны Судо() все наши вызовы моделирующих методов в примере коде
Если предположить, что ожидал бы POST-запрос от API, можно ли связать его с пользователем, поэтому мне не нужно sudo()
?
Я был бы очень признателен за разъяснения по этому вопросу.
UPDATE
Так что я только что нашел this (строка 817):
- если форма доступ к внешней третьей стороне вас (например, REST API конечных точек, платежный шлюз обратного вызова) необходимо будет отключить CSRF
защиты (и при необходимости выполнить собственную защиту) на
, передавая параметрcsrf=False
наroute
декоратор.
, который я предполагаю, что листья только один вопрос открытым, относительно sudo
.
Работа через эти типы вопросов может быть неприятно. Вы рассматривали jsonrpc или xmlrpc? –