Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие
Поиск по общедоступным номерам WeChat [Chengyuan Xiaozhuang] - Напрасных действий не бывает, важен каждый шаг
предисловие
Когда необходимо прокомментировать проект Django Full Stack, передний пост отправьте запрос на бэкэндуcsrf
Проверка, после того, как код прокомментирован, нет необходимости проверять его. Как реализовать, что только одна строка кода может быть прокомментирована, и вся функция может быть прокомментирована? Эта статья познакомит插拔式设计
Как это достигается?
Подключаемый дизайн
插拔式设计
Реализация требует помощи модуляimportlib
, модуль может преобразовать путь типа string в формат синтаксиса импортированного модуля.
# 导入模块的常规写法
from module import object
# 使用importlib
import importlib
res = 'myfile.test'
ret = importlib.import_module(res) # from myfile import b
Этот метод разработки кода может имитировать сообщения уведомлений, одновременно отправлять упрощенную версию WeChat, QQ SMS и т. д., а также может легко закрыть определенный канал уведомлений.
Один из способов: обычное мышление
Создаватьpy
файле, определите каждую функцию как функцию, создайте файл запуска, импортируйте определенную функцию и запустите ее в файле запуска.
myfile文件夹
- notify.py
def wechat(content):
print(f'微信通知:{content}')
def message(content):
print(f'短信通知:{content}')
def qq(content):
print(f'qq通知{content}')
- start.py
import notify
def send(content):
notify.wechat(content)
notify.message(content)
notify.qq(content)
if __name__ == '__main__':
send('下课啦')
Метод 2: объектно-ориентированный
- Основываясь на идее промежуточного программного обеспечения django, каждая функция имеет эксклюзивный py-файл, расположенный в одном каталоге.
- Создайте конфигурационный файл settings.py и пропишите в виде строки путь к конкретному объекту в модуле, который необходимо импортировать в список.
- Каждый py-файл в папке, где хранится функция, является функциональным модулем, поэтому папка представляет собой пакет, поэтому ее необходимо создать в этой папке.
__init__.py
файл, поместите имя каждого функционального модуля в файл py - существует
__init__.py
В файле через for loop+duck type+string method+reflection можно реализовать добавление или удаление определенной функции в settings.py в django только добавлением комментариев или раскомментированием
# notify文件夹就是包
- email.py
class Email():
def __init__(self):
# 调用应用接口
pass
def send(self,content):
print(f'email{content}')
- qq.py
class QQ():
def __init__(self):
# 调用应用接口
pass
def send(self,content):
print(f'qq{content}')
-wechat.py
class Wechat():
def __init__(self):
# 调用应用接口
pass
def send(self,content):
print(f'wechat{content}')
- settings.py
NOTIFY_LIST = [
'notify.email.Email',
'notify.qq.QQ',
'notify.wechat.Wechat'
]
- __init__.py
import settings
import importlib
def send_all(content):
for path_str in settings.NOTIFY_LIST: #'notify.email.Email'
module_path,class_name = path_str.rsplit('.',maxsplit=1)
# module_path = 'notify.email' class_name = 'Email'
# 1 利用字符串导入模块
module = importlib.import_module(module_path) # from notify import email
# 2 利用反射获取类名
cls = getattr(module,class_name) # Email、QQ、Wechat
# 3 生成类的对象
obj = cls()
# 4 利用鸭子类型直接调用send方法
obj.send(content)
- start.py
import notify
if __name__ == '__main__':
notify.send_all('haha')
Эпилог
Статья была впервые опубликована в публичном аккаунте WeChat.Ченг Юань Сяочжуан, синхронизировано сНаггетс.
Кодировать слова непросто, объясните, пожалуйста, источник перепечатки, а маленькие друзья, которые проходят мимо, протягивают свои милые пальчики и ставят лайк перед уходом (╹▽╹)