2011年5月21日土曜日

Djangoのデータベースアクセス(その3)

テーブルのデータを取得する方法
1.データを取得する関数の作成
sampleprj/sampleapp/views.pyにshowという関数を作成し、次のようなコードを書く
# encoding: utf-8
from django.http import HttpResponse 
from sampleprj.sampleapp.models import Memo
def show(request):
    memos = Memo.objects.all()
    for memo in memos:
        print memo.userid
        print memo.title
        print memo.content
    return HttpResponse('データを取得しました')

2.URL割り当て
show関数を割り当てるURLを定義する
sampleprj/urls.pyの最後に次のコードを追加する
urlpatterns += patterns('sampleprj.sampleapp',
url(r'^sampleapp/show/$', 'show'),
)

これでhttp://localhost:8000/sampleapp/show/にアクセスすると、コンソールにMemoテーブル内の全てのデータが表示される

参考サイト:
クエリを生成する

2011年5月14日土曜日

Djangoのデータベースアクセス(その2)

新規データを追加する方法
ユーザが、http://localhost:8000/sampleapp/add/にアクセスした時に、前回作成したテーブルに新規にデータを追加する手順

1.アクセスする関数の作成
sampleprj/sampleapp/views.pyにaddという関数を作成し、次のようなコードを書く
# encoding: utf-8
from django.http import HttpResponse
from sampleprj.sampleapp.models import Memo

def add(request):
    memo = Memo()
    memo.userid = 1
    memo.title = 'first memo'
    memo.content = 'memo content'
    return HttpResponse('データを追加しました')

2.URL割り当て
add関数を割り当てるURLを定義する
sampleprj/urls.pyの最後に次のコードを追加する
urlpatterns += patterns('sampleprj.sampleapp',
    url(r'^sampleapp/add/$', 'add'),
)

これでhttp://localhost:8000/sampleapp/add/にアクセスするとテーブルに追加される。

2011年5月7日土曜日

Djangoのデータベースアクセス(その1)

Djangoでデータベースへアクセスするためによく使う記述法のメモ
ここでは、まずテーブルを作成するまでの手順
次の例を利用する
プロジェクト名:sampleprj
アプリケーション名:sampleapp
テーブル名:Memo

データベースへのテーブル作成手順
1.モデルを定義
「sampleprj/sampleapp/models.py」に次のテーブル構成を追加
from django.db import models

class Memo(models.Model):
    userid = models.IntegerField()
    title = models.CharField(max_length=100)
    content = models.CharField(max_length=255)
    created_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(auto_now=True)
テーブルの構成は、次の通り
・userid:ユーザID、整数型
・title:タイトル、文字列型、最大100文字まで
・content:内容、文字列型、最大255文字まで
・created_date:作成日時、日時型、作成日時を自動設定
・updated_date:更新日時、日時型、更新日時を自動設定

models.py編集後に「# python manage.py syncdb」を実行することで、sampleapp_Memoというテーブルが作成される

参考サイト
モデルフィールドリファレンス

2011年5月4日水曜日

Djangoエラー:Non-ASCII character views.py, but no encoding declared

エラー内容
・ページにアクセスしたときに、「Non-ASCII character '\xe3' in file views.py on line 9, but no encoding declared;」というエラーが発生し、アクセスできない

原因
・日本語をファイル内で利用したが、文字コードを宣言しなかった

対処法
・日本語を利用したファイルの1行目に次のエンコーディング宣言を追加
# encoding: UTF-8

2011年5月2日月曜日

Djangoエラー:CSRF verification failed. Request aborted.

エラー内容
・djangoで、フォームに入力した内容をPOSTしたときに、「CSRF verification failed. Request aborted.」というエラー

対処法
・「(プロジェクトフォルダ)/settings.py」のMIDLEWARE_CLASSES内に次の1行を追加
'django.middleware.csrf.CsrfResponseMiddleware',

エラー画面

テンプレートからHTMLを読み込む手順

djangoでテンプレートからHTMLを読み込む手順

テンプレートディレクトリを追加
・「(プロジェクトディレクトリ)/settings.py」にあるTEMPLATE_DIRS = ()の中にディレクトリのパスを追加する
# 追加するディレクトリ:/home/project/templates
TEMPLATE_DIRS = (
'/home/project/templates',
)

テンプレートHTMLファイルを追加
・設定したテンプレートディレクトリ内に読み込むためのHTMLファイルを作成
例えば、'/home/project/templates/sampleapp/index.htmlを追加

views側でテンプレートを読み込む
・テンプレートを表示したいアプリケーションのviews.pyにテンプレートを読み込むコードを挿入する
# 追加するアプリケーションが'/home/project/sampleapp'の場合、
# '/home/project/sampleapp/views.py'に次を追加
from django.http import HttpResponse
from django.template import Context, loader

def index(request):
    template = loader.get_template('sampleapp/index.html')
    return HttpResponse(template.render(Context()))

URLを設定
・「(プロジェクトディレクトリ)/urls.py」にviewを登録する
・urlpatterns = ('',)を次のように編集
urlpatterns = ('',
    url(r'^sampleapp/$', 'project.sampleapp.views.index'),
)

読み込みを確認
# python manage.py runserverを実行して、ブラウザでhttp://localhost:8000/sampleapp/にアクセスして表示されることを確認

参考サイト:テンプレートの利用方法

2011年5月1日日曜日

プログラムの絶対パスを取得

Pythonで実行するプログラムの絶対パスを取得する方法
print __file__

実行するプログラムの親ディレクトリを取得する方法
import os
parent_dir = os.path.dirname(__file__)

現在のディレクトリ取得

Pythonで現在のディレクトリを取得する方法

from os
current_path = os.getcwd()
print current_path

これで、プログラムを実行しているディレクトリを取得できる

eclipseで実行した場合、workspaceが返される

参考サイト:Pythonドキュメント