webpy 项目推介:DoCute 服饰时尚导购平台 作者@yibin001

DoCute

项目简介:

http://docute.com
DoCute 是一个分享穿着品味的时尚导购平台,在 DoCute 你可以和朋友一起发现、分享、购买喜爱的衣物; 还可以使用 DoCute 来寻找那些网络上、杂志上漂亮衣物的购买地址。如果你有经营一家时尚衣物的网店,也可以把你出售衣物的购买地址挂到 DoCute 上来,在分享穿着品味的同时还能为你的店铺提升收益…

技术体系:

数据库:mysql  部署环境:OS: Centos

WEB框架:

web.py。最开始想选择Django,但总觉得过于庞大,想找一个轻量级、可控性较好的框架,于是瞄上了web.py,非常容易上手。

数据库访问:

看过sqlalchemy,但最终放弃,最主要的原因是不大熟,怕使用不当。最后原生手写sql、配合web.database实现数据访问。

关于作者:

一直以“幻想曲”或“臭蛋”为网名,当过酒吧音乐人、人民教师,现供职于盛大网络。
主页:http://yibin.us/
豆瓣:http://www.douban.com/people/yibin001/
微博:http://t.sina.com.cn/n/yibin001

作者实现了一个文件缓存组件,下面这个是具体代码:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#-------------------------------------------------------------------------------
# Name:        cachehelper
# Purpose:
# Author:      yibin
#
# Created:     13-06-2010
# Copyright:   (c) yibin 2010
# Licence:     
#-------------------------------------------------------------------------------
import os
import config
import web
import util
import time
import cPickle as pickle

try:
    import memcache
except :
    pass


class CacheHelper(object):

    def __init__(self,cachetype='filecache'):
        self.cache = None
        cachetype = cachetype.strip().lower()
        if cachetype == 'filecache':
            self.cache = FileCache()
        elif cachetype == 'memcache':
            self.cache = MemCache()
        if not self.cache:
            raise 'Cache Init Faild'
        self.cache.connect()

    def get(self,key,timeout=60):
        return self.cache.get(key,timeout)

    def set(self,key,value,timeout=0):
        self.cache.set(key,value)

    def flush(self,key):
        self.cache.flush(key)

    def __repr__(self):
        return self.cache


class CacheBase(object):

    def __init__(self,**param):
        self.param = param
       
    def connect(self):
        pass

    def get(self,key,timeout=0):
        pass

    def set(self,key,value,timeout=0):
        pass

    def flush(self,key):
        pass


class FileCache(CacheBase):

    def __init__(self,timeout=60):
        self._cachepath = os.path.join(config.siteroot,'_cache')
        self.timeout = timeout
        if not os.path.isdir(self._cachepath):
            try:
                os.mkdir(self._cachepath)
            except Exception,e:
                raise e

    def connect(self):
        pass

    def get(self,key,timeout=60):
        key = str(key)
        key = util.md5(key)
        self.timeout = timeout
        cachefile = os.path.join(self._cachepath,key).replace('\\','/')
        if os.path.isfile(cachefile):
            if time.time() - os.path.getmtime(cachefile) > self.timeout:
                return None
            f = open(cachefile,'r')
            val = pickle.loads(f.read())
            f.close()
            return val
        return None

    def set(self,key,value,timeout = 0):
        key = str(key)
        key = util.md5(key)
        cachefile = os.path.join(self._cachepath,key).replace('\\','/')
        f = open(cachefile,'w')
        f.write(pickle.dumps(value))
        f.close()

    def flush(self,key):
        key = str(key)
        key = util.md5(key)
        cachefile = os.path.join(self._cachepath,key).replace('\\','/')
        if os.path.isfile(cachefile):
            os.unlink(cachefile)

    def __repr__(self):
        return ''

    def __str__(self):
        return ''


class MemCache(CacheBase):

    def __init__(self,server='116.211.25.59:11211',timeout=60):
        self.server = server
        self.mc = None

    def connect(self):
        self.mc =  memcache.Client([self.server], debug=0)

    def set(self,key,value,timeout=60):
        key = util.md5(str(key))
        if self.mc:
            return self.mc.set(key,value,timeout)
        return None

    def get(self,key,timeout = 0):
        if not self.mc:
            return None
        key = util.md5(str(key))
        return self.mc.get(key)

    def flush(self,key):
        if self.mc:
            key = util.md5(str(key))
            self.mc.delete(key)
            self.mc.set(key,None)

    def __repr__(self):
        return ''

    def __str__(self):
        return ''

# 部分代码可能因为编排中出现错误,请有需要时直接与作者联系。>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。