- 论坛徽章:
- 0
|
后台到前台的代码片段
从后台到前台实现用户管理功能的代码片段:
storm ORM 对象
orm_models.py:
import md5
from databases.storm.locals import *
class User(Storm):
__storm_table__='users'
id = Int(primary=True)
password = RawStr()
name = Unicode()
info = Unicode()
is_admin = Bool()
manageProjects = ReferenceSet('User.id','Project.manager_id')
joinProjects = ReferenceSet(id,'_UserProjectRelation.user_id','_UserProjectRelation.project_id','Project.id')
joinModules = ReferenceSet(id,'_UserModuleRelation.user_id','_UserModuleRelation.module_id','Module.id')
def __init__(self,name,password,is_admin=False):
self.name = name
self.password = password
self.is_admin = is_admin
def __setattr__(self,name,value):
if name == 'password':
#self.__dict__['password'] = value #设值是通过Storm 属性类的__set__方法(重载 '='操作符 )实现的。改变instance中的值,变化不会被storm察觉
processedPassword = md5.new(value).digest()
User.password.__set__(self,processedPassword)
else:
super(User,self).__setattr__(name,value |
虽说 Storm orm对象不需要继承特别的父类,但继承Storm类会带来一个方便,
在建立对象关系时,可以用字符串引用其他类。
Service层代码:
userService.py:
import md5
from webapps.digyn.conf import storm_conf
from common.exception import *
from webapps.digyn.model.orm_models import User
from webapps.digyn.util.pager import Pager
store = storm_conf.getStore()
def addUser(name,password):
if checkUserNameUsed(name):
raise NameDuplicate, name
user = User(name,password)
store.add(user)
store.commit()
def checkUserNameUsed(name):
if store.find(User,User.name == name).one():
return True
else:
return False
def deleteUser(userId):
user = get(userId)
store.remove(user)
store.commit()
def loginValidate(name,password):
password = md5.new(password).digest()
user = store.find(User,User.name == name,User.password == password).one()
if user:
return user
else:
return False
def get(userId):
return store.get(User,int(userId))
def getAllUser():
return store.find(User)
def getManageProjects(userId):
user = store.get(User,int(userId))
projectList = []
for p in user.manageProjects:
projectList.append(p)
return projectList
def getjoinProjects(userId):
user = store.get(User,int(userId))
projectList = []
for p in user.joinProjects:
projectList.append(p)
return projectList
def assignAdmin(act,userId):
user = get(userId)
if act == 'add':
user.is_admin = True
elif act == 'remove':
user.is_admin = False
store.commit()
def getUserPager(pageNumber =1,nameQueryStr = None,pageSize=10):
if (nameQueryStr and len(nameQueryStr) > 0):
resList = store.find(User,User.name.like(u"%"+nameQueryStr+u"%"))
else:
resList = store.find(User)
resList = resList[(pageNumber-1)*pageSize:pageNumber*pageSize]
return Pager(resList,pageNumber,pageSize,resList.count()) |
顶楼那个tips的意义,就在于可以让Service层中写addUser方法时,我们可以直接抛出一个自定意异常,让control层代码可以写成下面这种格式:
try:
userService.addUser(name,password)
except NameDuplicate,userName:
Include("/digyn/web/user/register.pih",flash="用户 %s 已经存在" %str(userName))
return
Include("/digyn/index.pih",flash="%s 你的帐号已添加,请登录" % (name.encode('utf-8')))
[ 本帖最后由 lvscar 于 2007-12-17 00:25 编辑 ] |
|