2012年2月22日水曜日

pyflakes.vimでリアルタイムダメ出しをもらう

VimでPython書いてる人しかうれしくないですけど、
pyflakes.vimというvimの拡張があります。

http://www.vim.org/scripts/script.php?script_id=2441

インストール方法、解凍したファイルの中身のftpluginの中身を
~/.vim/ftplugin 的なところに突っこむだけです。
(Windowsの人とかはしりません)

そしたら.pyなファイルを開くと、importしてるのに使ってないとか
変数に代入したのに使ってないとか、文法間違ってるwwwとか
完全に情弱とか教えてくれます。
ちなみに、Python2.5以上が使える環境で、
VimがPythonサポート付きでコンパイルされてないと多分だめです。

あとftpluginをしばらくftppluginだと思っていて、
ftp関係ねーじゃんと勘違いしてましたね。

まあ、どうでもいいけど。

2012年2月19日日曜日

DjangoのモデルをJSONエンコードしたいときにリレーション先を…

DjangoのモデルをJSONエンコードしたいときはこうすればいいんですが、
リレーションとかしちゃってると、そのモデルのpkなんかが出ちゃって困ることが多いです。

ちなみにお前の情報信じられないって人は、
ここ読めば書いてあるので、この先全部飛ばしても大丈夫です。

方法としては、リレーション先のモデルに、

def natural_key(self):
  return self.name

とか書くとpkのかわりにnameなんかを返してくれたりしますよ。
飛ばさずに読んで頂いてありがとうございます。

まあ、その程度です。

DjangoのモデルをJSONエンコードしたいとき

すっかり忘れてて3分程悩んだので。

import json

json.dumps(ModelClass.objects.all())

とかすると、is not JSON serializable 的な感じで怒られるので、

from django.core import serializers

json_serializer = serializers.get_serializer('json')()
json_serializer.serialize(ModelClass.objects.all(), ensure_ascii=False)

こんな感じにするといいかも。

まあ、いまさらかも。

2012年2月17日金曜日

FlaskのBlueprintsで静的なファイルの設定

Flaskで静的なファイルを扱うときは、
プロジェクトルートにstaticディレクトリを作って置くのが通常ですが、
Blueprintsを使ってモジュール化したいときには、
モジュール内にstaticを置きたくなったりします。

ドキュメントでは、これでいけそうですが、
Blueprint('admin', __name__,
          template_folder='templates',
          static_folder='static')

実際には、static_url_pathも指定しないとだめっぽいです。
Blueprint('admin', __name__,
          template_folder='templates',
          static_folder='static',
          static_url_path='/static/admin') # 2012/02/27修正

https://github.com/mitsuhiko/flask/issues/348
この辺でも言われてました。

まあ、そんなもんです。

2012年2月16日木曜日

CentOS6でscpコマンド

最小限でインストールすると多分入ってないので、

sudo yum install openssh-clients

ちなみに、ローカルからscpでコピーしようとしたときに、
サーバ側にも入ってないといけないということを知ったのでした。

http://www.openssh.org/ja/faq.html#3.7
お前なぞ信じられないという人向けに貼っておきますね。

まあ、そういうこと。

Flaskでセッションを永続化する

Flaskでセッション永続化するには、

from flask import app, session

# セッションを維持する時間(秒)
# 秒をintegerで渡せるのは0.8以降
PERMANENT_SESSION_LIFETIME = 600

@app.route('/')
def login(): 
  session.permanent = True
  # ログイン処理とかする
  # なんかリダイレクトとかする

session.permanent = True

を設定しないとブラウザを閉じるまでになっちゃう。

まあこれだけ。

requestsでpostのbodyに文字列を突っこむ

よくある感じだと、辞書を渡す。
import requests

url = 'http://localhost:8000'
requests.post(url, data={'spam': 1, 'egg': 2})

POSTのbodyに直接データを突っこみたいときは、
requests.post(url, data='spamegg')

ただそれだけ。

2012年2月4日土曜日