FALLHUNTER

Web & Mobile, Design & Code

将django的models放到多个文件中

 

随着django程序越来越大,一个application里的model也越来越多,而django有个非常不好的约定就是所有的model都写在一个models.py 文件中, 而对于喜欢追求“优雅”的程序员来说,这的确很难忍受。

由python的特性,自然会想到将models.py 用一个目录代替,在__init__.py 中,import整个目录里的文件,这样python是认可了,django却不认! ./manager.py syncdb 的时候并不会发现目录下面的model。

搜了半天,发现解决方法比较简单,只要在每个model类中加上Meta的app_label 属性就可以了。

from django.db import models

class Test(models.Model):
    class Meta:
        app_label = 'myapp'
但还是觉得这个地方有点别扭,总是要记着加上这个,显得不那么自然。
这种做法是没有在Django官方文档里说明的,之前还用过另外一个Undocumented Technique,是在Django Single注册的时候,

models.signals.post_save.connect(flaggedentry_post_save, sender=FlaggedEntry, dispatch_uid=’mofin.store.models’)

其中 dispatch_uid 是一个undocumented 参数,指定这个参数后,则对应的single 处理函数不会被重复注册,出现这种问题的情况是,当上面的注册语句被直接写在文件里,而这个文件又被import了多次,则上面的语句会被多次执行,如果没有指定 dispatch_uid 的话,处理函数就会被多次注册,而Single发生时就被执行多次了。

参考资料


添加评论(1)

IPhone WebApp 设计开发工具与资源

 

/*
做IPhone相关的开发也有一阵子了,过程中使用了不少来自互联网的各种工具与资源,在这里整理一下,希望能将互联网给我们的帮助再回馈给互联网,感谢互联网,当然,要先感谢祖国
*/

IPhone 的 App 固然有很多吸引人的地方,然而Web毕竟是大势所趋,已经有越来越多应用用 WebApp 的方式来实现了。所谓 WebApp,说白了就是Web应用而已,只不过是专门对手机尤其是IPhone的特点来定制界面,更有甚者,把界面做的跟本地IPhone App一摸一样,以至于我们都难以区分它是一个App还是一个Web。

优秀的WebApp

先来看看各种漂亮的WebApp,除了用IPhone上的safari里面的默认书签,进到IPhone 的 WebApp 列表 http://www.apple.com/webapps/, 还有不少地方能看到WebApp的展示,如http://cssiphone.com/  汇集了各种优秀的IPhone站点,这些优秀的CSS设计可以给你不少灵感

IPhone 设计素材

WebApp开发框架

IPhone App第三方库

其他IPhone资源站点


添加评论

authorized_keys的文件权限

 

今天在server上配置ssh的key认证方式,这样就不用每次都输入密码。由于已经在其他机器上配置过,我直接把配置好的机器上的authorized_keys 里面的 publickey 考过来,新建一个authorized_keys文件,放在新的server的的.ssh目录中。

ssh一下,不行! 经过反复比较,都没发现问题,郁闷了很久。很久之后,突然发现是文件权限造成的:

自己创建的authorized_keys文件权限为 -rw-rw–r—,  修改成 -rw——- 就可以了。

看来还是算不上一个熟练的linux用户,linux与windows一个显著的区别就在文件权限上,也曾经因为文件权限造成过很多的问题和困扰,然而还是不能在第一时间内考虑的文件权限,是windows造成的习惯吧。看来轻松使用linux,一定要把考虑文件权限变成一种习惯。


添加评论(2)

怎样选择美国主机

今年冬天特别冷,以至于不少站长都选择迁徙到温暖的米国…

这里就来简单说说米国的主机,相比国内普遍的windows主机,这里更流行linux主机,目前主要有三种类型,按价格从低到高,有

  • shared host 共享主机

是在一台物理机器上放置多个用户,每个用户在一个目录中,大家共享同一个硬件资源。这种服务一般会提供ftp、ssh,database等基础服务,还有控制面板,操作比较简单,适合初学者和个人站点。

推荐服务商: webfaction

  • vps ( Virtual Private Server ) 虚拟主机

是在一个物理机器上安装多个虚拟机,每个用户使用自己的虚拟机,一般配有web界面来安装系统,重启系统,设置密码等。这可能是国内比较少有的方式,这种方式介于sharedhost与dedicatedserver之间,以较为低廉的价格提供相对专业的服务。由于服务器是虚拟机,因此用户会拥有对此机器的全部权限,可以制定操作系统等,任意配置软件,但这对操作者要求也较高。VPS适用于绝大多数小型站点,一般vps服务商都提供多种性能的服务选择,可以随时根据需要进行扩展。

推荐服务商: slicehostlinode

slicehost 与 linode 是如此流行又如此相似,因此,有不人专门来对比它们

http://journal.dedasys.com/2008/11/24/slicehost-vs-linode

http://drupal.org/node/547910

http://www.kavoir.com/2009/09/moving-from-slicehost-to-linode-an-initial-vps-hosting-review.html

这里还有人做了比较专业的 benchmarks 对比

http://forum.slicehost.com/comments.php?DiscussionID=1951

这个从更专业的角度对比了更多的主机,其中包括slicehost 与linode

http://journal.uggedal.com/vps-performance-comparison

  • dedicated server 独立主机

就是一个真实的物理机器,类似于完全托管,价格一般在几百美元一个月。这是专业的主机服务,用户拥有对整个机器软硬件的权限,但操作也更加复杂,重启、安装系统等工作要联系idc的人员来进行。适用于有专业人士维护的大中型站点。

主机选择是一个普遍的需求,以至于有很多站点专门来做主机服务商的评选,可以参考:

http://webhostinggeeks.com/

http://www.besthostratings.com/

等,如果是django站点,还有

http://djangofriendly.com/  在 几个django相关的网站 中提到过。


添加评论

几个 Django 第三方库/applications

 

Django evolution

执行 ./manage.py syncdb 的时候,django会查找新的model来创建数据库表,但当我们更新model的结构时(如增加字段),则需要手工修改对应数据表的结构。Django-evolution 正为解决这个问题而存在。

地址 http://code.google.com/p/django-evolution/

django-ratings

ratings是web2.0的基础元素之一,django自然不能缺少,个人估计它有望成为官方app

http://github.com/dcramer/django-ratings

django-tagging

tagging 是web2.0的另一个基础元素,这个库相当好用和强大。

http://code.google.com/p/django-tagging/

django-messaging

哈哈,还是web2的元素啦,这个是用户与用户之间的message系统,与django内置的message不是一回事,这个库比较简单。

http://code.google.com/p/django-messaging/

django-photologue

强大的图片处理、管理功能

地址 http://code.google.com/p/django-photologue/

django cms

一个基于django的CMS系统

地址 http://www.django-cms.org/

django-grappelli

你认为django的admin界面不够好看吗,看这个, 里面有漂亮的截图,相信你会喜欢。当然这个库也不仅仅是为了好看,它还有很多更方便的功能。

地址 http://code.google.com/p/django-grappelli/

django-filebrowser

这个库的作者就是上面的 django-grappelli 的作者,怎么样,别以为他只会做界面,看看这个,这是一个相当强大的文件管理系统,直接在admin里面就可以完成静态文件的上传和编辑。你还在用自己做的编辑系统吗,咳咳。

地址 http://code.google.com/p/django-filebrowser/

django-solr-search

solr是做中小型搜索的首选,可以说是易用与强大的完美统一,django当然不会放过。solr不是已经很简单了吗,是的,但为什么要拒绝更简单呢?这就是django的哲学,我不骗你,编码真的可以是一种享受…  当然啦,还是有点缺憾,solr内存使用有些大呀…,但这不要怪到django头上。

地址 http://code.google.com/p/django-solr-search/

django-avatar

这跟电影《阿凡达》可没有什么关系,如果你熟悉web开发,早就应该知道 avatar 的意思是指web上用户的头像。这个应用就帮助你的django站点方便的增加用户头像的功能。

地址 http://github.com/ericflo/django-avatar


添加评论

Python 面试常见问题

 

这里总结一些Python的常见问题,也是Python面试经常提到的问题,它们都是比较 pythonic 的问题,最关键的,它们都是你应该能回答的问题,如果这些问题对你来说没有什么难度,请发一份简历到 join@mapiz.com

这里并不试图给出答案,很多问题只是看回答者对Python的理解,如果你对某个问题不够清楚,just google it. 如果你对很多问题都不清楚,你应该去读一下 Python in a nutshell

  • 数据类型相关
    list与tuple的区别
    dictionary与set的区别
  • 你知不知道Python的for语句后面可以跟一个else,它是什么意思?
  • list comprehension 是怎么回事,为什么要用它?为什么不用它?
    (我一直记不住对应的中文叫什么,列表推导?)
    即:
    [ x*x for x in somelist ]
    其中 somelist 是一个list。
    这行代码构建了一个list,其每个元素是somelist里面每个元素与自身做*运算
    复杂一点的,还可以:
    [ somefunction(x) for x in somelist if anotherfunction(x) ]
    即,可以用anotherfunction 过滤 somelist
  • 什么是 tuple 解包赋值?

    a,b = somefunction()
    要实现这个效果,somefunction应该返回一个tuple,在赋值时Python会自动解包。
    当然,这不仅仅限于函数返回值的情况,像
    a,b=(“value1”,"value2“,) 也是可以的
  • 类似 __foo__ 这样的东西是什么玩意?
    这是python里面的特殊函数或属性,常见的有
    __name__
    __main__
    __file__
    __get__()
    __set__()
    这些你都应该知道。
  • iterators/generators 怎样实现一个 iterator 或 generator ?
  • map/reduce/sum ?
    如果你第一次听到 map reduce 是从Google著名的分布式框架,没有关系,因为现在的计算机教育已经本末倒置,这不是你的错,但是如果你没有去研究一下它为什么叫 MapReduce , 这就是你的错了。如果你现在是第一次见到 map reduce ,赶紧去研究一下,我想你很可能对函数式编程一无所知。
  • lambda 是什么东西 ?
  • 有没有听说过 decorator ?
  • 函数定义时在参数前面加上 * 或 ** 是什么意思? 函数调用时在参数前面加上 * 或 ** 又是什么意思?
  • 怎样实现类的静态方法?
  • __new__ 与 __init__ 有什么区别?
  • “class Foo”  与  “class Foo(object)” 有什么不同
  • 文件操作
    Python里面有个非常简单的文件按行操作方式
    for line in open(file_name):
          print line

    但是要注意 line 是包含行尾的 \n  的

  • 异常处理
    python里面到处都是异常,这是Python的设计哲学,如果你打算学习Python,请将异常变成你的思维方式。
    你可能很容易学会  try … except .. 和  try … finally..  但是 try … except … else 是什么意思?
  • 对类库的熟悉程度
    Python 的强大很大程度上来源于其无数强大的类库,熟悉类库的实用总是对实际的工作帮助甚大。
    类库问题也是一个很重要的常见问题,如:
    实现xxx功能,有哪些类库可以用?
    常见的应该了解的类库大概有:
    正则表达式类库 re
    系统类库 os, os.path
    日期时间 datetime
    多线程 Queue
    单元测试 doctest, unittest
    日志 logging ( 我非常喜欢这个库 )
    命令行参数处理 optparse ( 这个库太棒了 )
    命令行框架 cmd ( 用这个库你会发现 写Python 真的是一种享受 )
    网络 urlparse, urllib, curl, httplib,socket
    服务器 SocketServer ( python 自己含有一个简单的socket服务器!而且支持多种网络模型(tcp/udp, thread/process)! )
    XML/HTML
    解析 xml.dom, xml.sax, BeautifulSoup
    还有很多很多…
    当然,你没必要全都用过它们,但是你应该知道它们的存在,除非你愿意花上几个星期来实现一个本该几分钟就完成的功能。

最后,请相信我,Python in a nutshell 是本好书,它能解决以上几乎所有的问题,当然,它能解决的问题远不只以上这些。


添加评论(2)

django 1.2 alpha

 

备受期待的 django 1.2 release了它的alpha版,在这个版本中,有个重量级的更新,那就是多数据库的支持。

在以前的django版本中,只能支持一个数据库,还记得上次跟子轩讨论过如何连接多个数据的问题,当时的感受就是:框架,就是说有些东西是不能实现的…

现代化的web开发,几乎没有只使用一个数据库的,多数据库是一个系统可扩展性的重要方面,django 1.2 朝这个方向进了一步,也说明了django 打造工业级web框架的目标。

django 1.2 中还增强了安全性与 message系统,其message并不是用户间的message,而是系统对用户的一种提示信息,这类似于 ROR 中的flash。zendframework 中也有类似的东西,好像也叫什么什么flash,当时大家讨论zend的时候,有人以为是对adobe falsh的支持。 其实,国内的web应用并没有很流行地使用flash的概念,相关功能还多是通过应用逻辑来展示的,开发还不够工业化呀。

 

正是的release预计在3月中旬,到时候估计 Mapiz 正好可以用上,愿 Mapiz 与 django 还有我一起成长吧。

今天读到 阮一峰 写的 PHP很烂?我的看法,嘿嘿,其实也是俺的看法啦,在no-framwork framework: 让php找回最真 我曾试图表示一些对php的看法,但总觉得说不到点子上,今天看峰哥用简单的语言说清楚了深刻的道理,恩,果然是高手。


添加评论

网站监控服务

你的网站宕机好几天之后你才知道吗,你的用户投诉之后你才发现网站出问题了吗?专业的网站都会有各种各样的监控手段,及时发现运营中的各种问题,但对于个人站长与小型网站来说,当然没有必要自己去做一套网站监控系统,感谢互联网,已经有很多的网站提供这种监控服务了,他们有分布于全球的监控点,有多种报警通知的方式,有专业丰富的报表,更重要的是,他们多数都是免费的!

Pingdom    http://www.pingdom.com/  可以做到每5分钟检测一次你的网站,出问题时可以通过email,sms,甚至twitter来通知你。免费账号支持一个站点。

Binary Canary     https://binarycanary.com/  强大报表,email通知,免费账号支持5个站点

Are My Sites Up    http://www.aremysitesup.com/  简单易用,免费账号支持5个站点(url),每小时监测一次。www.mapiz.com 及后台服务server用的就是这个

http://site24x7.com/   是个简单易用且强大的服务,fallhunter.com 用的就是这个

http://www.247webmonitoring.com  这是一个超级简单的监控站点,界面简单的一塌糊涂,闭着眼睛都可以在30秒内配置好一个站点监控,免费用户可以做到15分钟一次检测。

类似的站点还有:

Hyperspin 

AlertX

另外 http://host-tracker.com/   这是一个相当强大的站点,输入你的网站地址,立即看到从全球不同地理位置的访问耗时信息,当然,没有中国。

国内也有提供类似服务的站点,比如 网站保姆 http://bm.chinaz.com/  和 http://www.monitorx.cn/


添加评论

使用 python/django 发送iphone push消息

 

iphone的push notification功能是个好东西,可以在一定程度上模拟后台运行程序的效果。但这个东西配置起来确实有点麻烦。好在apple的文档说的还算详细,仔细按照文档做,慢慢生成那一堆配置文件吧。

服务器端的配置:

在开发mac上,从keychain中将生成的keyexport出来,这里要注意要同时选中对应cer与private key两个项目,一起倒出到一个.p12文件中。

将倒出的p12文件放到服务器上,将p12文件转换为pem文件:

openssl pkcs12 -in cred.p12 -out cert.pem -nodes -clcerts

然后,按照 APNSWrapper 里的文档就可以测试了,随便使用一个token,如果没有异常就说明认证OK啦, APNSWrapper 真是个好东西。

感谢互联网,感谢Python~~~

参考资料


添加评论

实现自适应高度的 UITableViewCell 或 UILabel

 

在iphone开发中处理table时常常会有这样的问题,table中cell的高度不是固定的,而是是根据其中的内容不同而不同的。对与这种情况,sdk本身并没有很好的支持,经过一翻摸索,发现大家通常的做法都是在实现 heightForRowAtIndexPath 方法时,根据内容计算出来显示的高度。

幸运的是,nsstring内置了几个好用的函数可以方便的计算出来字符串被现实出来时占有的屏幕高度:

  • - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size; 
  • - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size  
             lineBreakMode:(UILineBreakMode)lineBreakMode; 
  • - (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width  
              lineBreakMode:(UILineBreakMode)lineBreakMode; 
  • - (CGSize)sizeWithFont:(UIFont *)font  
              minFontSize:(CGFloat)minFontSize  
              actualFontSize:(CGFloat *)actualFontSize  
              forWidth:(CGFloat)width  
              lineBreakMode:(UILineBreakMode)lineBreakMode; 

 

参考资料


添加评论

© 2009 FALLHUNTER. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.