| トップ | 読書感想文 | ニュース | Ukki |
djangoメモ

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のためのクラス
フォーム:表示可能なフォーム

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

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()が呼び出される。

<H1>テンプレーティング</H1>

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変数で指定される。

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そうだ。

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でアクセスできる。

Top
Index
Search on Ukki

login

Sections:
djangoとMySQL
django.newforms