スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[python]Djangoチュートリアルを読んで

djangoチュートリアルを読んだのでまとめます。
詳しく知りたい方は、本家を参照ください。

前回の記事にて、eclipseにてdjangoの環境を整えたので、
eclipseによる開発手順をまとめます。
開発環境構築については、前回の記事を参照ください。(Macですが、、、)

基本的な流れ
1.プロジェクト作成
2.データベース設定
3.アプリケーション作成
4.データベース作成
5.ビューの作成

となっており、MVCアプリケーションのモデルをベースとした
アプリケーション作成を行います。


プロジェクトの作成

こちらに関しても前回の記事を参照してください。
[作られるファイル]
・manage.py (main文とかが書かれる)
・settings.py (各種セッティングをする)
・urls.py (URLスキームの設定)

*備考 port番号を変更したい場合は、引数にポート番号を与えます。




データベースの設定

setting.pyにて行います。

DATABASES データベースの設定をします。
 ENGIN データベースを定義します。
     sqlite3の場合 : 'django.db.backends.sqlite3'
 NAME  データベース名を設定します。
     sqliteの場合は、絶対パスを入れます。(*ここ重要!!)
     'NAME': '[データベース格納ディレクトリ]/sqlite.db',
 DATABASE_USER データベースユーザ名
 DATABASE_PASSOWRD データベースパスワード
 DATABASE_HOST データベースがあるサーバホスト。同マシン上では空文字。


setting.pyを設定後

python manage.py syncdb


を行い、データベースを作成します。




アプリケーションの作成

以下のコマンドでアプリケーションを作成します。

python manage.py startapp [アプリケーション名]


[作られるファイル]
・アプリケーションディレクトリ
・models.py
・views.py
・__init__.py
・tests.py
ここでよく弄るのは、models.pyとviews.pyです。
models.pyは、データベース制御(O/Rマッパ)を定義します。
views.pyは、リクエストに対してどのように対応するかを定義します。




データベース作成

models.pyにテーブル、カラムを定義します。
テーブルはクラス、カラムはメンバ変数となります。
その他、データ制御はクラス内の変数で定義します。

models.png


models.pyを有効にするためには、settings.pyの
INSTALLED_APPSにより設定します。
(例)

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'mysite.polls'
)



上記設定後、

python manage.py syncdb


にてデータベースを作成します。




ビューの作成

ビューは、views.py内で定義しますが、
リクエストurlとviewの関連付けは、urls.pyにて行います。

urls.py
(正規表現、呼び出す関数)


のタプルで定義します。
urls.png

また、呼び出す関数への引数はurls.pyで定義された変数と同等名に指定します。
(画面の関係でサムネイルだけ表示します)
url2.png


urls.pyにて定義されたurlからのリクエストに対して、
レスポンスをviews.pyにて書きます。
レスンポンスを返す際はhtml等を返さなければいけませんが、
pythonコードにhtmlを書くのは非常に効率が悪いため、temlateというものが
用意されています。
template機能を用いると、テンプレートに用意した変数に、プログラムから
値を代入し、簡単に動的なhtml等を作成するとこができます。
以下に、templateの例を挙げます。(チュートリアルのコピペ)

{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
<li>{{ poll.question }}</li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}



基本的に{%...%}内は、pythonコードです。
変数のみの場合は、{{...}}を使います。
テンプレートは、settings.pyのTEMPLATE_DIRSにて定義します。
TEMPLATE_DIRSでは、テンプレートを格納しているルートディレクトリを設定します。

処理の流れをまとめると、

リクエスト→urls.pyを検索→views.pyを実行しtemplateに代入→リクエストを返す


みたいな感じです。

次にチュートリアルで紹介があったライブラリ関数を書きます。
以下のライブラリを押さえていればある程度のことはできます。
HttpResponse(返すオブジェクト)
 HttpResponseでは、リクエストに対するレスポンスを返します。
render_to_response(テンプレートパス,辞書オブジェクト) 
 テンプレートに簡単に入れて、レスポンスを返してくれます。
 テンプレートパスは、TEMPLATE_DIRSにて設定されたルートディレクトリからのパスです。
get_object_or_404(モデル名、取得条件)
 モデルから取得条件に従って値を取得します。
 もし見つからなかった場合は、404オブジェクトを返します。
 利点はHttp404のエラー処理を実装しなくていい事です。
reverse(関数名,引数)
 他の関数へのurlを作成します。
HttpResponseRedirect(他のurl)
 reverse関数等で作成したurlに対して、httpリダイレクトをします。




その他

最後に、チュートリアル通にやっていもなかなか動いてくれません。
ですので、チュートリアルをやる際に役立った事を書きます。
・対話API
データベースを操作する対話型APIです。

python manage.py shell


にて起動します。
pythonにてモデルを操作できますので、非常に簡単にデータエントリーができます。
以下にチュートリアルのモデル登録例を書きます。

In [1]: from mysite.polls.models import Poll,Choice
In [2]: import datetime
In [3]: p = Poll(question="What's up?" , pub_date=datetime.datetime.now())
In [4]: p.save()
In [5]: c = Choice(poll=p,choice="you're kidding",votes=0)
In [6]: c.save()



・CSRFについて
リダイレクトをしようとすると、以下のようなエラーが発生します。

"Forbidden(403) CSRF verification failed. Request aborted."


これは、DjangoがCSRF対策に行っているためです。
ですので、settings.pyのMIDDLEWARE_CLASSESに以下を追加登録してください。

'django.middleware.csrf.CsrfResponseMiddleware'




以上です、
これでDjangoの基本は押さえられたと思います。

おわり。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

ss_9

名前 :ss_9
紹介 :
20代はエンジニア、30代はプロ、40代は管理、50代は人脈。

Twitterボタン

最新記事
カテゴリ
AD
月別アーカイブ
RSSリンクの表示
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。