TodoList是django入门一个比較基础的例程,主要參考例如以下博客,写的很好:

simple-todo: http://www.cnblogs.com/cacique/archive/2012/10/06/2713415.html

本文在pycharm环境下又一次对上面代码进行了实现,而且作为刚開始学习的人从这个实例代码出发,详细分析而且熟悉django的相关机制。

实验pycharmproject源代码能够从我的github上下载:https://github.com/huchunxu/TodoList.git

pycharm版本号:3.1.2
Django版本号:1.4.10
python版本号:2.7.6

一、数据模型(model.py)

       在当代 Web 应用中,主观逻辑常常牵涉到与数据库的交互。

数据库驱动站点在后台连接数据库server。从中取出一些数据,然后在 Web 页面用美丽的格式展示这些数据。

这个站点也可能会向訪问者提供改动数据库数据的方法。

因为先天具备 Python 简单而强大的数据库查询运行方法,Django 很适合开发数据库驱动站点。

       Django 的设计鼓舞松耦合及相应用程序中不同部分的严格切割。 遵循这个理念的话,要想改动应用的某部分而不影响其他部分就比較easy了。把数据存取逻辑、业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller(MVC)模式。 在这个模式中, Model 代表数据存取层,View 代表的是系统中选择显示什么和怎么显示的部分,Controller 指的是系统中依据用户输入并视须要訪问模型,以决定使用哪个视图的那部分。

Django 紧紧地遵循这样的 MVC 模式,能够称得上是一种 MVC 框架。 以下是 Django 中 M、V 和 C 各自的含义:
       M,数据存取部分,由django数据库层处理。
       V,选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。
       C。依据用户输入委派视图的部分,由 Django 框架依据 URLconf 设置,对给定 URL 调用适当的Python 函数。

因为 C 由框架自行处理,而 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),Django 也被称为 MTV 框架 。在 MTV 开发模式中:
       M 代表模型(Model),即数据存取层。 该层处理与数据相关的全部事务: 怎样存取、怎样验证有效
性、包括哪些行为以及数据之间的关系等。

T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 怎样在页面或其他类型文档中进行显示。

V 代表视图(View),即业务逻辑层。

该层包括存取模型及调取恰当模板的相关逻辑。 你能够把它看作模型与模板之间的桥梁。

在TodoList的案例中,我们的数据模型主要包括一下的一些字段:username、todo内容、是否完毕的标志位、优先级、公布时间。

我们使用python代码来描写叙述这些字段,例如以下图所看到的:

每一个数据模型都是 django.db.models.Model 的子类。

它的父类 Model 包括了全部必要的和数据库交互的方法,并提供了一个简洁美丽的定义数据库字段的语法。每一个模型相当于单个数据库表,每一个属性也是这个表中的一个字段。属性名就是字段名,它的类型(比如CharField )相当于数据库的字段类型 (比如 varchar )。

我们并没有显式地为这些模型定义不论什么主键。 除非你单独指明,否则Django会自己主动为每一个模型生成一个自增长的整数主键字段每一个Django模型都要求有单独的主键id。

输入“python manage.py sqlall SimpleTodo”命令。我们能够看到生成的SQL语句:

按约定,Django加入 "_id" 后缀到外键字段名,用 REFERENCES 语句明确定义。

在这个表中,user是外键,引用Django的内置权限控制系统,使用“from django.contrib.auth.models import User”引入。

__unicode__() 方法告诉Python怎样将对象以unicode的方式显示出来。内嵌类 "class Meta" 给你的 model 定义元数据,用于定义一些Django模型类的行为特性。比方ordering定义默认排序字段及排序方式, 用于得到一个对象列表的不论什么场合。

二、站点管理(admin.py)

Django自己主动管理工具是django.contrib的一部分。

django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多包括附加组件(add-on)的基本代码构成的。 你能够把django.contrib看作是可选的Python标准库或普遍模式的实际实现。 它们与Django捆绑在一起,这样你在开发中就不用“反复发明轮子”了。管理工具是django.contrib的一个部分。从技术层面上讲,它被称作django.contrib.admin。

django.contrib中其他可用的特性,如用户鉴别系统(django.contrib.auth)、支持匿名会话(django.contrib.sessioins)以及用户评注系统(django.contrib.comments)。

主要的admin功能就不详述了,主要看一下我们的models是怎样加入到Admin管理功能中的。在app的admin.py文件里,代码例如以下:

admin.site.register()函数将我们之前定义的数据库表放到管理界面中。第一个參数就是之前定义的数据库模型,第二个參数是我们对显示字段的自己定义显示方式。假设没有第二个參数则默认使用对象中的__unicode__()方法进行显示:

list_display:一个字段名称的元组。用于列表显示,这些字段名称必须是模块中有的。

list_filter:这个字段元组创建过滤器。它位于列表页面的右边。

Django为日期型字段提供了快捷过滤方式,它包括:今天、过往七天、当月和今年。

这些是开发者常常常使用到的。

ordering:字段的排序方式。加上负号代表降序排列。

通过以下两张图,我们能够明显看出来加入自己定义函数后的效果(后者):

三、视图(views.py)

一个视图就是Python的一个函数。

这个函数第一个參数的类型是HttpRequest;它返回一个HttpResponse实例。

为了使一个Python的函数成为一个Django可识别的视图,它必须满足这两个条件。本例中的view.py例如以下:

一旦创建了模型。Django自己主动为这些模型提供了高级的Python API,能够让我们很方便的操作数据库。比如在第一个函数todolist中:

使用`` Todo.objects`` 属性从数据库取出todo的信息,这个属性能够觉得是包括todo的记录集。也就是我们的todolist。filter()是数据过滤方法,这里我们仅仅取还没有完毕的todolist(flag=1)。已经完毕的finishtodos採用相同的方法获取。最后通过模板把我们找到的数据显示出来。详细怎么美丽的显示。那就是模板的工作了。

在todofinish函数中。我们使用到了get()方法,通过id来获取单个对象(filter() 函数返回一个记录集)。使用HttpResponseRedirect对象将网页重定向至一个显示页面。

否则。更新数据后再又一次显示出来。

当用户加入一个新的todo对象的时候。就要调用addtodo()函数了。POST数据是来自HTML中的〈form〉标签提交的。通过提交的数据,分别填充todo的各字段,然后调用模板显示。

四、URL配置

URLconf 就像是 Django 所支撑站点的文件夹。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。你就是以这样的方式告诉 Django,对于这个 URL 调用这段代码,对于那个URL 调用那段代码。
这里我们使用了两个urls.py文件,分别放在项目和应用其中,这样清晰明了而且更具备移植性。须要注意到的就是在相似'^todofinish/(?P<id>\d+)/$'这样的表达式功能是匹配数字赋值给id而且作为后面函数的第二个參数。name參数的作用就是当你在template中写有{% url uploadify_script %}的时候能够直接找到url('^uploadify_script', 'index', name = 'uploadify_script'),来运行程序,也就是运行views.py中的index函数。

五、模板

模板分为三个文件:simpleTodo.html,showtodo.html,updatatodo.html。详细代码就不贴出来了,能够直接从源代码中查看。本人对html之类的没有多少开发经验,bootstrap、javascript,ajax之类的就更搞不明确了。只是对比模板中的代码,遇到不会的就上网查一下,还是能够看明确的。以下是我在学习过程中參考的一些站点:

1、Bootstrap 教程:http://www.w3cschool.cc/bootstrap/bootstrap-tutorial.html
2、Ajax教程:http://www.w3cschool.cc/ajax/ajax-tutorial.html
3、HTML5教程:http://www.w3cschool.cc/html/html5-intro.html

六、实现效果

1、首页

2、加入事项页面

3、改动事项时页面

參考资料:
1、《The Django Book 2.0》
2、simple-todo: http://www.cnblogs.com/cacique/archive/2012/10/06/2713415.html
3、W3C School

----------------------------------------------------------------

欢迎大家转载我的文章。

转载请注明:转自古-月

http://blog.csdn.net/hcx25909

欢迎继续关注我的博客

转载于:https://www.cnblogs.com/mqxnongmin/p/10521041.html

Django练习——TodoList相关推荐

  1. 30分钟!用Django做一个迷你的Todolist!上篇!

    "菜鸟学Python",第"515"篇原创 Python语法简单,功能强大,深受很多同学的喜爱.菜鸟哥以前给大家分享了很多趣味的案例,有基础的语法,趣味的神器库 ...

  2. Vue之Todolist案例和ES6语法

    2.7 Todolist案例 2.7.1 准备工作 <!DOCTYPE html> <html> <head><meta charset="utf- ...

  3. Django 2 零基础 - 待办清单网站

    根据b站视频https://www.bilibili.com/video/BV1bW411N7xN?p=8整理的 不清楚可以去看视频哟 1前期准备 pip freeze # 查看已安装的包 pip i ...

  4. Django之models.py

    模型是写一个数据库驱动的web的第一步,也就是数据库结构设计和附加的其它元数据 也就是说你的models.py决定了你数据库的长相. 下面时自己在完成todolist项目时用的一部分models,在这 ...

  5. 10分钟,小白也能用Django做个小App!

    Python里面最强大的web开发框架非Django莫属,当然很多老鸟会跳出来说Flask也是很牛逼的,还有一些高手会喷你说前两个都是菜鸡,天下武功唯快不破fastapi框架才是最强大.关于框架的争论 ...

  6. Django实战——待办事项清单

    学习django整整10天辣!!虽然都是用碎片时间在学习,但是感觉还是学到了很多,这几天做了一个待办事项的demo,麻雀虽小五脏俱全,虽然前端真的很寒酸,但我的确没有那么多精力去美化前端了嘤嘤嘤.就用 ...

  7. Python:masonite初体验TodoList

    文档:https://docs.masoniteproject.com/ 初次体验框架,感觉里边提供了丰富的命令行工具可以快速开发, 主要是ORM很棒,区别于Python生态Django等的ORM,和 ...

  8. Django学习之路(一)--初识django

    1.先创建虚拟环境 为什么要创建虚拟环境呢? 你有两个项目同时进行,一个需要pytnon3.9和Django3.x版本的,一个需要python3.7和Django2.x版本的,不进行环境隔离的话,运行 ...

  9. django自带的分页功能

    django自带的分页功能 django中自带的分页功能有缺陷,但是也是一种思路,所以在下做一个整理,方便以后使用,还有服务各位小伙伴. django视图部分的代码.(注释才是重点) from dja ...

最新文章

  1. logging.basicConfig函数
  2. Python 0/1背包、动态规划
  3. 【NOIP2013模拟】守卫者的挑战(期望概率)
  4. Redis源码解析:07压缩列表
  5. select下拉框默认不能选择第一个选项的问题
  6. C语言 pow函数 undefined reference to `pow‘ 已解决
  7. VScode已经设置了默认浏览器依然不成功原因
  8. 如何利用ps制作一张全景图?
  9. 计算机ppt放映方式怎么改,ppt打开方式设置怎么设置
  10. 如何取消windows XP登录框,让其自动登录
  11. mysql中$和_在数据库中,$和#代表什么意思?
  12. php百度地图接口两点测距,百度地图Api 根据两个坐标点计算距离
  13. 云讯健身管理系统-11--NUXT和Redis
  14. input子系统与tp驱动
  15. QT鼠标点击窗口外的部分使窗口隐藏
  16. 广播电视标准-电视频道和频率带宽的关系
  17. 统计一个数所有质因数的个数
  18. Uncaught TypeError: Found non-callable @@iterator
  19. 脑机接口基础学习03-认识及创建Epoch
  20. 每天学一个 Linux 命令(19):rm

热门文章

  1. 「Linux」VMware安装centos7(一)
  2. Java关键字---this的由来和其三大作用
  3. mxnet系列 安装
  4. TCP/IP的基本概念
  5. 后台传值给前台p标签
  6. LeetCode(412)——Fizz Buzz(JavaScript)
  7. 操作系统---页面置换算法
  8. 前后端混合开发模式和前后端分离开发模式
  9. JavaScript实现中国地图圆点标注(二十四)
  10. python静态递归函数_python—递归函数