Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

Mayaaのような事をPython+Django+Dojo+JSONでやってみる

JSONを使ってHTMLにデータを表示させてみるサンプル。
ふん!JSP(ASP,PSP)なんてもうつかわん!
Mayaaっぽいことをjavascriptでやってみる。
都合上、Djangoで実験。
まずHTMLから

form.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>sample</title>
<script type="text/javascript" src="/src/js/dojo.js"></script>

<script type="text/javascript">
  var djConfig = {isDebug: true};
  //djConfig.debugAtAllCosts = true;
</script>
<script type="text/javascript">
      dojo.require("dojo.io.*");
      
      function test(doc){
        d = doc;
        var bindArgs = {
          url: "./getjson/",
          mimetype: "text/json",
          load: function(type, json, http) {
            dojo.debug("http:", http);
            dojo.debug("response:", http.responseText);
            dojo.debug("state:", http.readyState);
            dojo.debug("--------");
            dojo.debug("json:", json);
            dojo.debug("- Key/value pairs -------");
            for(var key in json) {
              var node = d.getElementById(key);
              if(node != null){
                node.innerHTML = json[key];
              }              
              dojo.debug(key, ":", json[key]);
            }
          }
        };
        var canBind = dojo.io.bind(bindArgs);
      }
</script>
</head>
<body>
<p>マッピングサンプル</p>
last_name :
<input id="last_name" type="text" />
<p />
first_name :
<input id="first_name" type="text" />
<p />
<input type="button" value="ボタン" onclick="test(document);" />
</body>
</html>

DojoJSONを取得してきてマッピング
次、Djangoで動かすためにDjangoのurl.py

url.py

from django.conf.urls.defaults import *
from django.conf.settings import MEDIA_URL, MEDIA_ROOT

urlpatterns = patterns('',
    # Example:
    (r'^edit/form*', 'edit.core.views.main.form'),
    (r'^edit/getjson/', 'edit.core.views.main.getjson'),
)

view.pyでJSONを返すように実装。

view.py

def form(request):
    return render_to_response('edit/form')

def getjson(request):
    s = """
{
    now: new Date(),
    last_name: "fucker",
    first_name: "sucker",
    username: "mopemope",
    passwd: "mother fucker",
    arrayOfNums: [1, 2, 3, 4, 5],
    toString: function() { return this.last_name + ", " + this.first_name; }
}   
    """
    return HttpResponse(s)

これで終わり。
2バイト文字系はエンコードしないと文字化けします。
ちょっと考慮する必要アリです。
ちなみにjson-pyを使っていれば辞書を渡してやればjson文字列が返りますのでこれでいけます。

return HttpResponse(json.write(object))

JSON-RPCを使ってる方は以下を参考にしてみて下さい。
http://memo.jj-net.jp/12
(特にZOPE使ってる方向けかな)

うくく。