SlideShare a Scribd company logo
Django
-- 完美主义者快速开发之选




                 By Jetway
                 from HDU_CloudCenter
                 --2012/3/28
历史
• 许多年前,劳伦斯出版集团需要开发一个
  以新闻内容为主的网站。

• 众所周知,对于新闻网站来说,需求变化
  很快,互动性也很高
历史
• 于是, world online 的三位工程师使用
  python 开发了 Django 。这套框架是以比利
  时的吉普赛爵士吉他手 Django Reinhardt
  来命名的。



Jacob Kaplan-Moss   Adrian Holovaty   Simon Willison
@jacobian           @adrianholovaty   @simonw
设计哲学
• Django 的主要目的是简便、快速地开发数
  据库驱动的网站——动态网站。
• Django 强调代码复用,多个组件可以方便
  地以“插件”形式服务于整个框
  架, Django 有许多功能强大的第三方插件
  。
• Django 强调快速开发, DRY
• 基于 MVC (更确切的说是 MTV )
为什么是 python
• 我想可能是一下几点:
1 、 oop
2 、 module 机制,松耦合,模块插入方便
3 、代码简洁
4 、功能强大,模块多

总结起来: python 技术就是 django 技术
为什么要快速开发
• 如果我们只考虑时间代价,时间短往往意
  味着客户更满意




         Time
为什么要快速开发
• 并且你还可以有余力开发第二个版本




         Time
Django 应用
• 最著名的当然就是 Google AppEngine
• 基于 Django
• Django 应用可以很方便地在它上面部署
Django 开发工具
• 非得用 IDE 的话,我推荐 PyCharm

• 本人喜欢 txt 文本直接编辑
预备知识
• Python 基础知识
• Html 和 css 一点点,其他前端技术知道更
  好
• 数据库一点点
• 正则表达式一点点
构建一个 BLOG
• 1 、安装 python
     建议使用 python2.7
     下载地址:
  http://www.python.org/getit/releases/2.7/
  windows 下安装比较简单,只需一直下一
  步,最后导出环境变量就好了:
 c:Python27;c:Python27scripts;
构建一个 BLOG
• 2 、安装 Django
下载地址:
https://www.djangoproject.com/download/
直接将下载的 Django-1.3.1.tar.gz 解压
  python 的安装目录下,在 cmd 中进入该目
  录,输入:
      python setup.py install
最后,把 C:Python27Scripts 加入环境变量
  PATH 中
构建一个 BLOG
• 3 、创建项目
输入:
python D:Python27Scriptsdjango-admin.py startproject myblog
然后我们就可以看到:
构建一个 BLOG
• 说明:
• __init__.py 用于打包 python 工程
• manage.py 文件是 Django 中的一个工具
• setting.py 文件包含了项目的默认设置。包
  括了数据库信息、调试标志以及其他一些
  重要的变量。
• urls.py 文件在 django 里叫 URLconf ,将
  URL 映射到你应用程序的配置文件。
构建一个 BLOG
• 4 、运行开发服务器:
在 myblog 目录下,输入:
python manage.py runserver
然后在浏览器中输入:
127.0.0.1:8000
构建一个 BLOG
• 5 、创建 blog 应用
在 myblog 目录下,输入:
Python manage.py startapp blog
构建一个 BLOG
• 6 、在 setting.py 文件中,找到
  INSTALLED_APPS 元组,加入以下行:
      ‘myblog.blog’,
构建一个 BLOG
• 7 、设计 model ,
在 models.py 文件中输入:
from django.db import models

class BlogPost(models.Model):
   title = models.CharField(max_length = 150)
   body = models.TextField()
   timestamp = models.DateTimeField()
构建一个 BLOG
• 8 、设置数据库
我使用的是 mysql ,并且建立了 djangodb 数
  据库。所以在 setting.py 中,加入:
  'ENGINE': 'mysql',
  'NAME': 'djangodb',
  'USER': 'root',
  'PASSWORD': '123456',
  'HOST': 'localhost',
  'PORT': '',
构建一个 BLOG
• 9 、创建表:
输入: python manage.py syncdb
构建一个 BLOG
• 10 、设置自动 admin 应用
打开 setting.py , INSTALLED_APPS 里加
  入:
'django.contrib.admin',

然后,命令行中输入:
Python manage.py syncdb
构建一个 BLOG
• 11 、设置 urls.py
只要去除以下行的 # 就可以了:
#from django.contrib import admin
#url(r'^admin/', include(admin.site.urls)),
12 、最后就是告诉 django ,在 admin 窗口
  里显示哪一个 model ,只需在 model.py 中
  加入以下行:
from django.contrib import admin
admin.site.register(BlogPost)
构建一个 BLOG
• 13 、运行
python manage.py runserver
在浏览器里输入:
127.0.0.1:8000/admin/
动态网站
•   用户向 web 服务器请求一个文档
•   Web 服务器随即获取或生成这个文档
•   服务器再把结果返回给浏览器
•   浏览器将这个文档渲染出来
MVC
MVC
• MVC 把 web 分为数据模型,控制器和视图
  三层,可以使业务逻辑与数据表现分开;
  说白了,美工搞美工的,后台搞后台的,
  互不干扰,发挥各自优势
Django 是 MTV 分层
• Django 遵循了 MVC ( model-view-
  controller )这个分层方式,但是确切的说
  是 MTV 分层。
• Mmodel ,数据模型
• Ttemplate ,模板
• Vview ,视图
Django 是 MTV 分层
• Model 层
1 、使用的是 ORM
2 、我们所能控制的就是 models.py 文件
3 、负责数据库管理
Django 是 MTV 分层
• models.py 文件
1 、我的理解是,一个类对应数据库的一张
  表
2 、前面构件 blog 时:
from django.db import models # 导入内置数据库处理模块

class BlogPost(models.Model):
   title = models.CharField(max_length = 150) # 标题
   body = models.TextField()                # 正文
   timestamp = models.DateTimeField() # 时间戳
admin.site.register(BlogPost)      # 注册要管理的数据对
Django 是 MTV 分层
• Template 层
1 、负责怎么样显示数据
2 、说白了,就是利用一些格式化的 html 文
  件,使数据按照要求显示(显示在哪里,
  怎么显示等等)
3 、需要在工程目录下,建立 templates 文件
  夹,然后在 setting.py 中设置好 templates
  目录的路径。然后在此目录中建立所需
  html 文件。
Django 是 MTV 分层
• 在之前的 blog 应用中,我们要制作一个显
  示所有 blog 条目( title )的页面。
• list.html
<html><body>
<h1> 博客条目列表: </h1>
{% for list in title_array %}
<p> list.item_title </p>
</body></html>
Django 是 MTV 分层
• View 层
1 、 django 中的 view 层是用于控制要显示什
  么数据
2 、我们能看到的就是 views.py 文件
Django 是 MTV 分层
• views.py (可以是任意名字)
既然是要控制显示的数据,那么要显示之前
  的 blog 数据呢?比如列出所有的 title
from django.shortcuts import render_to_response
from myblog.blog.models import BlogPost

def list_title(request):
  title_array = []
  for title_data in BlogPost.objects.all():
      title_da = {}
      title_da[“item_title”] = title_data.title
      title_array.append( title_da )
  return render_to_response(‘list.html’, {‘title_array’ : title_array})
Django 是 MTV 分层
• 最后就差 URLconf 把模型,模板和视图串
  联起来了。
• 在 urls.py 文件中:
from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
   url(r'^admin/', include(admin.site.urls)),
   url(r‘list/$’, ‘myblog.blog.views’),
)
Django 是 MTV 分层
• 好吧,列出 title 的网页算是完成了
• 在浏览器中输入 127.0.0.1:8000/list
• Django 会根据 urls.py 文件找到 myblog 文
  件夹下 blog 目录中的 views.py 文件中
  list_title 函数,然后根据 model.py 文件找
  到数据库中 BlogPost 表中 title 列,并输出
  到 list.html 文件中,最后浏览器渲染出我们
  所需的网页。
Django 的过程
Django 的过程
• Web 服务器收到一个 http 请求
• Django 把 web 服务器传过来的请求转换成一个
  请求对象
• Django 在 URLconf 里查找正确的视图函数
• 调用这个视图函数,参数为请求对象以及任何捕
  捉到的 URL 参数
• 然后视图会创建并返回一个响应对象
• Django 将这个响应对象转换成 web 服务器可以
  理解的格式
• Web 服务器将响应发送给客户端
Django 一些可重用的模块
• Django 提供了很多可重用的模块
• Django 的 modules 机制是松耦合的,也就
  是说你可以很方便的插入这些模块
• 减少了多余的编写代码工作
Django 一些可重用的模块
django-ratings         django-ajax-validation   django-google-analytics   django-mailer
                                                django-email-
django-queue-service   django-announcements                               django-jits
                                                confirmation
django-liveblogging    django-atompub           django-discussion         django-galaxy

django-messages        django-audioplayer       django-db-log             django-evolution

                                                                          django-dynamic-media-
django-authopenid      django-googlemap         django-compress
                                                                          serve

django-avatar          django-graphs            django-oembed             django-clevercss

                                                django-object-view-
django-basic-blog      django-microformats                                django-chunks
                                                tracking

django-basic-library   django-tagging           django-navbar             django-ads

django-basic-people    django-survey            django-orm-cache          django-rest-interface

django-basic-places    django-voting            django-page-cms           django-registration

django-cron            django-wiki              django-photologue         django-mobileadmin

django-favorites       satchmo                  django-pingback           django-openid

django-forum           sorl-thumbnail           django-pressroom          django-oauth

django-gcal            django-mailfriend        django-mmo                django-recommender
资料
• Django book
• 《 django web 开发指南》
• https://www.djangoproject.com/
Thank you !
• Q&A

More Related Content

PDF
Introduction to pig&zookeeper
PPTX
快快樂樂學 Scrapy
PPT
互联网创业服务器运维工具集
PDF
Automate with Ansible basic (2/e)
PDF
NARU 2012 Guenther: Counting Education
PDF
Icono Seis | Estudio Multidisciplinario de Diseño Gráfico
PPTX
Project briefings May 2012: Enduring community value from mining
PPTX
食農分野ビジネスモデル入門
Introduction to pig&zookeeper
快快樂樂學 Scrapy
互联网创业服务器运维工具集
Automate with Ansible basic (2/e)
NARU 2012 Guenther: Counting Education
Icono Seis | Estudio Multidisciplinario de Diseño Gráfico
Project briefings May 2012: Enduring community value from mining
食農分野ビジネスモデル入門

Similar to Django入门 (20)

PDF
Django step0
PDF
Django development
PPT
轻量级Flash服务器开发框架(刘恒)
PDF
Python 于 webgame 的应用
PDF
模块加载策略 - 2012 SDCC, 北京
PPTX
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
PPT
Django
ODP
Clojure cnclojure-meetup
PPTX
如何,高效利用搜索引擎+构建网络工具箱
PDF
[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2
PPT
Django敏捷开发 刘天斯
PDF
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
PPT
HTML5概览
PDF
DrupalCamp Taipei 2012 迷人的有「型」網站
PPT
Html5
PPT
Html5和css3入门
PDF
Python crawling tutorial
PPTX
Artifacts management with CI and CD
PDF
從軟體開發角度
談 Docker 的應用
PPT
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
Django step0
Django development
轻量级Flash服务器开发框架(刘恒)
Python 于 webgame 的应用
模块加载策略 - 2012 SDCC, 北京
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
Django
Clojure cnclojure-meetup
如何,高效利用搜索引擎+构建网络工具箱
[Talk] 2013 06-02-hadoop整合應用-crawlzilla@hadoop q2
Django敏捷开发 刘天斯
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
HTML5概览
DrupalCamp Taipei 2012 迷人的有「型」網站
Html5
Html5和css3入门
Python crawling tutorial
Artifacts management with CI and CD
從軟體開發角度
談 Docker 的應用
[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
Ad

Django入门

  • 1. Django -- 完美主义者快速开发之选 By Jetway from HDU_CloudCenter --2012/3/28
  • 2. 历史 • 许多年前,劳伦斯出版集团需要开发一个 以新闻内容为主的网站。 • 众所周知,对于新闻网站来说,需求变化 很快,互动性也很高
  • 3. 历史 • 于是, world online 的三位工程师使用 python 开发了 Django 。这套框架是以比利 时的吉普赛爵士吉他手 Django Reinhardt 来命名的。 Jacob Kaplan-Moss Adrian Holovaty Simon Willison @jacobian @adrianholovaty @simonw
  • 4. 设计哲学 • Django 的主要目的是简便、快速地开发数 据库驱动的网站——动态网站。 • Django 强调代码复用,多个组件可以方便 地以“插件”形式服务于整个框 架, Django 有许多功能强大的第三方插件 。 • Django 强调快速开发, DRY • 基于 MVC (更确切的说是 MTV )
  • 5. 为什么是 python • 我想可能是一下几点: 1 、 oop 2 、 module 机制,松耦合,模块插入方便 3 、代码简洁 4 、功能强大,模块多 总结起来: python 技术就是 django 技术
  • 8. Django 应用 • 最著名的当然就是 Google AppEngine • 基于 Django • Django 应用可以很方便地在它上面部署
  • 9. Django 开发工具 • 非得用 IDE 的话,我推荐 PyCharm • 本人喜欢 txt 文本直接编辑
  • 10. 预备知识 • Python 基础知识 • Html 和 css 一点点,其他前端技术知道更 好 • 数据库一点点 • 正则表达式一点点
  • 11. 构建一个 BLOG • 1 、安装 python 建议使用 python2.7 下载地址: http://www.python.org/getit/releases/2.7/ windows 下安装比较简单,只需一直下一 步,最后导出环境变量就好了: c:Python27;c:Python27scripts;
  • 12. 构建一个 BLOG • 2 、安装 Django 下载地址: https://www.djangoproject.com/download/ 直接将下载的 Django-1.3.1.tar.gz 解压 python 的安装目录下,在 cmd 中进入该目 录,输入: python setup.py install 最后,把 C:Python27Scripts 加入环境变量 PATH 中
  • 13. 构建一个 BLOG • 3 、创建项目 输入: python D:Python27Scriptsdjango-admin.py startproject myblog 然后我们就可以看到:
  • 14. 构建一个 BLOG • 说明: • __init__.py 用于打包 python 工程 • manage.py 文件是 Django 中的一个工具 • setting.py 文件包含了项目的默认设置。包 括了数据库信息、调试标志以及其他一些 重要的变量。 • urls.py 文件在 django 里叫 URLconf ,将 URL 映射到你应用程序的配置文件。
  • 15. 构建一个 BLOG • 4 、运行开发服务器: 在 myblog 目录下,输入: python manage.py runserver 然后在浏览器中输入: 127.0.0.1:8000
  • 16. 构建一个 BLOG • 5 、创建 blog 应用 在 myblog 目录下,输入: Python manage.py startapp blog
  • 17. 构建一个 BLOG • 6 、在 setting.py 文件中,找到 INSTALLED_APPS 元组,加入以下行: ‘myblog.blog’,
  • 18. 构建一个 BLOG • 7 、设计 model , 在 models.py 文件中输入: from django.db import models class BlogPost(models.Model): title = models.CharField(max_length = 150) body = models.TextField() timestamp = models.DateTimeField()
  • 19. 构建一个 BLOG • 8 、设置数据库 我使用的是 mysql ,并且建立了 djangodb 数 据库。所以在 setting.py 中,加入: 'ENGINE': 'mysql', 'NAME': 'djangodb', 'USER': 'root', 'PASSWORD': '123456', 'HOST': 'localhost', 'PORT': '',
  • 20. 构建一个 BLOG • 9 、创建表: 输入: python manage.py syncdb
  • 21. 构建一个 BLOG • 10 、设置自动 admin 应用 打开 setting.py , INSTALLED_APPS 里加 入: 'django.contrib.admin', 然后,命令行中输入: Python manage.py syncdb
  • 22. 构建一个 BLOG • 11 、设置 urls.py 只要去除以下行的 # 就可以了: #from django.contrib import admin #url(r'^admin/', include(admin.site.urls)), 12 、最后就是告诉 django ,在 admin 窗口 里显示哪一个 model ,只需在 model.py 中 加入以下行: from django.contrib import admin admin.site.register(BlogPost)
  • 23. 构建一个 BLOG • 13 、运行 python manage.py runserver 在浏览器里输入: 127.0.0.1:8000/admin/
  • 24. 动态网站 • 用户向 web 服务器请求一个文档 • Web 服务器随即获取或生成这个文档 • 服务器再把结果返回给浏览器 • 浏览器将这个文档渲染出来
  • 25. MVC
  • 26. MVC • MVC 把 web 分为数据模型,控制器和视图 三层,可以使业务逻辑与数据表现分开; 说白了,美工搞美工的,后台搞后台的, 互不干扰,发挥各自优势
  • 27. Django 是 MTV 分层 • Django 遵循了 MVC ( model-view- controller )这个分层方式,但是确切的说 是 MTV 分层。 • Mmodel ,数据模型 • Ttemplate ,模板 • Vview ,视图
  • 28. Django 是 MTV 分层 • Model 层 1 、使用的是 ORM 2 、我们所能控制的就是 models.py 文件 3 、负责数据库管理
  • 29. Django 是 MTV 分层 • models.py 文件 1 、我的理解是,一个类对应数据库的一张 表 2 、前面构件 blog 时: from django.db import models # 导入内置数据库处理模块 class BlogPost(models.Model): title = models.CharField(max_length = 150) # 标题 body = models.TextField() # 正文 timestamp = models.DateTimeField() # 时间戳 admin.site.register(BlogPost) # 注册要管理的数据对
  • 30. Django 是 MTV 分层 • Template 层 1 、负责怎么样显示数据 2 、说白了,就是利用一些格式化的 html 文 件,使数据按照要求显示(显示在哪里, 怎么显示等等) 3 、需要在工程目录下,建立 templates 文件 夹,然后在 setting.py 中设置好 templates 目录的路径。然后在此目录中建立所需 html 文件。
  • 31. Django 是 MTV 分层 • 在之前的 blog 应用中,我们要制作一个显 示所有 blog 条目( title )的页面。 • list.html <html><body> <h1> 博客条目列表: </h1> {% for list in title_array %} <p> list.item_title </p> </body></html>
  • 32. Django 是 MTV 分层 • View 层 1 、 django 中的 view 层是用于控制要显示什 么数据 2 、我们能看到的就是 views.py 文件
  • 33. Django 是 MTV 分层 • views.py (可以是任意名字) 既然是要控制显示的数据,那么要显示之前 的 blog 数据呢?比如列出所有的 title from django.shortcuts import render_to_response from myblog.blog.models import BlogPost def list_title(request): title_array = [] for title_data in BlogPost.objects.all(): title_da = {} title_da[“item_title”] = title_data.title title_array.append( title_da ) return render_to_response(‘list.html’, {‘title_array’ : title_array})
  • 34. Django 是 MTV 分层 • 最后就差 URLconf 把模型,模板和视图串 联起来了。 • 在 urls.py 文件中: from django.conf.urls.defaults import patterns, include, url from django.contrib import admin urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r‘list/$’, ‘myblog.blog.views’), )
  • 35. Django 是 MTV 分层 • 好吧,列出 title 的网页算是完成了 • 在浏览器中输入 127.0.0.1:8000/list • Django 会根据 urls.py 文件找到 myblog 文 件夹下 blog 目录中的 views.py 文件中 list_title 函数,然后根据 model.py 文件找 到数据库中 BlogPost 表中 title 列,并输出 到 list.html 文件中,最后浏览器渲染出我们 所需的网页。
  • 37. Django 的过程 • Web 服务器收到一个 http 请求 • Django 把 web 服务器传过来的请求转换成一个 请求对象 • Django 在 URLconf 里查找正确的视图函数 • 调用这个视图函数,参数为请求对象以及任何捕 捉到的 URL 参数 • 然后视图会创建并返回一个响应对象 • Django 将这个响应对象转换成 web 服务器可以 理解的格式 • Web 服务器将响应发送给客户端
  • 38. Django 一些可重用的模块 • Django 提供了很多可重用的模块 • Django 的 modules 机制是松耦合的,也就 是说你可以很方便的插入这些模块 • 减少了多余的编写代码工作
  • 39. Django 一些可重用的模块 django-ratings django-ajax-validation django-google-analytics django-mailer django-email- django-queue-service django-announcements django-jits confirmation django-liveblogging django-atompub django-discussion django-galaxy django-messages django-audioplayer django-db-log django-evolution django-dynamic-media- django-authopenid django-googlemap django-compress serve django-avatar django-graphs django-oembed django-clevercss django-object-view- django-basic-blog django-microformats django-chunks tracking django-basic-library django-tagging django-navbar django-ads django-basic-people django-survey django-orm-cache django-rest-interface django-basic-places django-voting django-page-cms django-registration django-cron django-wiki django-photologue django-mobileadmin django-favorites satchmo django-pingback django-openid django-forum sorl-thumbnail django-pressroom django-oauth django-gcal django-mailfriend django-mmo django-recommender
  • 40. 资料 • Django book • 《 django web 开发指南》 • https://www.djangoproject.com/