本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7578538
建立时间:2006年5月29日




[Django]翻译www.djangobook.com之第十七章:与遗留系统和数据库集成
软件技术

lhwork 发表于 2007/2/4 15:16:30

尽管Django最适合从零开始开发项目--所谓的"绿色领域"开发--将框架与遗留系统和数
据库集成是可能的,本章解释一些
集成策略

与遗留数据库集成
Django的数据库层从Python代码生成SQL schemas--但是对于遗留数据库,你已经拥有
SQL schemas,这种情况下你需要为你
已经存在的数据库表写模型(由于性能的原因,Django的数据库层不支持通过运行时自省
数据库的不工作的对象-关系映射,
为了使用数据库API,你需要写模型代码),幸运的是,Django带有通过阅读你的数据库
表规划来生成模型代码的辅助工具
该辅助工具称为manage.py inspectdb

使用inspectdb
inspectdb辅助工具检查你的settings文件指向的数据库,决定你表示你的表的Django模
型并打印Python模型代码到标准输出
这里是典型的从零开始的遗留数据库处理的过程,唯一的前提是Django


阅读全文(2186) | 回复(0) | 编辑 | 精华 | 删除
 


[Django]翻译www.djangobook.com之第十六章:中间件
软件技术

lhwork 发表于 2007/2/4 15:15:37

有时你需要对每个Django处理的请求运行一段代码,该代码可能需要在视图处理它之前
修改请求,或者可能日志为了调试而
记录关于请求的信息等等
Django的中间件框架本质上是进入Django的请求/应答处理的钩子,它是全局改变Django
的输入和输出的轻量的,低级的"插
件"系统
每个中间件组件负责一些专有的功能,如果你线性的阅读本书,则你已经看到中间件好
几次了:
1,我们在第12章看到的所有俏皮的会话和用户工具可能由一些小块的中间件构成(更明
确的,中间件使得你在视图中可以得
到request.session和request.user)
2,第12章讨论的站点宽度的缓存事实上只是一些中间件,如果视图的应答已经被缓存则
它们是调用你的视图方法的捷径
3,第15章的flatpages,redirects和csrf这些贡献的apps都是通过使用中间件组件来施
展它们的魔力
本章深入了解什么是中间件以及它怎样工作,并解释了


阅读全文(2132) | 回复(0) | 编辑 | 精华 | 删除
 


[Django]翻译www.djangobook.com之第十五章:贡献的其它子框架
软件技术

lhwork 发表于 2007/2/4 15:14:08

Python的众多力量中的一个是它的"电池导入"哲学,当你安装了Python,它自带了一个
巨大的常用模块"标准库",你不需要
下载任何其它东西就可以立即开始使用,Django打算遵循这个哲学,它包含了它自己的
对常用Web开发任务有用的附加标准库
本章就讲述这些附加物

关于标准库
Django的标准库位于django.contrib,其中每个子包都是一个单独部分的附属功能,这
些包没有必要互相关联,但是有些
django.contrib子包可能需要其它包
在django.contrib里功能类型没有硬性需求,其中有些包包含模型(这样就需要在你的数
据库安装数据库表),其它的包含单
独的中间件或模板

阅读全文(2812) | 回复(0) | 编辑 | 精华 | 删除
 


[Django]翻译www.djangobook.com之第十四章:缓存
软件技术

lhwork 发表于 2007/2/4 15:13:16

静态网站的简单文件直接服务于Web,性能很好,但是动态网站的一个基本的权衡是它们
是动态的,每次用户请求一个页面
Web服务器会执行各种计算--从数据库查询到模板渲染到商业逻辑--来创建你的站点的访
问者看到的页面,从处理过度的角
度来看,这代价非常昂贵
对于大多数Web应用,过度不是大问题,大部分Web程序不是washingtonpost.com或者
slashdot.org,它们只是简单的小的
到中等大小的流量不过如此的站点,但是对于中等到高流量的站点,尽可能多的去除过
度就很重要,所以缓存来了
缓存就是把一个昂贵计算的结果保存起来,于是你下次不需要再计算一次,这里是解释
它怎样为动态网页工作的伪代码:


代码
given a URL, try finding that page in the cache
if the page is in the cache:
return the cache

阅读全文(2567) | 回复(0) | 编辑 | 精华 | 删除
 


[Django]翻译www.djangobook.com之第十二章:会话,用户和注册
软件技术

lhwork 发表于 2007/2/4 15:10:51

是时候承认了:我们故意忽略了一个web开发极端重要的方面,到目前为止,我们考虑了
大量未露面的匿名用户访问我们
站点页面的流量情况,这当然不正确,访问我们站点的浏览器后面是真实的人(至少有些
时候是这样),这是被忽略的一个
大问题:当Internet服务于人而不是机器时是工作的最好的,如果我们开发真正引人注目
的站点时,最终我们将不得不与
浏览器后面的人打交道
不幸的是,这并不容易,HTTP被设计为无状态,即每个请求发生在一个空间里,两个请
求之间没有持久化,并且我们不能
计算一个请求的每个方面(IP地址,用户代理等等)来一致的显示同一个人的连续请求
浏览器开发人员很久之前就意识到HTTP的无状态导致了web开发人员很大的麻烦,就这样
cookies诞生了
cookie是一个小信息片段,浏览器存储它来代表web服务器,每次浏览器从某一服务器请
求一个页面时都会把它起初接受
的cookie回传过去

Cookies <

阅读全文(4430) | 回复(1) | 编辑 | 精华 | 删除
 


[Python]Python Challenge 答案 (6-10)
软件技术

lhwork 发表于 2007/2/4 15:02:34

第6题: zip 模块
title提示是一对。
源代码中出现〈!-- 〈-- zip --〉字样
从http://www.pythonchallenge.com/pc/def/channel.zip 下载zip文件
(提示够变态吧)
打开zip文件中的readme.txt 可以看到
welcome to my zipped list.hint1: start from 90052
hint2: answer is inside the zip
感觉解题思路基本上和上面那个反复调用url的题一样
r=re.compile(r'(\d+)$')
nextnothing='90052'while(1):
try:
f=open('./python challenge/%s.txt' % nextnothing)
result=f.read()

阅读全文(4312) | 回复(0) | 编辑 | 精华 | 删除
 


[Python]Python Challenge 答案 (1-5)
软件技术

lhwork 发表于 2007/2/4 15:01:42

从没想过解题还能这么有趣。
刚打开pythonchallenge的站点时有点莫名其妙的感觉,并不清楚到底问题在哪里。后来发现其中的奥秘就是你要在他所给的线索中找到下一题的url,这样便可以进入下一关了。
python challenge中有几个地方是重要的线索来源:
1:title (其中通常含有解题的思路提示)
2:page source (页面源代码,中间通常有数据资源,或者指明数据资源的位置)

第0题:
出现一幅画面,上面写着2**38,教你如何进入下一关。
计算出2**38 =
将浏览器中的 http://www.pythonchallenge.com/pc/def/0.html 改成 http://www.pythonchallenge.com/pc/def/274877906944.html 即可

第1题:密码转换
图片中显示出字符转换的规律 new_c=chr(ord(old_c)+2) 超过自动回转
title中提示making trans
因此比较简单的方法是直接

阅读全文(2909) | 回复(0) | 编辑 | 精华 | 删除
 


[Django]Django 提供了非关键字的url map方式
软件技术

lhwork 发表于 2007/2/4 14:56:31

http://www.djangoproject.com/documentation/url_dispatch

from django.conf.urls.defaults import *

urlpatterns = patterns('',
(r'^articles/2003/$', 'news.views.special_case_2003'),
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
)

由于没有关键字,因此所获得的参数是按顺序调用
类似:news.views.month_archive(request, '2005', '03')

阅读全文(2608) | 回复(0) | 编辑 | 精华 | 删除
 


[Django]Django的flatpage 和 redirects 都做出了调整
软件技术

lhwork 发表于 2007/2/4 14:55:34

Django果然还是一个没有正式release的项目:)
现在django将flatpage和redirect都作为两个选装项目,需要在settings中加入才能启用。另外数据结构以及命名都作了调整。
具体改动可以参看:
http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges
使用方法:
* The flatpages app: http://www.djangoproject.com/documentation/flatpages/
* The redirects app: http://www.djangoproject.com/documentation/redirects/
前几天blog里面的模版里的类命名也发生了变化。
改成{{ flatpage.content }}就可以了。

阅读全文(3389) | 回复(0) | 编辑 | 精华 | 删除
 


[Django]Django model定义使用外部模块
软件技术

lhwork 发表于 2007/2/4 14:54:54

尝试着用django写个小的试验项目,结果在model定义上就出现了问题。
由于需要使用md5模块,所以在程序最前面我加上了 import md5
但在类定义中总说没有引用这个模块。除非在类中重新import才能使用,感到不解。
查看了一下django自己的model core的代码,发现原来需要在META中使用module_constants再次声明一下才可以。
类似如下结构
from django.core import meta
import md5
from random import choiceclass test(meta.Model):
name=meta.CharField(maxlength=10) def test(self):
return md5.new('aaa').hexdigest()

阅读全文(2920) | 回复(0) | 编辑 | 精华 | 删除
 


« 21 22 23 24 25 26 27 28 29 30 »



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.109 second(s), page refreshed 144758403 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号