2017-01-04 1 views
0

У меня есть следующие модели:записи данных к модели из запроса 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.

+0

Работа через эти типы вопросов может быть неприятно. Вы рассматривали jsonrpc или xmlrpc? –

ответ

1

SUDO()

создает новую среду с представленным набором пользователей, использует администратор, если никто не предусмотрен (для обхода прав доступ/правил в безопасных условиях), возвращает копию записей он вызывается при использовании новой среды:

Odoo не позволяет публичным пользователям создавать, обновлять, удалять записи. Если мы хотим создать запись от публичных пользователей, тогда нам нужно создать запись с помощью sudo().

Создание записи объекта в качестве администратора

request.env['library.book'].sudo().create(vals) 

Я надеюсь, что это может помочь вам. для получения дополнительной информации вы можете перемещаться по следующим ссылкам: https://www.odoo.com/documentation/9.0/reference/orm.html

Спасибо

+0

Как это обеспечить, чтобы данные поступали от законного источника, а не из злонамеренного пользователя? Может ли кто-то вводить команды sql в POST? – user2757902

Смежные вопросы