ラベル django の投稿を表示しています。 すべての投稿を表示
ラベル django の投稿を表示しています。 すべての投稿を表示

2013年1月21日月曜日

C#とipythonでDjango

VS2012 Professional版使っていれば、PTVSをインストール、
VS2012 express版でも別途shellをインストールすれば済む話じゃないかっという話だけど、
今回は自力でやってみる方法を選んでみた。

 1.インストール
  ironpython、easy_installなど必要なものを順次インストールしていく。
 IronPython
  http://ironpython.codeplex.com/easy_setup
  http://peak.telecommunity.com/dist/ez_setup.py  

2.環境変数に下記のパスを追加。
 Path
   C:\Program Files (x86)\IronPython 2.7\
   C:\Program Files (x86)\IronPython 2.7\Scripts\
   C:\Program Files (x86)\IronPython 2.7\Lib\
   C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\

  PythonHome
   C:\Program Files (x86)\IronPython 2.7\


3.モジュールを入れる。
 ipy64 Scripts\easy_install sqlite ipy64 Scripts\easy_install django


4.このままだとunicodeエラーが発生するので、djangoにパッチをあてる。 https://bitbucket.org/jdhardy/django-ironpython/commits/b70eeacda60c


.\lib\site-packages\django-1.4.3-py2.7.egg\django\utils\funcional

---95行目付近
 - assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
 + assert (str is unicode) or not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
---

5.プロジェクト作成
 ipy64 -X:FullFrames Scripts\django-admin.py startproject project_name

 ipy64の引数「-X:FullFrames」これが入ってなくて一度つまづいた所である。

詳しくはipy64 -hで参照すること。

2012年9月19日水曜日

djangoでjsonpを返す

クロスドメインでjsonデータのやり取りするアプリを開発していた時に
ブラウザからアクセスするとちゃんと返ってくるのに、
「$.getJSON」や「$.ajax」を使うとHTTPレスポンス200なのにエラーが返ってくる現象に出くわした。

しばらく悩んでたらajaxのポリシーでクロスドメインにアクセスするときはjsonpを使う必要があるようだった。

どういったものなのかというと、通常はjsonそのまま渡すのに対して、
jsonpは、queryに書かれたcallback名で囲ってapplication/javascriptで返すようになる。


jsonの場合
 http://127.0.0.1/sample/

 {data1:1, data2:"hello"}

jsonpの場合
 http://127.0.0.1/sample/?callback=jsonp_1234&_=2345

 jsonp_12345({data1:1, data2:"hello"});



実装方法は下にまとめてみた。

まずはjavascript側から


$.getJSON('http://127.0.0.1/sample/?callback=?', function(data){console.dir(data);});

$.ajax({url:'http://127.0.0.1/sample/', dataType='jsonp', success: function(data){console.dir(data);});


次にサーバ側(django)もjsonpに対応

def JSONP(f):
    """
        Usage:

        @JSONP
        def func(request):
            dic = { 'data1': 1, 'data2': 'hello'}
            return dic
    """
    def _func(*args, **kwargs):
        request = args[0]
        callback = request.GET.get('callback', None)
        dic = f(request)
        ret = json.dumps(dic)
       
        if callback is None:
            ct = 'application/json'
        else:
            ret = '%s(%s);' % (callback, ret)
            ct = 'application/javascript'

        return HttpResponse(ret, mimetype=ct)

    return _func

2012年8月31日金曜日

django + jquery mobileで組込みアプリを作る(準備編)

産業関係で未だにMS-DOSで動くシステムなどがありますが、
20年続いたシステムでもハードウェア面でメンテナンスが出来なくなって
最新のシステムに置き換える事例などがあるかと思います。
今から作るなら.NETを使って実装が王道だけど、今回はWindows、Linux両方で動く
Pythonを使った方法を考えてみました。

 仕様イメージは組込み開発でWindowsやLinuxが動くパソコンを使って装置を動かすというもの。
パソコンに求められるものといえば、
 ・シリアルポートやLANを使う
 ・画面で運転状況を表示する
 ・リアルタイム制御を求める

この3点くらいだと思います。
どういったものを使えば出来るかというと、
 1つ目、シリアルポートやLANは、pyserial、twistedなどを使うことで解決。
 2つ目、最近の流れに沿って、スマートフォンで操作できるように、WEBアプリ開発でDjango、jQuery mobileを使えば対応できる。
 3つ目、WEBフレームワークDjangoのバックグラウンドにハード制御を行うスレッド又はプロセスを常駐させることで対応できる。

今回はDjangoを使うので、管理画面が最初からついてきます。しかもデータ操作が可能なものです。
それを使えばパラメータ設定などはDjangoの機能を使えば簡単に出来るし、データベースをSqlite3に
すれば1ファイルで管理できるメリットずくめ。後はWEBサーバが必要になるのでnginxを使うとします。

ここまでの構成をまとめると、
 nginx + django + jquery mobile + pyserial + twisted + sqlite3


だいぶ使うものが増えてきました。

[画面周り]
 ・ブラウザ経由(ネットワーク経由で遠隔操作なども可能)
 ・スマホ対応のライブラリjquery mobileを使うことで幅広くなる
 ・リアルタイム性はajaxを用いて、常時ハードウェアのステータスを拾うようにする。

[制御]
 ・WEBアプリ(画面周り)と切り離してバックエンドで動かすドライバ的なものにする。
 ・URL経由でハードを動かしたり、ステータスを取得できるようにする。

[パラメータ]
 ・sqlite3で管理する。DB操作はdjangoを使って楽する。
 ・ログなどもdjangoを使って楽をする。

画面周り+ハード制御用ドライバを実装して、これらをURL経由で操作できるようにすれば
WEB系を取り入れた組込み開発になる。

こんな感じになると組込み系の醍醐味?だと思うLCDにキャラクターパターンをUART経由で送信して表示するというような事はしなくなりそうです。

今日はここまで。

2012年2月27日月曜日

djangoの解析メモapp_lanel

models.pyのclass Metaにapp_labelとdb_tableで定義できる。
southでmigrateする時はapp_labelの名前で行う。(もちろん他のモデルと一緒にmigrate)

django上ではこのあたりの処理を、
  django\db\loading.py

あたりがメインぽい。

ちなみにここ、1.4のソースやトラッカー見てしばらく解析しないと分からなかった部分。

2012年1月24日火曜日

django管理画面の一覧をCSV出力する。

ここの記事を見て自分もこれ導入しようと思いさっそくインストールしてみた。

コマンドライン上で
easy_install.exe https://bitbucket.org/tokibito/django-csvutils/get/6c2ddaf1e92f.zip

これを打つだけ。いたって簡単。

CSV出力を設定したいAdmin.pyを編集すればComboxに削除しかなかった欄に「export to CSV」が追加される。
この名称はローカライズ対応になっているんだけど、Localeファイルをどこに入れればいいんだろうなあ。

2012年1月23日月曜日

djangoの翻訳テキストをカスタマイズする。

Windows上で翻訳テキストをコンパイルするには、
gettext ver0.15以上が必要のようです。

1.まずは必要なライブラリをダウンロードする。

http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/
上記サイトから
gettextのver0.17をダウンロード。
ダウンロードしてきた
 gettext-runtime-0.17-1.zip
 gettext-tools-0.17.zip

を展開してbinフォルダ内の中身を全てpython.exeと同じフォルダに入れた。


2.翻訳テキストを編集する。
拡張子.poファイルが編集する翻訳テキストになっていて、
拡張子.moファイルがコンパイルされた翻訳テキストという構成になっている。

まず変更したいアプリ内にある翻訳ファイル.poを編集する。


3.編集した翻訳テキストをコンパイルする。

コマンドライン上でアプリフォルダまで移動してから
python manage.py compilemessages -l ja

と打ち込むとdjango.moを作ってくれる。

例:
.\django\contrib\admin\locale\ja\LC_MESSAGES\django.po を編集した時は

コマンドライン上で
.\django\contrib\admin

まで移動してからコマンドを打ち込めばOK。

2011年7月28日木曜日

Djangoが使えるようになってきた

デバッグ環境が乏しくてコンパイルする言語と比べて開発に時間かかるし、
そんなにコード量かけないなって思っていたけど、書き方・作法が分かってくると
急に心強くなってくるWEBフレームワークだなあってのが最近の印象。

2011年6月13日月曜日

Django デバッグ環境を整える

今回は3つデバッグ環境について触れてみた。
 ・Logging
 ・django-debug-toolbar(IE9だと表示崩れる)
 ・pylint


○Logging
Django v1.3になって、setting.pyにロギングするコードが追加されたようだ。

使い方は簡単で、
https://docs.djangoproject.com/en/1.3/topics/logging/
ここを見ながら設定してみると、

setting.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
  'app': {
   'handlers': ['console'],
   'level': 'DEBUG',
   'propagate': True,
  },
    }
}

views.py
import logging
...

logger = logging.getLogger('app')
...
このような感じに設定しておく。

○django-debug-toolbar
さらにデバッグしやすくしようと思って調べてみたら、
「django-debug-toolbar」というものを発見。
ここからいつもどおりの手順で導入していく。

1.インストール
sudo easy_install-2.5 django-debug-toolbar

2.設定
.\python\Lib\site-packages\django_debug_toolbar-0.8.5-py2.6.egg\example
サンプルを見ながら設定していく。

settings.py
INSTALLED_APPS = (
    ...
    'debug_toolbar',
)
MIDDLEWARE_CLASSES = (
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
)

DEBUG_TOOLBAR_PANELS = (
    'debug_toolbar.panels.version.VersionDebugPanel',
    'debug_toolbar.panels.timer.TimerDebugPanel',
    'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel',
    'debug_toolbar.panels.headers.HeaderDebugPanel',
    'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
    'debug_toolbar.panels.template.TemplateDebugPanel',
    'debug_toolbar.panels.sql.SQLDebugPanel',
    'debug_toolbar.panels.signals.SignalDebugPanel',
    'debug_toolbar.panels.logger.LoggingPanel',
)

def custom_show_toolbar(request):
    return True # Always show toolbar, for example purposes only.

DEBUG_TOOLBAR_CONFIG = {
    'INTERCEPT_REDIRECTS': False,
    'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar,
    #'EXTRA_SIGNALS': ['myproject.signals.MySignal'],
    'HIDE_DJANGO_SQL': False,
}

3.確認
サーバ立ち上げて、管理画面を表示してみる。
右側に黒いメニューバーが表示されていれば成功。

(Firefoxはうまく表示されたが、IEだと表示バグがあった。。)

○pylint
コーディング中に構文エラーを発見したい人向け。
自分が使っているエディタはVIMを使っているので、
VIM環境で楽に使えるように設定まで行ってみた。

1.インストール
 easy_install pylint

2.VIM環境設定
 http://www.vim.org/scripts/script.php?script_id=891
 pylint.vimの最新版をダウンロードして、
 Vimフォルダのruntime/plugin/
 にコピーする。

参考ページ
http://www.hexacosa.net/blog/detail/54/

2011年3月11日金曜日

Django + PythonでPDF作成

1.インストール
easy_install -U reportlab

2.実行
from reportlab.pdfgen import canvas
from django.http import HttpResponse

def some_view(request):
    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
    p = canvas.Canvas(response)

    #帳票レイアウト描画
    p.drawString(100, 100, "Hello world.")

    p.showPage()
    p.save()
    return response

PDFレイアウトをちまちま書いていくのは大変なので、
テンプレート画像を読み込んで、そこに記入していく方式をとってみる。

from reportlab.pdfgen import canvas
#!/user/bin/env python
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from reportlab.pdfgen import canvas  
from reportlab.lib.units import mm  

# Create your views here.
def sample1(request):
 response = HttpResponse(mimetype='application/pdf')
 #response['Content-Disposition'] = 'attachment; filename=c:\\tmp\\somefilename.pdf'
 response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
 p = canvas.Canvas(response)

 #テンプレート読み込み(A4サイズ[595x841], テンプレートサイズ[453x785])
 _lft = 30
 _top = 10
 _rit = 20
 _btm = 10
 _wid = 210 - _lft - _rit
 _hei = 297 - _top - _btm
 p.drawInlineImage("c:\\tmp\\test.png", 
   _lft*mm,
   _btm*mm,
#   width=_wid*mm,
#   height=_hei*mm,
#   preserveAspectRatio=True
 )

 #記入項目
 p.drawString(0*mm, 0*mm, "Hello world1.")
 p.drawString(40*mm, 100*mm, "Hello world2.")
 p.drawString(40*mm, 200*mm, "width=%d, height=%d" % (_wid*mm, _hei*mm))
    
 p.showPage()
 p.save()
 return response

これで仕上がったPDFを印刷してみるとわかるけど、
テンプレート内に入っている文字はドットが荒くなるので、
線の枠組みだけテンプレートに書いて、文字は別途挿入した方がいい。

あとテンプレートのサイズはソースコード内に記述したサイズにすると
原寸大で描画できる。


参照リンク
http://docs.nullpobug.com/django-doc-ja/trunk/howto/outputting-pdf.html
http://d.hatena.ne.jp/piro_suke/20070704/1183561248
http://tt-house.com/2009/12/python-reportlab-pdf.html

2011年2月28日月曜日

Windows環境でdjango+バーコード作成モジュールをインストールする

Windows環境でPython + Sqlite + Django開発環境を簡単に構築する方法。

手軽に構築したい人向け。

1.TracLightingをダウンロード&インストール。
 http://sourceforge.jp/projects/traclight/wiki/FrontPage
 インストール場所>D:\TracLight
 ダウンロードしたEXEファイルを実行してインストールディレクトリを上記に設定。


2.Django公式ページからDjango本体をダウンロード&インストール。
 http://www.djangoproject.com/download/
 インストール場所>D:\tmp\django
  Admin権限でDOSプロンプト実行。インストール場所へ移動して、
  python setup.py install

  プロジェクトの作り方。
   python d:\TracLight\python\Scripts\django-admin.py startproject <プロジェクト名>


3.fastcgiでdjango起動するように設定
nginx + gunicorn + django設定例
Pythonの正規表現ライブラリが足りなくてgnicornで動かなかったので、
通常のFastcgiで動かす方法でflupをインストール。
 easy_install -U flup
 nginx.confの設定は、自身のポート番号(80)の設定とfastcgiの設定の2つ。

 上記リンクに書かれている部分
 #host to gunicorn serverから改行までの設定をコメントアウト
 ##host and port to fastcgi serverから改行までの設定をコメントアウト解除
 にする。


4.バーコード作成ライブラリ「huBarcode」をダウンロード&インストール。
easy_intsll PIL
easy_install -U huBarcode

5.動作確認。
  <サンプルコード>
from ean13 import EAN13Encoder

    _barcode = EAN13Encoder(’123456789012′)
    _barcode.save(“test_barcode.png”)

これで完了。

起動させるには、
 python manage.py runfcgi method=threaded host=127.0.0.1 port=8000
 nginx.exe

nginxを停止するなら
nginx.exe -s stop

2010年12月10日金曜日

[Django]static_mediaの設定方法

settings.pyを開いて
MEDIA_ROOT = '/var/www/mysite/site_media/'
MEDIA_URL = '/site_media/'

urls.pyを開いて
from django.conf import settings

(r'^site_media/(?P.*)', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),

を追加。

テンプレート内でメディアにアクセスする場合、絶対パス。
/site_media/foo.jpg

View.py内でメディアにアクセスする場合、相対パス。
./site_media/foo.jpg

[Django]view内のパス

project/app/view.py内が読み込まれるときパスは

project/

になっている。

Androider