Django1.5 有这两种模式
function-based views FBVs
class-based views CBVs
什么时候使用FBVs或者CBVs?
*views模块应该包含view逻辑
*URL模块应该包含URL逻辑
而不是混为一谈
最好不要有这样的代码:
# Similar to the Polls example from django.conf.urls import patterns, url from django.views.generic import DetailView from tastings.models import Tasting urlpatterns = patterns('', url(r'^(?P<pk>\d+)/$', DetailView.as_view( model=Tasting, template_name='tastings/detail.html'), name='detail'), url(r'^(?P<pk>\d+)/results/$', DetailView.as_view( model=Tasting, template_name='tastings/results.html'), name='results'), )
这样的代码也可以使用,但是违法了松耦合,DRY原则,并且会使项目的可维护性大大降低。
Loose Coupling 松耦合的URLConfs案例:
# tastings/views.py from django.views.generic import DetailView from .models import Tasting class TasteDetailView(DetailView): model = Tasting class TasteResultsView(TasteDetailView): template_name = 'tastetests/results.html'
# tastings/urls.py from django.conf.urls import patterns, url from .views import TastingDetailView, TastingResultsView urlpatterns = patterns('', url( regex=r'^(?P<pk>\d+)/$', view=TastingDetailView.as_view(), name='detail' ), url( regex=r'^(?P<pk>\d+)/results/$', view=TastingResultsView.as_view(), name='results' ), )好处:DRY,松耦合原则等
这个还没有在实际项目中用过CBVs原则,需要研究下,FBVs做练习比较快,但是设计上还有缺陷。
chapter 8 CBVs最佳实践:
Class Based Views从django1.3开始支持,可以提高view代码的重用性,使得代码更加有力和灵活。
在django1.5的文档中有专门的DBVs的说明。
CBVs指导原则:
*越少的view代码越好
*不要重复view中的代码
*Views应该处理表现层代码,业务逻辑应该交给Models或者Forms
*保持你的views简洁
*保持你的混合类使用更加简单
多态接口(Mixins): 不好翻译,没见过,直翻。。
混合类:
多继承中使用原则:
*Django自身提供的类应该在右边(多继承中父类排列方式)
*mixins应该在左边
*mixins应该继承python内置object类
ex:
from django.views.generic import TemplateView class FreshFruitMixin(object): def get_context_data(self, **kwargs): context = super(FreshFruitMixin, self).get_context_data(**kwargs) context["has_fresh_fruit"] = True return context class FruityFlavorView(FreshFruitMixin, TemplateView): template_name = "fruity_flavor.html"
那么CBV应该在什么样的任务场景呢?
django.views.generic?是什么??
声明:图片和代码均引用自 《two-scoops-django-best-practics》
好的工具可以提高工作效率,正则表达式绝对是这其中一员。最近抽时间大概了解了一下这方面的知识,整理了一下自己的一些笔记,文中示例通过vim编辑器来演示,匹配到的字符为黄色高亮显示,并在下面注明了显示结果。
首先,正则表达式的定义:一些用来匹配和处理文本的字符串
主要用途:搜索,替换
在正式开始之前,有一点需要特别强调:正则表达式的语法很容易掌握,但是真正的挑战是如何运用那些语法把实际问题分解为一系列正则表达式并最终解决,必须通过自己多多实践才能掌握。
下面一个示例就是普通的文本匹配,我在vim中默认大小写敏感,这样我们可以观察正则表达式的表现。事实证明,正则表达式是大小写敏感的。
上面例子中,第1 4两行是高亮的,显示效果不太好,将就看下吧。
下面示例一个通配符'.'的用法
上面例子中,只有第4行是高亮的。
在同一个正则表达式中,允许使用多个.字符,可以连续,也可以间隔出现。
上面例子中,第1 3两行是高亮的。
这个主要通过字符集的方式来实现。用[]来定义一个字符集
字符集只能匹配特定的字符和字符区间
字符集的匹配结果是:能够与该字符集中的任何一个成员相匹配的文本
字符区间用'-'来定义,例如[0-9],表示0,1,2,。。。9 10个阿拉伯数字
常用字符区间有[a-z], [A-Z], [0-9]。但是[A-z]不常用,因为它除了包含26个英文字母的大小写,还包括[ ^等在ASCII字符表中排列在Z和a之间的字符。如果想匹配26个英文字母的大小写,那么可以用[a-zA-Z]这样的形式。
上面的例子中,可以看到前两行是高亮的
'-'是一个特殊的元字符,用在[]中,作为元字符,在其他地方,只是一个普通的字符,只能与本身匹配,并且不需要转义。
取非匹配:^, [^0-9], ^的效果作用于给定字符集合中的所有字符或字符区间,而不仅限于在^字符后面的那一个字符或字符区间。
上面例子中,只有第4行是高亮的。
其实上面已经提到这个概念了,用在[]中的'-'是元字符。
元字符要匹配本身的话,需要用\来进行转义。
空白元字符:[\b] 回退(并删除)一个字符(backspace键)
\f 换页符
\n 换行符
\r 回车符
\t 制表符(Tab键)
\v 垂直制表符
\s 任何一个空白字符,等价于[\f\n\r\t\v]
\S 任何一个非空白字符,等价于[^\f\n\r\t\v] 注意:[\b]不包含在内
首先,在vim中使用:set list命令来使空白字符显示出来,
可以看到所有的$都高亮了。
btw,试了一下\s,好像vim的正则实现不支持这个。
\d 任何一个数字字符,等价于[0-9]
\D 任何一个非数字字符,等价于[^0-9]
前3行中的几个数字都高亮了。
字母数字元字符常用于匹配各种名字(如文件名,子目录名,变量名,数据库对象名等等)
\w 任何一个字母数字字符(大小写均可)或下划线字符,等价于[a-zA-Z0-9_]
\W 任何一个非字母数字或下划线字符,等价于[^a-zA-Z0-9_]
根据字符的16进制表示来匹配
16进制:\x0a == \n,ascii字符10
8进制: \012 等价于上面
这个在vim中不支持,试了一下不行。
[:alnum:] 任何一个字母或数字,等价于[a-zA-Z0-9]
[:alpha:] 任何一个字母,等价于[a-zA-Z]
[:blank:] 空格或制表符,等价于[\t ]
[:cntrl:] ASCII控制字符(ASCII0-31,再加上ASCII127)
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。
Memcached官网:http://memcached.org/
安装步骤:
1、下载源码包:
wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
2、编译安装:
//确定libevent是否安装,centos使用yum yum -y install libevent tar -zxvf memcached-1.4.15.tar.gz ./configure --prefix=/usr/local/ make && make install make clean
OK,Memcached安装成功
启动memcached
目标:使用11211端口、www 用户、最大占用16M内存、1024个软连接,输出
客户端请求,以守护进程方式运行
/usr/local/bin/memcached -p 11211 -d -u www -m 16 -c 1024 -vvv //查看是否启动 [root@AY120919111755c246621 ~]# ps -ef | grep memcache www 18739 1 0 09:32 ? 00:00:00 /usr/local/bin/memcached -p 11211 -d -u www -m 12 -c 1024 -vvv
OK,Memcached启动成功
2、安装memcache php扩展
扩展官网:http://pecl.php.net/package/memcache
你可以查看最新稳定包(stable)下载:
wget http://pecl.php.net/get/memcache-2.2.7.tgz