Django學習筆記2:一個簡單的開發實例

轉自:http://www.cnblogs.com/weichsel/archive/2012/10/15/2724108.html


目標:通過開發一個簡單的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/,能夠正常訪問。

 

* 配置數據庫

修改 mytodo/settings.py, 使用sqlite3;

生成數據庫表項:python manage.py syncdb

 

* 修改時區配置

TIME_ZONE = 'Asia/Shanghai'

 

# 創建實現Todo功能的 Model

python manage.py startapp todo

 

準備工作完成,接下來進行 todo model的開發。

 

應用Model的開發

* settings配置

編輯 mytodo/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
複製代碼

這裏定義了一個數據庫表 TodoEntry,包含三個字段:task, status, create_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'),

我們將實現三個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/")
複製代碼

說明:刪除的時候,需要指明刪除條目的ID,這個參數通過 entry_id傳入。在URL定義中,捕獲了ID,並且通過 ?P<entry_id> 定義了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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章