python 代理
代理装饰器使用全局机制来标记和注册函数。举个例子,一个根据当前用户来保护代
码访问的安全层可以使用集中式检查器和相关的可调用对象要求的权限来实现:
class User(object):
def __init__(self, roles):
self.roles = roles
class Unauthorized(Exception):
pass
def protect(role):
def _protect(function):
def __protect(*args, **kw):
user = globals().get('user')
if user is None or role not in user.roles:
raise Unauthorized("I won't tell you")
return function(*args, **kw)
return __protect return _protect
这一模型常用于 Python Web 框架中,用于定义可发布类的安全性。例如,Django 提供 装饰器来保护函数访问的安全。
下面是一个示例,当前用户被保存在一个全局变量中。在方法被访问时装饰器会检查 他/她的角色:
>>> tarek = User(('admin', 'user'))
>>> bill = User(('user',))
>>> class MySecrets(object):
... @protect('admin')
...
2.2 高级语法 53
def waffle_recipe(self): print('use tons of butter!')
...
...
>>>
>>> user = tarek
these_are = MySecrets()
54 第2章 语法最佳实践—类级别以下
>>> these_are.waffle_recipe()
use tons of butter!
>>> user = bill
>>> these_are.waffle_recipe() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 7, in wrap __main__.Unauthorized: I won't tell you
(4)上下文提供者 上下文装饰器确保函数可以运行在正确的上下文中,或者在函数前后运行一些代码。换
句话说,它设定并复位一个特定的执行环境。举个例子,当一个数据项需要在多个线程之间 共享时,就要用一个锁来保护它避免多次访问。这个锁可以在装饰器中编写,代码如下:
from threading import RLock
lock = RLock()
def synchronized(function):
def _synchronized(*args, **kw):
lock.acquire()
try:
return function(*args, **kw)
finally:
lock.release() return _synchronized
@synchronized
def thread_safe(): # 确保锁定资源
pass
上下文装饰器通常会被上下文管理器(with 语句)替代
用Python代理池搭建——代理获取(一)python 代理
selenium Python 代理 读取不到代理端口 python http代理服务器
python通过免费代理构建可用代理池-简单示例Python 代理池
Python调用ip代理案例,快代理api调用demopython使用代理访问外网
python获取数据——数据爬虫——代理池随机使用代理python使用ip代理池爬虫
python代理池的构建3——爬取代理ippython代理ip池
Windows 10 搭建Python开发环境(PyCharm )pycharm是python的集成开发环境
FTP pyqt5 python 服务器 python ftp客户端