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随机数与随机字符串 - 全文阅读

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()

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

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。

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元类的一些新认识 - 全文阅读

XML-RPC in Python简介

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

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

Singleton模式

一、在GOF著作中对Singleton模式的实现方式如下:

/*解一*/   
// Header file Singleton.h
class Singleton   {   public:    static Singleton *Instance(){       //1    if( !m_pInstatnce) //2
m_pInstance = new Singleton;//3    return m_pInstance; //4    }   
void DoSomething();private:    static Singleton *m_pInstatnce=NULL; //5   private:    Singleton(); //6    Singleton(const Singleton&); //7    Singleton& operator=(const Singleton&); //8    ~Singleton();  //9   }     

Continue reading Singleton模式 - 全文阅读

python的memcache和json模块

最近时间比较多,想在以后的项目中应用python。今天做了一下测试。一个小工具的编写。工具的目的根据输入的key,在memcache中查找相应的value。并且对value做一些分析。Value是json格式。

首先下载python-memcached-1.40.tar.gz和python-cjson-1.0.5.tar.gz。然后安装。

安装方法很简单,也很标准。Tar xzf  *.tar.gz  然后进入解压后的目录。最后Python setup.py install。这时memcache,json的python都已经可以用了。可在python命令行下测试import memcache, import cjson。如果一切正常说明安装成功。

Continue reading python的memcache和json模块 - 全文阅读

Django实现大数据量分页查询

一开始是使用如下的代码:
    serverinfolist = ServerLog.objects.all()[0:1]
    paginator = Paginator(serverinfolist, PER_PAGE) # Show 25 contacts per page
    try:
        page = int(request.GET.get(’page’, ‘1′))
    except ValueError:
        page = 1
    try:
        contacts = paginator.page(page)        #取到具体的每一页的内容及属性
    except (EmptyPage, InvalidPage):
        contacts = paginator.page(paginator.num_pages)
       
    return render_to_response(’serverlinux/server_infos.html’, {”listobjects”: contacts,”flag”:True})

Continue reading Django实现大数据量分页查询 - 全文阅读

ORM编程思想

1、何谓“持久化”

持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
(在JAVA里面如果想要实现一个对象的持久化需要实现一个接口!)
2、何谓“持久层”

持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

(使用者与数据实体这两个概念应当要如何去理解呢?
使用者:调用数据部分。一般是控制器层
数据实体:一般是存储到了关系数据库!

何谓“对象数据映射(ORM)”

ORM-Object/Relational Mapper,即“对象-关系型数据映射组件”。对于O/R,即 Object(对象)和 Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。

(编程:熟练掌握面向对象思想即面向对象 O
 数据库:掌握关系型数据 两者结合就是实现 对象-关系 的映射!)

Continue reading ORM编程思想 - 全文阅读

 Page 1 of 13  1  2  3  4  5 » ...  Last » 

Contact us

Admin: Bryan Wu