在apache上面部署django应用

在前面的文章中介绍了django的一些部署方式。这里介绍django在apache上面的部署方式。
1.测试环境: mandriva 2009.0 + python2.5.2
2.安装mysql:urpmi MySQL MySQL-client
3.mysql-server的配置:注释skip-networking这一句在/etc/my.cnf
4.安装其它必要包:urpmi apache-mod_python
urpmi python-django python-mysql
python-django在urpm中已经集成可以直接安装,但是你也可以到django的官网去下载最新安装包。
5.配置apache:

 

Continue reading 在apache上面部署django应用 - 全文阅读

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

Python的lambda函数与排序

前几天看到了一行求1000的阶乘的Python代码:

print   reduce(lambda   x,y:x*y,   range(1,   1001))

一下子被python代码的精简与紧凑所折服,故对代码进行了简单的分析。

reduce与range都是Python的内置函数。

range(1,1001)表示生成1到1000的连续整数列表(List)。

 

Continue reading Python的lambda函数与排序 - 全文阅读

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

Python:什么是*args和**kwargs

先来看个例子:

def foo(*args, **kwargs): print ‘args = ‘, args print ‘kwargs = ‘, kwargs print ‘—————————————’ if __name__ == ‘__main__’: foo(1,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a=1,b=2,c=3) foo(’a', 1, None, a=1, b=’2′, c=3)输出结果如下:

 

Continue reading Python:什么是*args和**kwargs - 全文阅读

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

Python的map,filter,reduce函数

map函数func作用于给定序列的每个元素,并用一个列表来提供返回值。
map函数python实现代码:

def map(func,seq):
    mapped_seq = []
    for eachItem in seq:
        mapped_seq.append(func(eachItem))
    return mapped_seq

 

 

Continue reading Python的map,filter,reduce函数 - 全文阅读

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

Python随机数与随机字符串

随机整数:
>>> import random
>>> random.randint(0,99)
21

随机选取0到100间的偶数:
>>> import random
>>> random.randrange(0, 101, 2)
42

随机浮点数:
>>> import random
>>> random.random()
0.85415370477785668
>>> random.uniform(1, 10)
5.4221167969800881

 

Continue reading Python随机数与随机字符串 - 全文阅读

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

Python CGI实现用户会话

众所周知,http协议是无状态的,也就是说客户端每次连接到服务器时,都是一个全新的状态,上一次访问服务器的状态无法在当次访问中维持,在B/S应用开发中,通常使用Cookie保存客户端状态,Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是
Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入
Cookies,以便在最后付款时提取信息。而后来的http会话(session)机制则是提供了另一种在服务器和客户端之间保持状态同步的方法,于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。
PHP、ASP都提供了较方面的方法创建和管理Session,Python的cgi模块却没有,在作一些简单的应用时,可以通过一些简单的方法手动实现Session的创建和管理。具体步骤如下:

1,在用户登录时,随机生成会话标识,同时保存在服务器端和客户端Cookie中;
2,用户登录完成后的每次访问,检查客户端Cookie中的会话标识,与服务器中的会话标识比较,以确定用户是否已登录;
3,用户退出登录后,清除客户端Cookie中的会话标识及服务器端的会话标识,退出会话。

下面是登录页面的部份代码:

#!/usr/bin/python
# -*- coding: utf8 -*-

import sys,os,cgi,MySQLdb,random,sha,Cookie
from option import *

def check_login(username,password):
    global data_server,server_username,server_password,database_name
    try:
        conn=MySQLdb.connect(host=data_server,user=server_username,passwd=server_password,db=database_name)
        conn.set_character_set(’UTF8′)
    except Exception,e:
        print e
        sys.exit()
    cursor=conn.cursor()
    sql=’SELECT id FROM user_man WHERE login_name LIKE "%s" AND password LIKE "%s"’ %(username,password)
    cursor.execute(sql)
    ss=cursor.fetchall()
    if ss:
        userid=ss[0][0]
        cursor.close()
        save_session(userid)
        return 1
    else:
        cursor.close()
        return 0

def save_session(userid):
#使用随机数生成64位SHA会话标识!
    sha_session=sha.new()
    sha_session.update(str(random.random()))
    session_str=sha_session.hexdigest()
##保存会话标识到服务器!!
    try:
        conn=MySQLdb.connect(host=data_server,user=server_username,passwd=server_password,db=database_name)
        conn.set_character_set(’UTF8′)
    except Exception,e:
        print e
        sys.exit()
    cursor=conn.cursor()
    session_cookie=session_str
    sql=’UPDATE user_man SET session="%s" WHERE id=%d’ %(session_str,userid)
    cursor.execute(sql)   
    cursor.close()
#保存会话标识到客户端Cookie!
    c = Cookie.SimpleCookie()
    c['userid']=str(userid)
    c['session']=str(session_cookie)
    print c.output()
    del sha_session

#函数test_login()可以放到其实需要登录使用的页面中,用于识别会话是否建立,是否需要重新登录

def test_login():
    global data_server,server_username,server_password,database_name
    c=Cookie.SimpleCookie(os.environ.get("HTTP_COOKIE"))
    remote_userid=c.get("userid")
    session_cookie=c.get("session")
    if (remote_userid is None) or (session_cookie is None):
        return None
    else:
#check session valaid!

        try:
            conn=MySQLdb.connect(host=data_server,user=server_username,passwd=server_password,db=database_name)
            conn.set_character_set(’UTF8′)
        except Exception,e:
            print e
            return None
        cursor=conn.cursor()
        sql=’SELECT session FROM user_man WHERE id=%s’ %(remote_userid.value)
        cursor.execute(sql)
        ss=cursor.fetchall()

        if ss:
            session_db=ss[0][0]
            if session_db==session_cookie.value:
                cursor.close()
                return remote_userid.value
        else:
            cursor.close()
            return None
           
#比如在一个页面中检查会话以确定是否需要重新登录,可以这样写:

def main():
    print "Content-Type: text/html\n\n"
    login_name=test_login()
    if login_name is None:
        redirect("/login.py","您尚未登录,3秒后将自动转到登录窗口!","错误!",3)
        sys.exit()
    else:
        print_html_content()

#如果会话不存在,则自动跳转到登录页面。

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

python中的类型判定

python中的类型判定有如下几种方法:
(1)>>>print type(1)==int
True
(2)isinstance(1,(int,str))
True
注意,此处第二个参数可以是个tuple,只要第一个参数是其中任何一个类型时,就返回True
(3)import types
>>> int
<type ‘int’>
>>> IntType
<type ‘int’>
>>> print int is IntType
True
可知,IntType和int是同一类型对象,具有同一object id。

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

python元类的一些新认识

如果定义了一个类A和他的元类B,如果只实例化B,那么A也会被实例化。
代码如下:

#coding:utf-8
class FA(type):
    def __new__(cls, name, base, attr):
        print name
        print base
        print attr
        print “it is in fa’s new”
        new_obj = super(FA, cls).__new__(cls, name, base, attr)
        return new_obj

Continue reading python元类的一些新认识 - 全文阅读

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

XML-RPC in Python简介

心得:本地 ————- 远程
调用方法就包括了:方法名、参数、返回值
这些如果在本地就可以直接传入调用处理。如果是远程的话步骤如下:
第一、将参数之类的信息转换成XML格式的数据流
第二、传入到服务器端解析之后进行执行返回结果封装成XML格式数据包
第三、客户端接收到这些XML的数据包同样进行解析得到想要的数据格式。
用网络传递的话,和系统和语言都没有关系了
这样的话我就可以在本地写一个JAVA的代码去调用一个NET的服务接口了。
通过一些语言的内库直接实现这种XML与文本流的互换。我们主要关心的就是如何写好服务器端的函数逻辑了!

Continue reading XML-RPC in Python简介 - 全文阅读

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis
 Page 1 of 7  1  2  3  4  5 » ...  Last » 

Contact us

Admin: Bryan Wu