I以下のモデルがあります:書き込みデータ(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からの私のモデルにデータを保存する方法の基本を理解しようとします
[...]
@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)
012:以下
curl -i -X POST --data "name=Odoo%20-%20Much%20Mystery,%20Wow&author_id=Doge" http://0.0.0.0:8069/test
私はそうのようfalse
に私のコントローラでcsrf
パラメータを設定することにより、これを行う方法を見つけたような要求
csrf=false
を設定しないようにする方法があるのかどうかは、私が読んだところでは一般的には悪い考えです。また、私はそれを取り除くために何が必要でしょう.sudo()
? csrf=false
を設定しないと、400 BAD REQUEST
にInvalid CSRF token
となります。 sudo()
を削除すると、500 INTERNAL SERVER ERROR
になります。 Odoo開発クックブックでは、コード例Iと仮定すると
のメソッドをモデル化するためにすべての私たちの呼び出し)我々は(sudoのに持っている理由、一例ではauth='none'
で、ユーザーの欠如でもあると言いますAPIからのPOSTリクエストを期待していますが、これをユーザーと関連付けることができるので、
sudo()
は必要ありませんか?私は非常にこの上の任意の説明をいただきありがとうございます。
UPDATE
だから、僕はthis(ライン817)が見つかりました:フォームはあなたが外部の第三者(例えばREST APIエンドポイント、支払いゲートウェイのコールバック)によってアクセスされている場合
- を
によってCSRF
の保護を無効にし(必要に応じて独自の保護を実装する)、csrf=False
パラメータをに渡す必要がありますデコレータ。私はsudo
について、一つだけ質問を開いたままに推測。
はイライラすることができます。 jsonrpcまたはxmlrpcを考慮しましたか? –