djangoメモ 
top

djangoとMySQL

djangoのバックエンドデータベースにMySQLを使い、日本語(UTF-8)のデータを扱いたい場合、データベースのデフォルトキャラクタセットをutf-8にしておかないとデータがtruncateされたというエラーメッセージがMySQLから返ってきます。

create database django_db set default character set utf8;

としてデータベースインスタンスを作ると大丈夫なようです。

django.newforms

いままでのdjango.formsを置き換える新しいクラス。フォームの表示、validation、再表示を司る。

ウィジェット: フォームエレメントに対応 フィールド:validationのためのクラス フォーム:表示可能なフォーム

データベースやテンプレートとは独立している。

-:text gentooでは、コマンド類は以下にインストールされる。 /usr/bin/django-admin.py

djangoプロジェクト - 1つのプロジェクトに対し、接続するデータベースは1つ。 - 1つのプロジェクトに複数のアプリケーションが含まれる。 - 1つのホスト(サーバー)で複数のプロジェクトを運用することができる。

アプリケーションの作成はコマンドで行う。 % python manage.py startupp polls

アプリケーションは、アプリケーション名のディレクトリの下に作られる。

polls/
  __init__.py
  models.py
  views.py

models.pyにはモデルクラスを書く。モデルクラスはWebアプリのデーターベース部分に対応する。モデルクラスは、1)データベースのスキーマ生成と2)それにアクセスするPythonコードの生成に使われる。

データベーステーブル作成は、 % python manage.py syncdb

モデルクラスを実装するには、models.Modelクラスを継承する。

settings.pyのROOT_URLCONF変数が参照される。ここにはクラスパスが指定されていて、’mysite.urls’などとなっているので、mysite/urls.pyが読み込まれURLディスパッチに使われる。

urls.pyには、urlpatterns変数があり、この変数がディスパッチテーブルとして使われる。

  (r'^polls/(?P<poll_id>\d+)/$', 'mysite.polls.views.detail')

第2パラメータは起動するメソッド名で、上の例だと、mysite/polls/views.pyのdetail()が呼び出される。

テンプレーティング

django.templateがDjangoのテンプレーティングエンジン。

テンプレート使用の手順は、 - django.template.loader.get_template()を使って、テンプレートを読み込み、 - Key-ValueペアのContextを作り、 - template.render(Context)でレンダリング となる。

from django.template import loader
from django.template import Context

my_template = loader.get_template('polls/index.html')
context = Context({'key': value})
my_template.render(context)

テンプレートの置き場所も、settings.pyによって指定され、TEMPLATE_DIRS変数で指定される。

-:html # 1つ作ってみる ~/src/mysite/にて、 python manage.py startapp tango

単語追加ページ /tango/add まず単純にページを表示する。

def add(request):
  render_to_response('tango/add.html', {})

テンプレートにフォームを追加する。まずはHTMLに入力フォームを直書き。送信されたフォームを同じメソッドで処理するため、送信先URL(actionフィールドの値)は、”./”とした。

送信されたフォームの受け取り フォームはPOSTメソッドで受け取っているので、request.method == ‘POST’でそれを検出し任意の処理をする。まずは何もせず、単純にリダイレクトをする。

リダイレクト django.http.HttpResponseRedirectを使ってリダイレクトを行う。

  return HttpResponseRedirect('./')

でパラメータなしの同じページにリダイレクトする。

デバッグログ デバッグ情報の表示は単純に標準出力/標準エラー出力に文字列を出せば良い。print()でもOKそうだ。

-:html TagManagerはdjango.db.models.Managerを継承するクラス。djangoのManagerクラスは、DBへのデータ取得などを担当するクラス。Tagクラスでは、self.objectsでTagManagerが参照できる。つまり、tag.objects.なんとか()とできる(のかな?)

TaggedItemクラスはself.tag = models.ForeignKey(Tag, related_name=’items’)というフィールドを持つ。これによって、TaggedItemはTagへのforeign keyを持ち、逆にTagは、それを参照するTaggedItemの集合に対してitemsでアクセスできる。

imported