zoukankan      html  css  js  c++  java
  • Django学习笔记2:一个简单的开发实例

    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/,能够正常访问。

    * 配置数据库

    修改 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

  • 相关阅读:
    关于Ext tabpanel 自定义active 样式/iconCls
    关于vue使用 npm run dev报错原因
    vue学习笔记(1)
    BeanCreationNotAllowedException: Error creating bean with name 'cxf' 的原因和解决方案
    js做四则运算时,精度丢失问题及解决方法
    java word/doc/docx文档转PDF 加水印
    HTML学习笔记
    (小白疑问求大神解答)可否理解为数据库就是excel表格的封装?
    excel表格加减法
    基础算法思想
  • 原文地址:https://www.cnblogs.com/weichsel/p/2724108.html
Copyright © 2011-2022 走看看