昨天去 google dev day 晃了一圈,分会场上主要听的是 Google 的新产品发布会,感觉那个 map api 有点意思,可以在上面做点东西玩玩,于是晚上回来小看了一下例子,做了一个玩玩,还是满简单的,代码如下。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>"> <html xmlns="<http://www.w3.org/1999/xhtml>"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>Google Maps JavaScript API Example</title> <script src="<http://ditu.google.com/maps?file=api>&v=2&key=*****" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.addControl(new GLargeMapControl()); map.addControl(new GScaleControl()); GEvent.addListener(map, "moveend", function() { document.getElementById("center").innerHTML = map.getCenter(); }); map.setCenter(new GLatLng(39.96255, 116.358969), 17); } } //]]> </script> </head> <body onload="load()" onunload="GUnload()"> <div id="map" style="width: 960; height: 800px"></div> 地图中心:<div id="center"></div> </body> </html> 30行出头,简单吧,那个key="***“那一块是要自己去申请对应你域名的key,我写上去也没用,还影响排版,就8写了,呵呵。这个东西存成.
历经连续两天晚上3点睡觉调出来的日历,被系统一次升级彻底打回原型,特此哀悼,看来有空要做一个 widget 了,把我的日历做成一个 widget 加到 sidebar 上去,看你丫还怎么给我打回原型,哼哼。
Google开发者日,感觉还行,讲了些 Google 的玩具,有空想玩玩,以前咋没发现这些东西有那么好玩呢,呵呵。还有就是去听 python 它老爹说了说东西,新要做的 python3000 感觉有些好玩的东西,8过还是先把2.5装上吧,本来一直不装,今天突然想装了,于是,装吧 :)
btw: live write beta2 好像不闪了….
不知道应不应该叫这个名字,反正给我的感觉就是它是静态的页面,纯的html语言,没有python在里面,在刚开始用django的时候,就想把主页做成一个静态的 东西,那时候用的是step by step中第一讲的方法,只是把那个写死在程序中的字符串换成了一个文件的内容,然后改那个文件就可以更改主页,但是发现用不了外 部链接的css,虽然可以把css内嵌到html文件中,但总觉得的些不爽。后来往后翻了翻step by step,看到最后一讲有说怎么在一个view中渲染一个简单的模板并输出,也就在是urls.py中加上下面这条语句:
(r'^$', ‘django.views.generic.simple.direct_to_template’,
{‘template’: ‘homepage/index.html’}),
这时候才算找到了好一些的方法,在那个目录下面就可以按正常网页开发了,不过外部链接的文件都要使用基于templates的路径,也就是说那个index.html 要放在templatex/hompage目录下,如果下面要使用css文件,还不能使用相对于index.html的相对路径,有些郁闷,正在考虑是不是把所有的c ss文件什么的放到一个统一的目录下,目录结构大变动啊。呵呵,睡觉了,醒来再折腾吧:)
先是存成sql语句,然后回来才想起来,PHP用的是我自己建的表,而Django中要用它的表,两个结构不同,用不了sql语句,于是想到用导入csv文件的办法, 刚好setp by step有这个例子,而且Django中可以直接导入csv文件,不用我再去写那些分隔什么的了,还是满方便的,所以就想到了导入csv文件。
想好了就要开工,那个例子以前做过,所以还有点印象。首先是写module,主要就是构建数据表的结构,想了好久,才觉得大概能够把表结构定下来了,不过还是相当于留 了两个备注字段,应该够用了吧,如果不够用需要倒数据的话那真要疯了。其实说疯也有些夸张,再写程序导吧,呵呵。
一开始写的module中没有主键,主要是看它的文档中说它会自己加上一个自增的主键,所以没去理会,但是在导入的时候,有一个filter要选择一条记录,一开始不 知道,使用第一个字段,即申请人做关键字,结果前面写进去的记录当碰到后面相同申请人的记录时,全部被覆盖(我的那个csv文件后面有一个空行,在导入的时候读入最后 一行的时候会出错,下标越界,不过还好,前面的数据都导入了)。后来把csv文件分成了大概10条一个的小文件,再导入的时候才发现是这个问题,再看看它的文档说是如 果用户自己没有设置自境的主键的话,系统会给设一个,不过我试了,不能调用,于是自己设一个吧(又把表结构重弄了一遍,真的很FT,还好没什么数据),后来问题就解决 了。在module.py中的__str__方法中可以设置在管理界面中每一条记录显示的内容,step by step中说还有一个__repr__,但是我用了后没反应,不知道为什么。最后还要加上一个class Admin: pass以开启管理功能。
在使用导入csv功能的时候,那个urls的映射要弄好,要不然服务器会提示找不到匹配的模式,不予解析。一般是在根目录下的urls.py中设置如果要访问app, 则把app中的utls.py包含进来,然后再在urls.py中解析对应于app的地址映射。
本来想用sqlite数据库,不过用了一段时间,感觉上还是有些不方便的地方,一是管理工具不是很方便,二是性能上处于劣势,最后考虑了一会,还是选用了mysql, 导入的时候明显速度快了很多,不过那段导入的代码还是很有用的,到时候如果再换表结构的话,就又要用到它了。
数据方面总算折腾完了,现在要把原来的表的记录改动一下,让它适应新的表的结构,还有一些细节方面的问题,像文件上传,显示的图标什么的,慢慢做吧,不管怎么说,大头 数据导进来了,也没什么好怕的了。
btw: django中不能直接接收2000-01-01格式的字符串作为datetime类的输入,还要把它拆开成'2000', ‘01’, ‘01’三个字串,不知道后续版本会不会把这个功能加上,虽然不加也能用,只要用下标把子串取出来就可以了,但总感觉有些不爽。
本来以为它们两个是没什么太大区别的,但是今天上网上一查,发现还是有些区别的。最主要的大概就是在CSS定义中,ID是以#开头的,而class是以.开头的。而且 在网页编程中,一个ID只能出现一次,就像某个东西的标识符一样,在一个页面中,只能有一个,而class是可以出现多次的。看了一篇文章说,id是先找到结构或内容 ,再套用样式,而class是先定义好样式,再应用到多个结构或内容上,呵呵,还真有点这么回事 :)
刚看了怎么在django的工程中加入资源文件夹,即放一些静态内容,像html页面,css文件什么的,其实放在外面也可以,但是总感觉有些怪,还好step by step讲到了这一课,其实也没什么难的,它给的例子是在urls.py中加了一行,以解析URL,然后在settings.py中加上了一个相当于常量定义的命令, 把一个目录定义成常量,然后在网站根目录下建立了这个目录,于是,就可以了。urls.py中更改的和以前有些不太相同,使用了django.views.stati c.serve,而此参数需要一个参数,文档根目录,所以需要在后面加上{‘document_root’: settings.STATIC_PATH}),那个settings.需要在开头加上import django.conf import settings以导入 模块。其它在网页中就可以使用/site_media来访问./media目录了,那个site_media是在urls.py中定义的,那个patten也有些不同 ,后面加上了一些东西,r'^site_media/(?P<path>.*)$',还没太弄懂,过过再说。
由于要存储文件,所以使用了FileField类型的变量,后来学会了查db_api手册,知道了它的方法,比如想设个超链接,可以调用get_FOO_url得到它 的路径,不过在这之前要设置好settings.py中MEDIA_URL的值,否则得不到正确的结果,在设置的时候,需要在MEDIA_URL最后的那个目录后加一 个/,否则好像地址不能很好的识别。别的还有一些方法,像文件名什么的,另外还有ImageField特有的一些方法还是满不错的。不过不知道为什么我现在不能上传文 件名中有中文的文件,不知道是它不支持还是我设置的问题,有空去网上找找,实在不行就只有再骚扰limodou了。 ;)
btw: 如果那个FileField需要提供下载的话,需要在app或整个工程的urls.py中设置一下patten,要不然会出错,系统不认。