阿瓜: Django小组的讨论http://www.aggua.com/group/25/posts/feed/阿瓜: Django小组的最新讨论话题zh-cn网站速度飞快,用memcache了吗? - guotiehttp://www.aggua.com/group/post/464/如题。 DateTimeField在ModelForm生成带日历可选取的form - 春http://www.aggua.com/group/post/458/models.py class Entry(models.Model): title = models.CharField(max_length=100) start_date = models.DateTimeField() 在http://localhost:8000/admin中,start_date出现一个时间和日历的快捷方式. 但在views.py中用 class EntryForm(ModelForm): class Meta: model = Entry def creat_entry(request) if request.methond == 'POST': form = EntryForm(data=request.POST) ... 如此生成的form是最简单的form样式,有没有自动生成类似admin中的样式,简化开发. 有没有人一起弄 django版的 uchome - kingshttp://www.aggua.com/group/post/456/rtDjangoCon 2008两个视频 - 小亨http://www.aggua.com/group/post/455/Reusable Apps http://www.youtube.com/watch?v=A-S0tqpPga4&eurl=http://www.google.com/reader/view/&feature=player_embedded High Performance Django http://www.youtube.com/watch?v=D-4UN4MkSyI&eurl=http://www.google.com/reader/view/&feature=player_embedded网站准备如何重构? - guotiehttp://www.aggua.com/group/post/439/看到首页上说要重构网站,能谈谈思路吗? 或者已经重构完了。做一个像discuz一样的基于django的bbs,如何? - guotiehttp://www.aggua.com/group/post/438/看了一下discuz 7,真的很不错。 我用django开发,觉得css,js,界面呈现是最难高的,写代码完全是体力活,现在想借用discuz的css,js和界面风格,搞一个django下的bbs,大家有什么意见么? 升级到django1.0了 - 小亨http://www.aggua.com/group/post/432/不兼容的地方真多。djangoproject.com上老版本的doc文档在哪里? - jt.rockyhttp://www.aggua.com/group/post/429/新的1.0的文档感觉不详细,老的0.96的文档链接在哪里,谁知道? thx搞了半天还是django 1.0的rc - 小亨http://www.aggua.com/group/post/413/http://www.djangoproject.com/weblog/2008/sep/02/10-rc1/有谁用jython2.5 部署 django - kingshttp://www.aggua.com/group/post/411/还是用wsgi?更有效的判断一条记录是否存在 - dumahttp://www.aggua.com/group/post/410/大家在做判断一个记录是否为真时,是不是都这么做: 方法1: try: ----product = Product.objects.get(id=1) except: ----#do something... 方法2: product = Product.objects.filter(id=1) if product: ----#do something... 方法1有些罗嗦,不多说了.下面说说方法2. 用方法2时,我认为有性能问题。OK,改进一下: product = Product.objects.filter(id=1)[0] if product: ----#do something... 不错,这样就用到 SQL 的 LIMIT 1了。可好是好,但是返回空集([])时,是会报错的啊!不要紧,再改进: product = Product.objects.filter(id=1)[:1] if product: ----#do something... 这样的话,即用到了SQL的LIMIT 1,又不怕返回空集喽~ 可有人举手了: django 是 lazy ,方法2不会有性能问题。 我做了个实验: 进入 manage.py shell 中,我通过打印SQL语句发现: 1. product = Product.objects.filter(id=1) 2. if product: print 'ture' 第1句不会生成SQL,但第2句就会生成SQL了。 小小经验,不希望误倒他人,如有错误,请回贴指点~~Django 1.0 beta 2 放出 - jt.rockyhttp://www.aggua.com/group/post/401/In accordance with our updated 1.0 release roadmap, tonight we've released Django 1.0 beta 1.the first "beta" preview release in a series which will culminate in the final Django 1.0 releases in early September. 看来django是要稳步的兑现承诺了。咱还是继续观望+期待。 ——-—————— 1.0 beta 2今晚(080827)释出 据说下周1.0正式版会粉墨登场。 但愿版本上去,性能也跟着上。我错了,不应该升级到1.0 - kingshttp://www.aggua.com/group/post/395/55555555555555555555555555dj1.0 上传图片问题 - kingshttp://www.aggua.com/group/post/394/没有[“content”] read()都为空 有请小亨 django的transaction - 小亨http://www.aggua.com/group/post/380/如果你用django的transaction,一定要确定db是否支持。 比如:mysql的engine,缺省的MyISAM是不支持的,要改成InnoDB。Django 1.0 alpha release - kingshttp://www.aggua.com/group/post/375/Django 1.0 alpha releasedjango 数据连接 - kingshttp://www.aggua.com/group/post/372/django 有没有使用 数据库连接池? 如果使用了 怎么配置 如果没有使用 怎么确认 db io的性能jython2.5 - kingshttp://www.aggua.com/group/post/371/有没有人用过,能在上面部署dj吗Django网站如何使用GeoIP - 小亨http://www.aggua.com/group/post/368/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是识别不了的。Django的Cookie和Session - 小亨http://www.aggua.com/group/post/365/[转] http://blogger.org.cn/blog/more.asp?name=lhwork&id=22346   在两个月前,就有同仁在论坛里面提到,Django的Cookie和Session有什么区别,由于我当时也只是懂得如何用这两个东东,但是有什么区别,确不知道,所以当时我说等我有时间好好看看,然后再做回答。由于一直很忙,没有想到一下子等到今天,实在是很抱歉。今晚忽然想起看了看代码,终于看了一个明白。   在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的key,但是这两者的原理和实现方式确是非常的不同。      首先介绍Cookie,只要是HTTP协议,就会有COOKIE这个东西; 只要您的浏览器没有禁用Cookie,就  可是使用它。而且是不分用什么语言,用什么框架,因为这是在HTTP协议的层面支持的,浏览器会把您设置的XXX的这个Cookie在Response之后保存到您的本地机器,在下次您向服务器提交或者浏览的时候会把上次保存下来的COOKIE带上发送向服务器;说到这里我们应该澄清一个概念,就是BS结构理论上是没有同步的服务器-客户端的状态维持的,所以Cookie本质上就是一种异步的状态维护,所有这一切浏览器都帮我们搞定了,所以不用关心。 当然如果使用是Django的话,最终的HttpRequest也许是WSGIRequest(调试的时候使用WSGI方式),也许是ModPythonRequest(使用Apache+Mod_python的方式),甚至您自己写自己的实现方式,但是最终我们都可以看到,他们都是一个HTTP协议要求的Requset的实现;   接下来介绍Session, 其他的框架当中是否也有Session这个东东我不知道,至少Django的这个东东是非常有用的。我们都知道Django可以同过meddleware来修改requset和response,如果想使用Django当中Session,首先必须要求您的Django工程的settiongs.py文件里面的MIDDLEWARE_CLASSES设置里面已经包含有django.contrib.sessions.middleware.SessionMiddleware(其实默认就是有的)。接下来我们看看/django/contrib/sessions/middleware.py这个文件,里面定义了一个SessionMiddleware的class,其中的process_request函数之有一句话 request.session = SessionWrapper(request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)),我们所使用的request.session当中的sesson这个变量就是在这一刻诞生的,其实这个session就是一个SessionWrapper类,这个类是根据得到COOKIES里面的settings.SESSION_COOKIE_NAME来作为生成SessionWrapper的依据。   看到这里大家留意没有?session其实是依赖于Cookie的,如果浏览器不支持Cookie的话,Django的Session也就无从用起了,因为Session的生成是根据Cookie里面记录的SESSION_COOKIE_NAME来生成的,那么这个Cookie是什么时候设置的呢? 接下来再看process_response过程, def process_response(self, request, response): # If request.session was modified, or if response.session was set, save # those changes and set a session cookie. patch_vary_headers(response, ('Cookie',)) try: modified = request.session.modified except AttributeError: pass else: if modified or settings.SESSION_SAVE_EVERY_REQUEST: session_key = request.session.session_key or Session.objects.get_new_session_key() if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE: max_age = None expires = None else: max_age = settings.SESSION_COOKIE_AGE expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S GMT") new_session = Session.objects.save(session_key, request.session._session, datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)) response.set_cookie(settings.SESSION_COOKIE_NAME, session_key, max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, secure=settings.SESSION_COOKIE_SECURE or None) return response   其他的不详说了,我们注意其中的两句 session_key = request.session.session_key or Session.objects.get_new_session_key() 如果存在session_key就用,如果不存在就创建一个新的Seesion,并返回它的key。 response.set_cookie(settings.SESSION_COOKIE_NAME, session_key,........) 把 response设置上这个settings.SESSION_COOKIE_NAME这个Cookie,改Cookie的值为session_key.   回过头来我们再看看process_request,其实我们最初的第一次浏览一个Django作的网站的时候,process_request函数是得不到叫做SESSION_COOKIE_NAME的这个Cookie的,但是在剩下的网站的第一次response之后,这个Cookie就出现了。process_request函数根据SESSION_COOKIE_NAME这个Cookie记录的session_key来创建了一个SessionWrapper这个类的一个实例,以后我们使用的request.session就是这个SessionWrapper,其实SessionWrapper就是对Session这个Model的封装(具体如何封装我详细讲了,有兴趣自己看一下),我们同过对request.session[XXX]=****这样的操作最终到保存到了数据库当中Session这个Model对应的表;   最后,既然有了Cookie,为什么还需要Session呢?? 因为不能Cookie保存太多的东西,而且保存的类型仅限于字符串。比如我们使用request.COOKIES[XXX]=您自己创建的一个类的实例,这样这个类的实例是绝对不能传送到客户端本地的,所以这时候session就派上用场了,这样在客户端的Cookie只是记录了一个key,这个key用来说明服务器端的那个数据是这个客户端的,至于服务器端的这个key的那条记录,就可以保存N多东西了,因为这个数据是一个字典,同过pickle保存和还原。   哈哈,说完了!!   有的时候,真想把所有的Django的代码,我看过后的体会和想法都写出来,也许对别人有用,对我自己也是一个总结,唉,总是没有时间,其实是很懒.