-
Django网站如何使用GeoIP
2008-07-15
GeoIP是关于IP地址和地理位置的应用。例如:通过访问用户的IP,展现不同语言的页面。
目前,有很多付费的解决方案,数据库,或者web service。值得高兴的是Maxmind.com提供了免费的版本。下面我们在Django网站里使用一下GeoIP。
第一步,安装GeoIP C Api和库 http://www.maxmind.com/download/geoip/api/c/ 。
第二步,下载数据文件。http://www.maxmind.com/download/geoip/database/ 。
第三步,编译lighttpd mod_geoip模块 http://trac.lighttpd.net/trac/wiki/Docs:ModGeoip ,然后进行配置。
第四步,如果你是用php,实际上就可以用了。我们是用Django,所以你还必须安装GeoIP的python API http://www.maxmind.com/app/python
最后,在view function函数里加入
import GeoIP
country = 'unknown'
try:
ip = request.META['REMOTE_ADDR']
return HttpResponse(ip)
geo = GeoIP.new(GeoIP.GEOIP_MEMORY_CACHE)
country = geo.country_code_by_addr(ip)
except:
raise
BTW,127.0.0.1是识别不了的。 -
关于ajax跨域操作的jquery, django实践 - [开发]
2008-06-30
ajax应用的越来越广泛。以前我一直使用jquery的.post,和.get来做
ajax操作,很方便。但是.post和.get是不支持跨域操作的,例如:
在a.com通过他们调用b.com,会返回uri denied。今天要实现一个feature
要ajax跨域操作,就研究了一下。
jquery从1.2开始,.getJSON就支持跨域操作了。这个是官方给出的例子。
http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
这里的jsoncallback是一个jsonp的callback。不指定就是用?,jquery会自动
把?替代。这个大家可能还不太理解,一会就明白了。
我用django做web开发的framework。那么提供json数据的view func应该如何写呢?
def api(request, id):
try:
info = Info.objects.get(id=id)
data = {
'name':info.name,
'gendar':info.gendar,
}
except:
status = {}
callback = request.GET['callback']
return HttpResponse('%s(%s)' % (callback, simplejson.dumps(status)))
这里的callback就是一个jsonp的func名字,通常是jsonp1214803701549这样的串。
HttpResponse的返回值一定是jsonp1214803701549({'name':xxx, 'gendar':xxxx})。
因为这样才能回调到你的客户端的function。这个浪费了我不少时间。HTML端代码就更简单。
$.getJSON("http://xxx.com?callback=?",
function(data){
alert(data.name);
}
});
到此,ajax的跨域操作就完成了。网上关于这方面的资料不多,而且都不详细。
上面是我用firebug跟踪HttpResponse,HttpRequest的参数的总结的。
可能有理解不当,或者有更好的方法,欢迎大家一起交流。 -
Django开发,一路走来 - [开发]
2008-04-17
我最早接触Django是在2005年底。当时,我对web开发产生了强烈的兴趣,一心想快速实现几个脑海里关于web的idea。由于一直做软件开发,对web开发毫无概念,所以第一个面临的问题就是选择framework。
基于java的web framework复杂度太高,不适合做快速开发。asp不跨平台,php听说项目大了管理不方便(现在看来,应该也是不错的)。不是很习惯ruby的语法,放弃了ror。由于久闻python语法的简洁和库的成熟,我就定格在python based framework - django,官方的介绍是: Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.。
即使是面对从未用过python的我来说,django上手也非常容易。django提供了大量的shortcut scripts,包括:用django-admin.py来生成项目,manage.py来管理项目。自动生成的settings.py一目了然。 urls.py也是简单易懂。实际上,django-admin.py startproject xxx, Hello World的server就可以run起来了,这对新手来说感觉非常好。
django采用MVT模型,就是Model, Template, View。Model是OR Mapping的实现,对应的数据库的表结构。虽然,很多人指责django的ORM效率不高,但是用过的人都明白它实在是太方便了。django同样提供了执行raw sql的方法解决你性能问题。Template就是html模板支持继承,if, for,等等简单的语法。模板让应用逻辑和展现分离。很多时候你发现只要修改html的模板就可以,根本不需要修改python代码,不需要reload server。View是对应呈现给浏览器的response,通过views.py上的函数render模板实现。用MTV这种pattern来开发 web,真的让我感觉非常舒服。
除此以外,django还有不少亮点。基于regular expression的url配置(urls.py)。大量好用的middleware(authentication, session, transaction, cache, gzip)。模板可以自定义tag和filter。大量的utils和addons,例如:textile, rss generator。
当然,django也不是十全十美的。还是有一些鸡肋的设计,比如authentication的User, Group等结构,过于复杂,产生大量冗余表。newform我也用的不多。send_mail没有参数化,content type和encode都不够灵活。模板escape的向后兼容性。当然这些问题都可以通过一些技巧,或者自己实现来替换调,不算太大的问题。
应livid之约,胡言乱语几句django的开发心得,希望抛砖引玉,大家多多交流。至今,我已经用django开发了3个相对完整的网站,并且还希望继续的做下去。不过,django最近脚步很慢,希望1.0 milestone早点到来。最后,感谢我的django领路人limodou,他说当我的技术支持,真的说到做到,非常感谢。
Reference
Django http://www.djangoproject.com/
Django Step by Step http://www.woodpecker.org.cn/obp/django/django-stepbystep/newtest/doc
Django Book http://www.djangobook.com/
Django Master Class http://toys.jacobian.org/presentations/2007/oscon/tutorial/
Django Snippets http://www.djangosnippets.org/







