ページへ戻る
− Links
印刷
Google App Engine for Python その2
の編集 ::
NJF Wiki
xpwiki
:
Google App Engine for Python その2
の編集
# j2390dc0 の編集
ページ内容:
*セーブ処理 [#j2390dc0] 最後に保存処理です。ユーザーIDとパスワードをチェックしてデータを保存します。成功した場合は空のjsonデータを返しています。失敗した場合は-1を返しています。 class NjfSave(webapp2.RequestHandler): def post(self): self.response.headers['Content-Type'] = "text/plain; charset=utf-8" userId = self.request.get('userId') password = self.request.get('password') data = self.request.get('data') userData = getUserData(userId, password) if userData: jsonData = json.loads(data) deepJsonCopy(jsonData, userData.data) userData.put() self.response.write("{}") else: self.response.write("-1") ここでdeepJsonCopy関数は以下のようにjsonデータを再帰的にコピーする関数です。 def deepJsonCopy(fromData,toData): for key, value in fromData.iteritems(): if isinstance(value,dict): if not toData.has_key(key): toData[key] = {} deepJsonCopy(fromData[key],toData[key]) else: toData[key] = fromData[key] pythonのjsonライブラリにはディープコピー関数があるのですが、入れ子になったオブジェクトには対応していないようなので自作しています。 この関数を使うことによって、必要なデータだけをサーバーに送って保存することが可能になります。 GAEでは転送量も課金対象になります。また、そうで無くてもやはり転送量は少なければ少ないほどユーザーの待ち時間は少なくなります。保存データが多い場合にはなるべく差分だけを送信した方が良いでしょう。 しかし、差分だけを送信するとクライアント側とサーバー側で同期が狂いやすくなります。たとえば2つ同時にブラウザを立ち上げてそれぞれで矛盾するようなデータを送信すると、両方サーバーで保存されてしまいます。このような場合にどうするかを考慮する必要が出てきます。 毎回全てのデータを上書きするのならその心配はありません。もしデーター量が少ないならつねに全データを送るのをお勧めします。 以上でサーバーサイドは終わりです。次にクライアントサイドを解説します。
編集の要約:
Q & A 認証:
ページ更新時は次の質問にお答えください。(プレビュー時は必要ありません)
Q:
「東京」の読みがな?(ひらがなで)
A:
お名前:
タイムスタンプを変更しない
テキスト整形のルールを表示する
[1]
Links list
(This host) = https://njf.jp
(This host)
/cms/modules/xpwiki/?cmd=edit&help=true&page=Google%20App%20Engine%20for%20Python%E3%80%80%E3%81%9D%E3%81%AE%EF%BC%92