相信大家都很熟悉这篇文章:《利用免费的GAE(Google App
Engine)建立强大的Blog(micolog)网站》,
也相信大家对GAE的了解,
更相信有很多人看好GAE,即使它经常被墙。
原因是大家都相信google,不怀疑google的公关能力。
Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法时由 Python
替你调用的,而不是在代码中直接调用(象普通的方法那样)。
.1 __init__
类似于构造函数
#!/usr/local/bin/python
class Study:
def
__init__(self,name=None):
self.name = name
def say(self):
print self.name
study = Study('Badboy')
study.say()
.2 __del__
类似于析构函数
#!/usr/local/bin/python
class Study:
def
__init__(self,name=None):
self.name = name
def __del__(self):
当访问http://abc.test.com跳转到http://www.test.com/test/abc/
方法一:
这种方法浏览器地址会变www.test.com/test/abc
实现访问如下:
server {
listen 80;
server_name
www.test.com;
location / {
root
/data/test;
index
index.html;
}
}
server {
listen 80;
server_name *.test.com;
if ( $http_host ~*
'^(.*)\.test\.com$') {
set $domain
$1;
Python中的random模块用于生成随机数。下面介绍一下random模块中最常用的几个函数。
random.random
random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0
random.uniform
random.uniform的函数原型为:random.uniform(a,
b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <=
n <= b。如果 a <b, 则 b <= n <= a。
print random.uniform(10, 20)
print random.uniform(20, 10)
#---- 结果(不同机器上的结果不一样)
#18.7356606526
#12.5798298022
random.randint
random.randint()的函数原型为:random.randint(a,
b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
print random.randint(12, 20) #生成的随机
动态网站的基本功能就在于, 没错, 它是动态的. 用户每次请求一个页面时, Web 服务器都要进行全面的计算 --
从数据库查询到渲染业务逻辑 -- 直到生成最终展示的页面.
从服务器负载的角度来看,这远比仅仅从文件系统读取一个文件展示要占用的系统资源多得多.
对绝大多数网站应用程序来说, 这点负载不是大问题.绝大部分网站应用不是 washingtonpost.com 或
slashdot.org 这样繁忙; 它们通常是小规模-中等规模的,没有特别高的点击率. 但对大规模高点击率的站点来说,
就应该尽可能的降低WEB服务器的负载.
这正是需要缓存机制的原因.
建立缓存机制的目的就是在适当的时候省略掉计算步骤(再次访问时).下面用伪码来阐述该机制如何运作:
根据 URL 请求, 看看缓存中有没有该页面
如果缓存中有该页面:
返回该页面
否则:
生成该页面
将该页面保存在缓存中(以备下次访问)
返回这具生成的页面
Djan
abs(number) 返回一个整数或浮点数的绝对值
例子:abs(-5) 返回5
apply(function,tuple)
apply(function,tuple,dictionary)
在运行时允许分配一个参数序列
break
中断while循环的执行并使循环的执行退出。如果当前循环在另一个循环中,break会把执行行发送到最近的上一级循环
callable(object)
检查对象是否可以调用。可调用,函数返回真;不可调用,返回假。可调用函数包括函数、类、方法、和内置函数
chr(x)
返回单个字符串,是数字x的ASCIIa等价物
例如: chr(100) 返回 'd'
cmp(x,y)
比较这两个对象x和y,并返回反映等值的整数。cmp()用于比较数字或字符串。如果x<y返回负数,如果x=y返回零,如果x>y返回整数。如果比较对象是字符串,python用标准的字母表顺序比较它们
例如:cmp(2,3) 返回 -1 cmp('Graham','Cleese')
返回4
coerce(x,y)
返回一个由两个被转换为普通类型的数值参数组成的元组。
例如:coerce(12,12L)
Python代码
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def __unicode__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
def __unicode__(self):
return self.name
class Entry(models.Model):
blog = models.ForeignKey(Blog)
headline =
models.CharField(max_lengt
本来估计能找到类似Mete中verbose_name_plural属性去更改app显示名称的,可以只找到一个app_label。但是由于django源码中是这样写的:
app_dict[app_label] = {
'name':
app_label.title(),
'app_url':
app_label,
'has_module_perms':
has_module_perms,
'models':
[model_dict],
&nb
1.
_()已经成了遗留系统,1.0中已经改进了,需要
from django.utils.translation
import ugettext as _
最近再用 Django 做东西,顺便写点笔记做下记录。
今天折腾这个 Django 的 i18n 支持着实费了点功夫,主要是一开始没理解 Python 做 i18n
的原理导致。废话不多说了,使用 Django 的 i18n 支持还是相当的方便的。Django
的官方文档上讲的很详细了,但是篇幅过长,我也是硬着头皮看了几遍才搞明白,下面我就简单介绍一下最快捷的方法。
首 先,从配置入手,settings.py 里面有一个
LANGUAGE_CODE属性,这里设置了网站默认的语言。由于settings.py里面的属性支持重写,所以从官方文档上可以得知,默认情况下已经
启用i18n支持了,我们需要加入一些middleware来支持动态切换语言。
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
)
注意顺序,LocaleMiddleware必须在SessionMiddleware下面,因为需要从Session里面获取一个语言类型,这些Django都有现成的了,很方