Django学习笔记2:一个简单的开发实例
2012-10-15 12:36
896 查看
Technorati 标签: Python,Django
目标:通过开发一个简单的Todo管理应用,熟悉Django的基本概念、和使用。
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的开发。
编辑 mytodo/settings.py 中的下列属性:
INSTALLED_APPS:添加对 todo model的支持;
TEMPLATE_DIRS:配置模块使用的 template 位置;
* Model的实现
在 todo/models.py 文件中定义数据库
这里定义了一个数据库表 TodoEntry,包含三个字段:task, status, create_date。
* 配置URL
编辑 mytodo/url.py 中的 urlpatterns,添加以下配置:
我们将实现三个view 函数,分别实现显示、添加、删除 功能。
* View 函数实现
在 todo/views.py 文件中,实现view函数。
说明:1) 加载todo/index.html模板,并通过变量名 all_todo_list 将数据传递给模板。2) 将上下文实例传入,配合模板文件中的 {% csrf_token %} 标记的需求。
说明:1) 通过HttpRequest.POST获取表单提供的数据,'task_msg’是表单中输入文本框的name属性。2) 数据添加后,调用HttpResponseRedirect 返回起始页面。
说明:删除的时候,需要指明删除条目的ID,这个参数通过 entry_id传入。在URL定义中,捕获了ID,并且通过 ?P<entry_id> 定义了keyword 参数。
* Template定义
view函数中,引用了模板文件 todo/index.html,实现如下:
说明:1) 表单使用了POST 类型;2) 使用变量 entry.id 将ID填到URL中,从而将删除操作定位到具体的条目。
-----------------
Weichsel
2012.10.15
目标:通过开发一个简单的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
相关文章推荐
- Django学习笔记2:一个简单的开发实例
- python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)
- cocos2d-x学习(3)---游戏实例开发:一个简单的射击游戏二
- Django学习笔记(二)创建一个简单页面
- Python学习笔记23:Django构建一个简单的博客网站(一个)
- cocos2d-x学习(4)---游戏实例开发:一个简单的射击游戏三
- Java开发学习笔记之二:一个简单的Servlet
- SharePoint【学习笔记】--【Sandbox Solution】-- Full Trust Proxy --开发实例之(1、创建一个能访问DataBase的Full Trust Proxy)
- 【CI学习笔记】一个用PHP写的,简单的MVC实例
- cocos2d-x学习(2)---游戏实例开发:一个简单的射击游戏一
- Hibernate 学习笔记-1-1(一个简单的Hibernate实例)
- python Django 学习笔记(二)—— 一个简单的网页
- python Django 学习笔记(六)—— 写一个简单blog做增删改练手
- UNIX环境编程学习笔记-----编程实例------一个简单的服务器端和客户端程序
- Hibernate 学习笔记-1-1(一个简单的Hibernate实例)
- Sharepoint学习笔记---Sandbox Solution-- Full Trust Proxy--开发实例之(1、创建一个能访问DataBase的Full Trust Proxy)
- 机器视觉学习笔记(9)——一个双目测距的简单实例
- Hibernate 学习笔记-1-1(一个简单的Hibernate实例)
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- Django 开发学习笔记(2)- 请求一个自定义的路径,得到一个返回