收藏 分享(赏)

The_Django_Book中文版.doc

上传人:tangtianxu1 文档编号:3128430 上传时间:2018-10-04 格式:DOC 页数:496 大小:2.65MB
下载 相关 举报
The_Django_Book中文版.doc_第1页
第1页 / 共496页
The_Django_Book中文版.doc_第2页
第2页 / 共496页
The_Django_Book中文版.doc_第3页
第3页 / 共496页
The_Django_Book中文版.doc_第4页
第4页 / 共496页
The_Django_Book中文版.doc_第5页
第5页 / 共496页
点击查看更多>>
资源描述

1、The Django BookThe Django Book目录The Django Book 1第一章 Django 简介 . 25什么是 Web 框架 25MVC 设计模式 . 26django 历史 28如何阅读本书 . 29所需编程知识 . 30python 所需知识 . 30Django 之新特性 30获取帮助 . 31下一章. 31第二章 入门 . 33Python 安装 33Django 安装 33官方发布版安装 33通过 subversion 安装 Django 34安装数据库 . 35在 Django 中使用 PostgreSQL. 35在 Django 中使用 SQLite

2、 3 36在 Django 中使用 MySQL . 36使用无数据库支持的 Django . 36开始一个项目 . 36开发服务器 . 37下一章讲什么? . 38第三章:动态网页基础 39第一份视图:动态内容 391 /The Django Book将 URL 映射到视图 . 40Django 是怎么处理请求的 43Django 如何处理请求 : 完整细节 . 43URL 配置和松耦合 45404 错误 . 45第二个视图:动态 URL 46关于漂亮 URL 的一点建议 47带通配符的 URL 匹配模式 47Django 漂亮的出错页面 . 50下一章将要讲? . 51第四章 Django

3、模板系统 . 53模板系统基本知识 53如何使用模板系统 54创建模板对象 . 55模板渲染 . 56同一模板,多个上下文 58背景变量的查找 59玩一玩上下文(context)对象 62基本的模板标签和过滤器 63标签. 63过滤器. 68理念与局限 . 69在视图中使用模板 71模板加载. 72render_to_response() 75locals() 技巧 76get_template()中使用子目录 76include 模板标签 77模板继承. 78接下来?. 812 /The Django Book第五章:和数据库打交道:数据建模. 83在视图中进行数据库查询的笨方法. 83MT

4、V 开发模式 84数据库配置 . 85你的第一个应用程序 87在 Python 代码里定义模型. 88你的第一个模型 . 89模型安装. 91基本数据访问 . 94添加模块的字符串表现 95插入和更新数据 . 96选择对象. 97数据过滤 . 98获取单个对象 . 99数据排序 . 99排序101限制返回的数据.101删除对象102修改数据库表结构.102添加字段 103删除字段 105删除 Many-to-Many 字段 .105删除模型 105下一步?106第六章:Django 管理站点.107激活管理界面 107使用管理界面 108用户、组和许可.115定制管理界面 116定制管理界面的

5、外观和感觉 .1183 /The Django Book定制管理索引页面.118什么时候、为什么使用管理界面119下一步是什么? 119第七章 表单处理 121搜索 .121自定义视感 130从模型创建表单 131下一步?132第八章 高级视图和 URL 配置.133URLconf 技巧.133流线型化(Streamlining)函数导入 .133使用多个视图前缀.135调试模式中的特例.135使用命名组 136理解匹配/分组算法 .138使用缺省视图参数.144特殊情况下的视图.144从 URL 中捕获文本 145决定 URLconf 搜索的东西146包含其他 URLconf 147捕获的参

6、数如何和 include()协同工作 .148额外的 URLconf 如何和 include()协同工作148接下来?150第九章: 通用视图 .151使用通用视图 151对象的通用视图 153扩展通用视图 154制作友好的模板 Context .154添加额外的 Context .155显示对象的子集.1564 /The Django Book用函数包装来处理复杂的数据过滤 157处理额外工作 158接下来?159第十章: 深入模板引擎161模板语言回顾 161RequestContext 和 Context 处理器 162django.core.context_processors.aut

7、h166django.core.context_processors.debug .166django.core.context_processors.i18n 167django.core.context_processors.request.167写 Context 处理器的一些建议.167模板加载的内幕 168扩展模板系统 169创建一个模板库.169自定义模板过滤器.170自定义模板标签.172简单标签的快捷方式 .177包含标签 178编写自定义模板加载器.180使用内置的模板参考.181配置独立模式下的模板系统 .182接下来?182第十一章 输出非 HTML 内容183基础: 视

8、图和 MIME 类型 183生成 CSV 文件 184生成 PDF 文件 185安装 ReportLab186编写视图 186复杂的 PDF 文件 187其它的可能性 1885 /The Django Book内容聚合器应用框架.189初始化189一个简单的 Feed190一个更复杂的 Feed 192指定 Feed 的类型.193闭包194语言194URLs195Sitemap 框架.196安装196初始化197Sitemap 类 .197快捷方式 199创建一个 Sitemap 索引200通知 Google200接下来?201第十二章 会话、用户和注册 .203Cookies .203存取

9、 Cookies.204好坏参半的 Cookies .205Django 的 Session 框架 206打开 Sessions 功能 206在视图中使用 Session 206设置测试 Cookies .208在视图(View) 外使用 Session 209何时保存 Session209浏览器关闭即失效会话 vs. 持久会话210其他的 Session 设置.210用户与 Authentication .211打开认证支持 2126 /The Django Book使用 User 对象 .212登录和退出 214限制已登录用户的访问 .216管理 Users, Permissions 和

10、Groups 218在模板中使用认证数据 .222其他一些功能:权限,组,消息和档案 222权限222组 .224消息224档案225接下来?226第十三章 缓存机制 227设定缓存227内存缓冲 228数据库缓存 229文件系统缓存 229本地内存缓存 230简易缓存(用于开发阶段) .230仿缓存(供开发时使用) .230CACHE_BACKEND 参数 .230站点级 Cache 231视图级缓存 232在 URLconf 中指定视图缓存 233低层次缓存 API233上游缓存235使用 Vary 头标 .236其它缓存头标 237其他优化239MIDDLEWARE_CLASSES 的顺

11、序.239接下来?2397 /The Django Book第十四章 集成的子框架.241Django 标准库 241多个站点242情景 1:对多个站点重用数据.242情景 2:把你的网站名称/域存储到唯一的位置 242如何使用多站点框架 .243多站点框架的功能.243当前站点管理器.247Django 如何使用多站点框架 .248Flatpages - 简单页面 .248使用简单页面 249添加、修改和删除简单页面 .250使用简单页面模板.251重定向252使用重定向框架.252增加、变更和删除重定向 .253CSRF 防护 253一个简单的 CSRF 例子 .254稍微复杂一点的 CS

12、RF 例子 .254防止 CSRF 254人性化数据 256apnumber .256intcomma256intword .256ordinal 257标记过滤器 257下一步?258第十五章 中间件 259什么是中间件 259安装中间件 2608 /The Django Book中间件方法 260Initializer: _init_(self) .261Request 预处理函数 : process_request(self, request)261View 预处理函数: process_view(self, request, view, args, kwargs) .261Respon

13、se 后处理函数 : process_response(self, request, response) .262Exception 后处理函数: process_exception(self, request, exception).262内置的中间件 263认证支持中间件.263通用中间件 263压缩中间件 264条件化的 GET 中间件.264反向代理支持 (X-Forwarded-For 中间件) .264会话支持中间件.265站点缓存中间件.265事务处理中间件.265X-View 中间件 .265下一章266第十六章 集成已有的数据库和应用267与遗留数据库整合.267使用 ins

14、pectdb.267清理生成的 Models268和遗留 Web 应用集成 .271下面要干嘛? 272第 17 章 扩展 Django 管理界面 273管理之道274受信任用户 274编辑274结构化的内容 275就此打住 275定制管理模板 2759 /The Django Book自定义模型模板.276自定义 JavaScript .278创建自定义管理视图.278覆盖内置视图 281接下来?282第十八章 国际化 283在 Python 代码中指定翻译字符串 284标准的翻译函数.284标记字符串为不操作 .285惰性翻译 285复数的处理 286编译信息文件 290set_langu

15、age 重定向视图 292在你自己的项目中使用翻译 .293javascript_catalog 视图.295使用 JavaScript 翻译目录 .295创建 JavaScript 翻译目录 .296熟悉 gettext 用户的注意事项296下一章296第十九章 安全 299Web 安全现状299解决方案 300跨站点脚本 (XSS) 301解决方案 302伪造跨站点请求 303会话伪造/劫持.303解决方案 304邮件头部注入 304解决方案 305目录遍历30510 /The Django Book解决方案 306暴露错误消息 307解决方案 307安全领域的总结 307接下来?308第

16、二十章:部署 Django 309无共享309关于个人偏好的备注.311用 Apache 和 mod_python 来部署 Django.311基本配置 312在同一个 Apache 的实例中运行多个 Django 程序313用 mod_python 运行一个开发服务器 .314使用相同的 Apache 实例来服务 Django 和 Media 文件314错误处理 315处理段错误 315使用 FastCGI 部署 Django 应用316运行你的 FastCGI 服务器 .317在 Apache 中以 FastCGI 的方式使用 Django319FastCGI 和 lighttpd320在

17、使用 Apache 的共享主机服务商处运行 Django.321可扩展性322运行在一台单机服务器上 .322分离出数据库服务器 .323运行一个独立的媒体服务器 .324实现负担均衡和数据冗余备份325慢慢变大 326性能优化327RAM 怎么也不嫌多 328禁用 Keep-Alive .328使用 memcached.32811 /The Django Book经常使用 memcached 329参加讨论 329下一步?329附录 A:案例研究 331人物列表331为什么选择 Django? 332起步 .333移植现有代码 333现状 .334团队结构335部署 .336附录 B 数据模

18、型定义参考339字段 .339AutoField 340BooleanField .340CharField.340CommaSeparatedIntegerField .340DateField.340DateTimeField .340EmailField .341FileField 341FilePathField .342FloatField 342ImageField 343IntegerField.343IPAddressField.343NullBooleanField .343PhoneNumberField .343PositiveIntegerField.343Positi

19、veSmallIntegerField 34412 /The Django BookSlugField .344SmallIntegerField 344TextField .344TimeField 344URLField344USStateField345XMLField .345通用字段选项 345null345blank .346choices 346db_column 347db_index .347default 347editable.347help_text.347primary_key 347radio_admin348unique.348unique_for_date .3

20、48unique_for_month 348unique_for_year .348verbose_name 348关系 .349多对一关系 349多对多关系 351模型的 Metadata 选项.353db_table353get_latest_by 354order_with_respect_to .35413 /The Django Bookordering 354permissions.355unique_together .355verbose_name 356verbose_name_plural .356管理器356管理器名称 357自定义管理器 357模型方法360_str_3

21、61get_absolute_url .361执行定制的 SQL .362覆盖默认的 Model 方法.363Admin 选项 364date_hierarchy364fields .364js .366list_display 366list_display_links .368list_filter .369list_per_page 369list_select_related .369ordering 369save_as .370save_on_top .370search_fields .370附录 C 数据库 API 参考 373创建对象373当您保存的时候发生了什么?374自增

22、主键 37414 /The Django Book保存对对象做的修改.375获取对象376缓存与查询集 377过滤器对象 377级联过滤器 378限量查询集 379返回新的 QuerySets 的 查询方法 .380QuerySet Methods That Do Not Return QuerySets 385Field Lookups 388exact .388iexact 389contains 389icontains .390gt, gte, lt, and lte .390in 390startswith390istartswith .391endswith and iendswi

23、th 391range 391year, month, and day 391isnull .392search .392The pk Lookup Shortcut.392使用 Q 对象做联合查找 393关系对象394多对多关系 398删除对象399Extra Instance Methods 400get_FOO_display().400get_next_by_FOO(*kwargs) and get_previous_by_FOO(*kwargs) .40115 /The Django Bookget_FOO_filename() 401get_FOO_url() .401get_FO

24、O_size()402save_FOO_file(filename, raw_contents) 402get_FOO_height() and get_FOO_width() .402捷径 .402get_object_or_404() .402get_list_or_404().403回归原始的 SQL 操作 403附录 D 通用视图参考 .405通用视图的常见参数.405简易通用视图 405渲染模板 406重定向到另外一个 URL406列表/详细 通用视图 .407对象列表 407Detail Views 409基于日期的通用视图.412存档索引 412Year Archives 414

25、Month Archives.415Week Archives 417Day Archives .419Archive for Today 420Date-Based Detail Pages421Create/Update/Delete Generic Views .423Create Object View .424Update Object View 425Delete Object View .427附录 E 配置参考 .42916 /The Django Book什么是 settings 文件 429默认 Settings 429查看你已经改变了哪些 Settings430在 Pyt

26、hon 代码中使 Settings 430运行期间修改 Settings .430指派 Settings: DJANGO_SETTINGS_MODULE 431django-admin.py 工具431服务器端(mod_python)432不设置 DJANGO_SETTINGS_MODULE 而使用 Settings .432定制默认的 Settings .433configure()或 DJANGO_SETTINGS_MODULE 之一是必须的433合法的 Settings 434ABSOLUTE_URL_OVERRIDES .434ADMIN_FOR434ADMIN_MEDIA_PREFI

27、X .434ADMINS 434ALLOWED_INCLUDE_ROOTS .435APPEND_SLASH .435CACHE_BACKEND 435CACHE_MIDDLEWARE_KEY_PREFIX.435DATABASE_ENGINE.435DATABASE_HOST 436DATABASE_NAME .436DATABASE_OPTIONS.436DATABASE_PASSWORD.436DATABASE_PORT 436DATABASE_USER.437DATE_FORMAT .437DATETIME_FORMAT .437DEBUG 43717 /The Django Book

28、DEFAULT_CHARSET .438DEFAULT_CONTENT_TYPE.438DEFAULT_FROM_EMAIL 438DISALLOWED_USER_AGENTS 438EMAIL_HOST .438EMAIL_HOST_PASSWORD .439EMAIL_HOST_USER .439EMAIL_PORT .439EMAIL_SUBJECT_PREFIX439FIXTURE_DIRS .439IGNORABLE_404_ENDS .440IGNORABLE_404_STARTS 440INSTALLED_APPS.440INTERNAL_IPS .440JING_PATH 44

29、0LANGUAGE_CODE .441LANGUAGES 441MANAGERS .441MEDIA_ROOT442MEDIA_URL.442MIDDLEWARE_CLASSES 442MONTH_DAY_FORMAT .442PREPEND_WWW.443PROFANITIES_LIST.443ROOT_URLCONF443SECRET_KEY 443SEND_BROKEN_LINK_EMAILS443SERIALIZATION_MODULES 444SERVER_EMAIL444SESSION_COOKIE_AGE 44418 /The Django BookSESSION_COOKIE_

30、DOMAIN.444SESSION_COOKIE_NAME.444SESSION_COOKIE_SECURE 445SESSION_EXPIRE_AT_BROWSER_CLOSE 445SESSION_SAVE_EVERY_REQUEST 445SITE_ID445TEMPLATE_CONTEXT_PROCESSORS 445TEMPLATE_DEBUG 446TEMPLATE_DIRS446TEMPLATE_LOADERS.446TEMPLATE_STRING_IF_INVALID 446TEST_RUNNER.446TEST_DATABASE_NAME447TIME_FORMAT447TI

31、ME_ZONE.447URL_VALIDATOR_USER_AGENT.448USE_ETAGS .448USE_I18N 448YEAR_MONTH_FORMAT .448附录 F 内建的模板标签和过滤器.450内建标签参考 450block .450comment 450cycle450debug451extends .451filter 451firstof 451for .452if .45219 /The Django Bookifchanged 454ifequal.454ifnotequal .455include 455load.455now.455regroup .457sp

32、aceless.458ssi .459templatetag 459url .460Built-in Filter Reference 460add .460addslashes 461capfirst461center .461cut 461date 461default 462default_if_none 462dictsort .462dictsortreversed 462divisibleby .462escape.463filesizeformat 463first .463fix_ampersands.464floatformat .464get_digit464join465

33、20 /The Django Booklength .465length_is .465linebreaks .465linebreaksbr 466linenumbers 466ljust .466lower 466make_list 466phone2numeric.467pluralize 467pprint 467random .468removetags .468rjust 468slice.468slugify .468stringformat 469striptags 469time 469timesince 469timeuntil .470title .470truncate

34、words 470truncatewords_html .470unordered_list 471upper 471urlencode472urlize .472urlizetrunc.472wordcount 47221 /The Django Bookwordwrap .472yesno 473附录 G 管理实用工具 .475用法 .475可选的 action 476diffsettings 476reset appname appname .479runfcgi options479runserver optional port number, or ipaddr:port 480sh

35、ell 481sql appname appname .481sqlall appname appname .481sqlclear appname appname .481sqlcustom appname appname .481sqlindexes appname appname .482sqlreset appname appname .482sqlsequencereset appname appname 482startapp appname 482startproject projectname 482syncdb 482test .483可用选项483help.484noinp

36、ut .484noreload .484version 484verbosity .484adminmedia 485附录 H HTTP 请求(Request)和回应(Response )对象.486HttpRequest 对象 .48622 /The Django BookQueryDict 对象 488一个完整的例子.490HttpResponse .491构造 HttpResponse .491设置 Headers .491HttpResponse 的子类 .492返回错误 494自定义 404 (无法找到 ) 视图 494自定义 500 (服务器错误 ) 视图 49523 /第一章 D

37、jango 简介第一章 Django 简介本书所讲的是 Django:一款能够节约你的时间并且让开发乐趣横生的 web 开发框架。使用Django,花极少时间即可构建和维护质量上乘的 Web 应用。从好的方面来看,Web 开发激动人心且富于创造性;从另一面来看,它却是份繁琐而令人生厌的工作。通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西。为了达到这个目标,Django 提供了通用 Web 开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。同时,Django 尝试留下一些方法,来让你根据需要在 frame

38、work 之外来开发。本书的目的是将你培养成 Django 专家。主要侧重于两方面:第一,我们深度解释 Django 到底做了哪些工作以及如何用她构建 Web 应用;第二,我们将会在适当的地方讨论更高级的概念,并解释如何 在自己的项目中高效的使用这些工具。通过阅读此书,你将学会快速开发功能强大网站的技巧,并且你的代码将会十分 清晰,易于维护。在这一章中,我们将一览 Django 的全貌。什么是 Web 框架Django 是新一代 Web 框架 中非常出色的成员。那么 Web 框架这个术语的确切含义到底是什么呢?要回答这个问题,让我们来看看通过编写标准的 CGI 程序来开发 Web 应用,这在大

39、约 1998 年的时候非常流行。编写 CGI Web 应用时,你需要自己处理所有的操作,就像你想烤面包, 但是都需要自己生火一样。下面是实例,一个简单的 CGI 脚本,用 Python 写的,读取数据库 并显示最新发布的十本书。#!/usr/bin/pythonimport MySQLdbprintprintprintprintprintprint“Content-Type: text/html“Books“Books“connection = MySQLdb.connect(user=me, passwd=letmein, db=my_db)cursor = connection.curso

40、r()25 /第一章 Django 简介cursor.execute(“SELECT name FROM books ORDER BY pub_date DESC LIMIT 10“)for row in cursor.fetchall():print “%s“ % row0print “print “connection.close()代码十分简单。首先,根据 CGI 的要求输出一行 Content-Type,接下来是一个空行。再接下来是一些 HTML 的起始标签,然后连接数据库并执行一些查询操作,获取最新的十本书。遍历这些书,同时生成一个 HTML 的无序序列。最后,输出 HTML 的结束

41、标签并且关闭数据库连接。像这样的一次性的动态页面,从头写起的方法并非一定不好。其中一点:这些代码简单易懂,就算是一个初起步的 开发者都能读明白这 16 行的 Python 代码,而且这些代码从头到尾做了什么都能了解得一清二楚。不需要学习额外 的背景知识,没有额外的代码需要去了解。同样,也易于部署这 16 行代码,只需要将它保存为一个 latestbooks.cgi 的 文件,上传到 Web 服务器上,通过浏览器访问即可。但是,一个 Web 应用要远复杂于以上情况,这种方法很快会失效,而且你将会要面对很多问题:当多个动态页面需要同时连接数据库时,将会发生什么?当然,连接数据库的代码不应该同时存在

42、于各个独立的 CGI 脚本中,所以最踏实的做法是把这些代码重新组织到一个公共函数里面。一个开发人员 确实 需要去关注如何输出 Content-Type 以及完成所有操作后去关闭数据 库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。那些初始化和释放 相关的工作应该交给一些通用的框架来完成。如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗?从这点看来,就需要一些环境相关的配置文件。如果一个 Web 设计师,完全没有 Python 开发经验,但是又需要重新设计页面的话,又将 发生什么呢?理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这

43、样 Web 设计师的重新设计不会影响到之前的业务逻辑。以上正是 Web 框架致力于解决的问题。Web 框架为应用程序提供了一套程序框架, 这样你可以专注于编写清晰、易维护的代码,而无需从头做起。简单来说,这就是 Django 所能做的。MVC 设计模式26 /第一章 Django 简介让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过 Web 框架来实现的功能与之前的方式有何不同。下面就是通过使用 Django 来完成以上功能的例子:# models.py (the database tables)from django.db import modelsclass Book(model

44、s.Model):name = models.CharField(maxlength=50)pub_date = models.DateField()# views.py (the business logic)from django.shortcuts import render_to_responsefrom models import Bookdef latest_books(request):book_list = Book.objects.order_by(-pub_date):10return render_to_response(latest_books.html, book_l

45、ist: book_list)# urls.py (the URL configuration)from django.conf.urls.defaults import *import viewsurlpatterns = patterns(,(rlatest/$, views.latest_books),)# latest_books.html (the template)BooksBooks% for book in book_list % book.name % endfor %27 /第一章 Django 简介先不要担心这个东西是 如何 工作的,我们主要是先想让你知道总体的设计,这里

46、关键要注意的是 分离问题models.py 文件主要用一个 Python 类来描述数据表。称为 模型(model) 。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的 SQL 语句。view.py 文件的 latest_books() 函数中包含了该页的业务层逻辑。这个函数叫做 视图(view) 。urls.py 指出了什么样的 URL 调用什么的视图,在这个例子中 /latest/ URL 将会调用 latest_books() 这个函数latest_books.html 是 html 模板,它描述了这个页面的设计是如何的。这些

47、部分松散的组合在一起就是模型视图控制器(MVC)的设计模式。简单的说, MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来。这种设计模式关键的优势在于各种组件都是 松散结合 的。这样,每个由 Django 驱动 的 Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。比如,开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。数据库管理员可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。本书中,每个组件都有它

48、自己的一个章节。比如,第三章涵盖了视图,第四章是模板, 而第五章是模型。同时第五章也深入讨论了 Django 的 MVC 思想。django 历史在我们讨论代码之前我们需要先了解一下 Django 的历史。知道了一些历史知识有助于理解为什么 Django 要建立这个框架,因为这些历史有助于理解 Django 为何会这样运作。如果你曾编写过网络应用程序。那么你很有可能熟悉之前我们的 CGI 例子。传统的 网络开发人员的开发流程是这样的:1. 从头开始编写网络应用程序。2. 从头编写另一个网络应用程序。3. 从第一步中总结(找出其中通用的代码),并运用在第二步中。4. 重构代码使得能在第 2 个程

49、序中使用第 1 个程序中的通用代码。5. 重复 2-4 步骤若干次。28 /第一章 Django 简介6. 意识到你发明了一个框架。这正是为什么 Django 建立的原因!Django 是从真实世界的应用中成长起来的,它是由 堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组编写的。它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和 Simon Willison 开始用 Python 来编写程序。 当时他们的World Online 小组制作并维护当地的几个新闻站点, 并在以新闻界特有的快节奏开发环境中逐渐发展. 这些站点包括有 LJW、L 和 KU, 记者(或管理层) 要求增加的特征或整个程序都能在计划时间内快速的被建立,这些时间通常只有几天或几个小时。因此为了需要,Adrian 和 Simon 开发了一种节省时间的网络程序开发框架,这是在截止时间前能完成程序的唯一途径。2005 年的夏天,当这个框架开发完成时,它已经用来制作了很多个 World Online

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报