Python【模块】importlib,requests
内容概要:
模仿django中间件的加载方式
importlib模块
requests模块
rsplit()
用实际使用的理解来解释两个模块
importlib模块:
通常用于动态引入自定义模块,代码中module=importlib.import_module(module_path),module为引入的模块对象,module_path为包含模块路径和模块名的字符串。
requests模块:
通常我们通过浏览器发送http请求,在python中,可以用requests模块来实现。
应用实例(两者一起应用实例)
需求:从settings配置文件加载所有插件,插件在src/plugins.nic目录下,分别有是单独文件,注意:django的中间件也是用这种方式加载。
settings配置
PLUGIN_ITEMS = { "nic": "src.plugins.nic.Nic", "disk": "src.plugins.disk.Disk", } API = "http://127.0.0.1:8000/api/server.html"
views代码
import sys import os import importlib import requests BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASEDIR) from conf import settings server_info = {} for k,v in settings.PLUGIN_ITEMS.items(): # 找到v字符串:src.plugins.nic.Nic,src.plugins.disk.Disk module_path,cls_name = v.rsplit('.',maxsplit=1) # rsplit,倒叙的split,maxsplit=1,第一个'.' module = importlib.import_module(module_path) cls = getattr(module,cls_name) obj = cls() ret = obj.process() server_info[k] = ret requests.post( url=settings.API, data=server_info )
tips:
module_path,cls_name = v.rsplit('.',maxsplit=1)
# rsplit,倒叙的split,maxsplit=1,第一个'.'