此项目用来检测学校的停断电公告信息,并及时将新的停断电公告信息推送给订阅者的邮箱,从而让订阅者提前做好服务器断电的准备工作,避免服务器等设备因意外断电而造成数据丢失。
- 曾因为没有及时获知学校的停电通告,没有提前关闭服务器,服务器在运行过程中被强行断电,造成服务器上的数据丢失。事后的数据恢复工作十分繁杂,且未备份的数据没能完全找回。简而言之,就是因为服务器运行中意外断电造成过数据丢失。
- 在断电前几天,学校就会在后勤保障部门的网站上提前告知停电事件
- 本人会忘记关注学校的停电通知,因此想让程序在有新的停电事件公布时自动推送本人邮箱
- Django (Python Web 框架)
- django-crontab (Django 定时任务)
- selenium ( 自动测试工具,此处用来爬取数据 )
- Django 数据库中提前保存订阅者邮箱信息
- 利用 django-crontab 实现定时爬虫任务, selenium 每天爬取一次学校最新发布的公告信息
- 如果爬取到新的公告信息,将其放到后台数据库中,用于去重(同一通告信息只通知一次),同时利用 Django 提供的 SMTP 邮件功能发送邮件给订阅者
- Linux (windows 下 django-crontab 运行有问题)
- Python 3
- chromium-chromedriver (安装:
sudo apt-get install chromium-chromedriver
) - nginx (部署用,也可直接采用 runserver 运行服务)
- python 包: requirement.txt 文件 (安装:
pip install -r requirement.txt
)
-
部署前先在 power_outage_notify/settings.py (第127 行)中编辑自己用于通知的邮箱
# TODO: 请设置自己用于发邮件的邮箱, 设置自己的邮箱及授权码 # 自己的邮箱 EMAIL_HOST_USER = '[email protected]' # 自己的邮箱授权码,非密码 EMAIL_HOST_PASSWORD = 'xxxx'
-
构建并启动 Docker (当前目录下):
docker-compose up
-
创建后台管理员账号(可选,可不执行此步骤):
docker exec -it powernotify_app_1 bash create_super_user.sh
-
添加订阅者的邮箱, 浏览器中访问(请确保防火墙开放 9089 端口):
http://服务器地址:9089/subscriber/add/?email=邮箱地址
-
部署前先在 power_outage_notify/settings.py (第127 行)中编辑自己用于通知的邮箱
# TODO: 请设置自己用于发邮件的邮箱, 设置自己的邮箱及授权码 # 自己的邮箱 EMAIL_HOST_USER = '[email protected]' # 自己的邮箱授权码,非密码 EMAIL_HOST_PASSWORD = 'xxxx'
-
添加爬虫检测的定时服务: python manage.py crontab add
-
查看定时服务: python manage.py crontab show
-
python manage.py makemigrations
-
python manage.py migrate (数据库迁移)
-
python manage.py createsuperuser (创建后台管理员账号)
-
python manage.py collectstatic (生成静态文件)
-
python manage.py runserver (运行服务,此方式仅在单机测试环境使用,生产环境部署请使用 Nginx + wsgi 方式运行)
-
进入 admin 后台,添加订阅者的邮箱 (后台管理地址,浏览器中访问:
http://服务器地址:服务监听的端口/admin/
)
- 学校发布通知信息的网站
- 后端爬取到的停电信息
- 订阅者信息
- 邮箱通知效果