読者です 読者をやめる 読者になる 読者になる

Pythonのbottleを使ってJSON-RPCでデータを送受信する

JavaScript畑のわたしは、Pythonの構文のカッチリさに食わず嫌いしていたのですが(JavaScript、自由度高すぎですよね・・・)、bottleフレームワークのお手軽さに一気に惹かれて、最近、Pythonばっかりになってしまいました。
辞書とか意外とJavaScriptと構文が同じだったりするし、取っ付き易いというのもありますね。。。

bottleって、現在、一番手っ取り早くアプリケーション・サーバーを作ることができる環境なのではないでしょうか。

node.jsをはじめて使ったときは、こりゃ便利だと思ったものですが、こっちの方が全然直感的に書けるし、なによりたくさん書いたときの見通しがよい。
(これはPythonのカッチリした構文に依る部分も大きいですが・・・)

で、今、スマホの側アプリを作っておりまして、そのサーバー側をこいつでやってやろうと思っています。

できるだけ画面遷移を起こさないようにXMLHttpRequestでjsonデータを送受信する形にしているので、ajax系での書き方を調べているのですが・・・・
bottleの使い方の記事自体は多くあるのですが・・・・
ajax系の情報が少ない。。。

なので、調べた内容を書いて行きたいと思います。

コード

クライアント側をこんな感じで書いているとします。
(ベタのコードを書くと面倒なので、JQueryでのコードを記載します。)

$.ajax({
    type: "POST",
    url: getUrl(url),
    data: JSON.stringify(data),
    dataType: 'json',
    contentType: "application/json",
    success: function(res){
        console.log(res);
    },
    error : function(req, stat,err) {
        console.debug('error:' + err.message);
        alert('エラーが発生しました。再読み込みを実行してください。');
    }
});

まずはライブラリをこんな感じでimportしてみます。

from bottle import post, request, HTTPResponse

クライアントはPOSTで送信をしているとします。
その場合・・・

@post(‘/path/to/call’)
def call()
    if request.is_ajax: #AJAXのデータなら
        print (JSON.stringify(request.json)) # request.jsonに辞書型で格納されている
        r = HTTPResponse(status=200, body=‘{“uho” : 1, “oho” : 2}’) #bodyにJSON形式で詰め込む
        r.set_header('Content-Type', 'application/json’)
      return r
  else:
      r = HTTPResponse(status=400)
      return r

うーん。お手軽。

© 2009-2017 Osajiru All Rights Reserved.