Django学習ノート2:簡単な開発例

9131 ワード

Technoratiラベル:
Python ,
Django
目標:簡単なTodo管理アプリケーションを開発することによって、Djangoの基本概念、使用を熟知する.
実行環境
Windows Vista + Python 2.7 + Django 1.5
準備作業
*プロジェクトの作成
python C:\Python27\Lib\site-packages\django\bin\django-admin.py startproject mytodo
 
*デバッグサーバの起動
python manage.py runserver
Validating models...
0 errors found
October 11, 2012 - 11:06:08
Django version 1.5, using settings 'mytodo.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
 
ブラウザでhttp://127.0.0.1:8000/にアクセスし、正常にアクセスできます.
 
*データベースの構成
変更するpy、sqlite 3を使用します.
データベース・テーブル・アイテムの生成:python manage.py syncdb
 
*タイムゾーン構成の変更
TIME_ZONE = 'Asia/Shanghai'
 
#Todo機能を実現するModelの作成
python manage.py startapp todo
 
準備が完了し、次はtodo modelの開発を行います.
 
応用モデルの開発
*settings構成
編集するpyの次のプロパティ:
INSTALLED_APPS:todo modelのサポートを追加する;
TEMPLATE_DIRS:モジュールが使用するtemplate位置を構成する;
 
*Modelの実装
todo/modelsでpyファイルでデータベースを定義する
class TodoEntry(models.Model):

     task = models.CharField(max_length=120)

     status = models.IntegerField()

     create_date = models.DateTimeField('create date')



     def __unicode__(self):

          return self.task

ここでは、task,status,createの3つのフィールドを含むデータベーステーブルTodoEntryを定義します.date.
 
*URLの設定
mytodo/urlを編集します.pyのurlpatternsで、次の構成を追加します.
url(r'^todo/$', 'todo.views.index'),

url(r'^todo/add/$', 'todo.views.add'),

url(r'^todo/del/(?P<entry_id>\d+)/$', 'todo.views.delete'),

表示、追加、削除機能の3つのview関数を実装します.
 
*View関数実装
todo/views.pyファイルでview関数を実装します.
# 'todo.views.index' 



def index(request):

    all_todo_list = TodoEntry.objects.all().order_by('-create_date')



    return render_to_response('todo/index.html', {'all_todo_list' : all_todo_list}, context_instance = RequestContext(request))

説明:1)todo/indexをロードする.htmlテンプレート、変数名all_todo_listはテンプレートにデータを渡します.2)テンプレートファイルの{%csrf_token%}タグの要件に合わせてコンテキストインスタンスを入力します.
# 'todo.views.add'



def add(request):

    try:

        task_msg = request.POST['task_msg']

        entry = TodoEntry(task = task_msg, status = 1, create_date = timezone.now())

        entry.save()

    except (KeyError):

        return render_to_response('todo/index.html', {'error_msg' : "no task msg isprovided!"}, context_instance = RequestContext(request))



    return HttpResponseRedirect("/todo/")

説明:1)HttpRequest.POSTはフォームから提供されたデータを取得し、'task_msg’は、フォームに入力されたテキストボックスのname属性です.2)データの追加後、HttpResponseRedirectを呼び出して開始ページに戻る.
# 'todo.views.delete'



def delete(request, entry_id):

    entry = get_object_or_404(TodoEntry, pk=entry_id)

    entry.delete()



    return HttpResponseRedirect("/todo/")

摘要:削除する場合は、entry_を介して削除されたエントリのIDを指定する必要があります.idが入る.URL定義では、IDがキャプチャされ、Pはkeywordパラメータを定義します.
 
*Template定義
view関数では、テンプレートファイルtodo/indexが参照されます.htmlは、次のように実現されます.
<form action = "/todo/add/" method = "POST">

    {% csrf_token %}

    New: <input type = "text" name = "task_msg" />

    <input type = "submit" value = "Add" />

</form>



{% if all_todo_list %}

    {% for entry in all_todo_list %}

        <p> {{ entry.task }}

             <a href="/todo/del/{{ entry.id }}/"> delete </a>

        </p>

    {% endfor %}

{% else %}

    <p>No todo entry are available.</p>

{% endif %}

説明:1)フォームはPOSTタイプを使用した;2)変数entryを使用する.idはIDをURLに記入し、削除操作を特定のエントリに位置決めする.
 
-----------------
Weichsel
2012.10.15