# 获取客户端cookie以实现登陆时问候用户功能
@route('/hello')
def hello():
name = request.cookie.username or 'Guest'
return template('Hello {{name}}', name=name)
# 获取形如/forum?id=1&page=5的查询字符串中id和page变量的值
route('/forum')
def display_forum():
forum_id = request.query.id
page = request.query.page or '1'
return template('Forum ID: {{id}} (page {{page}})', id=forum_id, page=page)
class DictProperty(object):
""" Property that maps to a key in a local dict-like attribute. """
def __init__(self, attr, key=None, read_only=False):
self.attr, self.key, self.read_only = attr, key, read_only
def __call__(self, func):
functools.update_wrapper(self, func, updated=[])
self.getter, self.key = func, self.key or func.__name__
return self
def __get__(self, obj, cls):
if obj is None: return self
key, storage = self.key, getattr(obj, self.attr)
if key not in storage: storage[key] = self.getter(obj)
return storage[key]
def __set__(self, obj, value):
if self.read_only: raise AttributeError("Read-Only property.")
getattr(obj, self.attr)[self.key] = value
def __delete__(self, obj):
if self.read_only: raise AttributeError("Read-Only property.")
del getattr(obj, self.attr)[self.key]
class Request:
def __init__(self, environ=None):
self.environ {} if environ is None else envrion
self.envrion['bottle.request'] = self
@DictProperty('environ', 'bottle.request.query', read_only=True)
def query(self):
get = self.environ['bottle.get'] = FormsDict()
pairs = _parse_qsl(self.environ.get('QUERY_STRING', ''))
for key, value in pairs:
get[key] = value
return get
# version 1
class Request:
"""
some codes here
"""
def query(self):
get = self.environ['bottle.get'] = FormsDict()
pairs = _parse_qsl(self.environ.get('QUERY_STRING', ''))
for key, value in pairs:
get[key] = value
return get
# 获取id request.query().id # 获取page request.query().page
# query method version 2
class Request:
"""
some codes here
"""
@property
def query(self):
if 'bootle.get.query' not in self.environ:
get = self.environ['bottle.get'] = FormsDict()
pairs = _parse_qsl(self.environ.get('QUERY_STRING', ''))
for key, value in pairs:
get[key] = value
return self.environ['bottle.get.query']
>>> AttributeError: can't set attribute
>>> AttributeError: Read-only property
# query method version 3
class Descriptor:
def __init__(self, attr, key, getter, read_only=False):
self.attr = attr
self.key = key
self.getter = getter
self.read_only = read_only
def __set__(self, obj, value):
if self.read_only:
raise AttributeError('Read only property.')
getattr(obj, self.attr)[self.key] = value
def __get__(self, obj, cls):
if obj is None:
return self
key, storage = self.key, getattr(obj, self.attr)
if key not in storage:
storage[key] = self.getter(obj)
return storage[key]
def __delete__(self, obj):
if self.read_only:
raise AttributeError('Read only property.')
del getattr(obj, self.attr)[self.key]
class Reqeust:
"""
some codes
"""
def query(self):
get = self.environ['bottle.get'] = FormsDict()
pairs = _parse_qsl(self.environ.get('QUERY_STRING', ''))
for key, value in pairs:
get[key] = value
return get
query = Descriptor('environ', 'bottle.get.query', query, read_only=True)
key, storage = self.key, getattr(obj, self.attr) # key='bottle.get.query' # storage = environ 即包含HTTP请求的信息的environ # 判断envrion中是否包含key来决定是否需要解析 if key not in storage: storage[key] = self.getter(obj) # self.getter(obj)就是调用了原来的query方法,不过要传入一个Request实例,也就是obj return storage[key]
query = Descriptor('envrion', 'bottle.get.query', query, read_only=True)
class DictProperty(object):
""" Property that maps to a key in a local dict-like attribute. """
def __init__(self, attr, key=None, read_only=False):
self.attr, self.key, self.read_only = attr, key, read_only
def __call__(self, func):
functools.update_wrapper(self, func, updated=[])
self.getter, self.key = func, self.key or func.__name__
return self
def __get__(self, obj, cls):
if obj is None: return self
key, storage = self.key, getattr(obj, self.attr)
if key not in storage: storage[key] = self.getter(obj)
return storage[key]
def __set__(self, obj, value):
if self.read_only: raise AttributeError("Read-Only property.")
getattr(obj, self.attr)[self.key] = value
def __delete__(self, obj):
if self.read_only: raise AttributeError("Read-Only property.")
del getattr(obj, self.attr)[self.key]
@DictProperty('environ', 'bottle.get.query', read_only=True)
def query(self):
""" some codes """
property = DictProperty('environ', 'bottle.get.query', read_only=True)
@property
def query(self):
""" some codes """
def query(self):
""" some codes """
property = DictProperty('environ', 'bottle.get.query', read_only=True)
query = property(query) # @实现的语法糖
def query(self):
""" some codes """
query = DictProperty('environ', 'bottle.get.query', read_only=True)(query)
def query(self):
""" some codes """
query = Descriptor('environ', 'bottle.get.query', query, read_only=True)
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有