翼度科技»论坛 云主机 LINUX 查看内容

mail_api_flask 接口开发及uwsgi部署项目

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
一、项目代码
  1. #vim /usr/local/src/mail_api_flask/run.py
  2. """
  3.     mail_api_flask 为基于Flask web框架开发的在线发送邮件api,实现功能复用。支持html模板邮件。
  4. """
  5. from flask import Flask
  6. from flask import request
  7. from flask_mail import Mail, Message
  8. from concurrent.futures import ThreadPoolExecutor  # 线程池
  9. import time
  10. executor = ThreadPoolExecutor(max_workers=10)  # max_workers 配置最大线程数
  11. app = Flask(__name__)
  12. def sendmail(subject, sender_name, recipients, html):
  13.     """
  14.     发送邮件
  15.     :param subject: 邮件主题
  16.     :param sender_name: 发件人别名
  17.     :param recipients: 接收邮箱,list格式
  18.     :param html: html内容模板
  19.     :return: 状态
  20.     """
  21.     app.config['MAIL_SERVER'] = 'smtp.qq.com'
  22.     app.config['MAIL_PORT'] = 465
  23.     app.config['MAIL_USERNAME'] = 'xxxxx@foxmail.com'
  24.     app.config['MAIL_PASSWORD'] = 'xxxxx'
  25.     app.config['MAIL_USE_TLS'] = False
  26.     app.config['MAIL_USE_SSL'] = True
  27.     mail = Mail(app)
  28.     print("sendmail is running..." + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  29.     try:
  30.         msg = Message(subject=subject, sender=(sender_name, 'xxxxx@foxmail.com'), recipients=recipients)
  31.         msg.html = html
  32.         executor.submit(mail.send(msg))  # 多线程发送邮件
  33.         status = {"msg": "Successed", "code": "1000", "sendtime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}
  34.         print("邮件已成功发送到【%s】" % recipients + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  35.     except Exception as e:
  36.         status = {"msg": e, "code": "1001", "sendtime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}
  37.         print("邮件未发送到【%s】" % recipients + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  38.     return status
  39. # http://127.0.0.1:5000/api/v1/sendmail
  40. @app.route("/api/v1/sendmail", methods=["GET", "POST"])
  41. def index():
  42.     if request.method == "POST":
  43.         subject = request.values.get("subject")
  44.         sender_name = request.values.get("sender_name")
  45.         recipients = request.values.get("recipients")
  46.         html = request.values.get("html")
  47.         return sendmail(subject=subject, sender_name=sender_name, recipients=[recipients], html=html)
  48.     return "sendmail接口运行正常!" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  49. if __name__ == '__main__':
  50.     app.run(debug=False, host='0.0.0.0')
复制代码
 
二、uwsgi部署项目

1、创建虚拟环境
  1. cd /usr/local/src/pyENV/
  2. virtualenv mail_api_flask_EN<br><br>
复制代码
 
2、创建uwsgi.ini文件
  1. # vim /usr/local/src/mail_api_flask/uwsgi/uwsgi.ini
  2. [uwsgi]
  3. #服务端口号
  4. http = 127.0.0.1:5000
  5. #项目路径
  6. chdir  = /usr/local/src/mail_api_flask
  7. #wsgi文件 run就是flask启动文件去掉后缀名 app是run.py里面的Flask对象
  8. module  = run:app
  9. virtualenv =/usr/local/src/pyENV/mail_api_flask_ENV
  10. wsgi-file = /usr/local/src/mail_api_flask/run.py
  11. pidfile = /usr/local/src/mail_api_flask/master.pid
  12. #指定工作进程
  13. processes  = 4
  14. #主进程
  15. master = true
  16. #每个工作进程有2个线程
  17. threads = 2
  18. #指的后台启动 日志输出的地方
  19. daemonize = /usr/local/src/mail_api_flask/uwsgi/logs/uwsgi.log
  20. #保存主进程的进程号
  21. pidfile = master.pid
  22. #服务启动的参数
  23. pyargv = -f web_etl.yml
复制代码
3、uwsgi 启动 停止 重新启动 命令
  1. #启动
  2. uwsgi --ini uwsgi.ini
  3. #停止
  4. uwsgi --stop master.ini
  5. #重新启动
  6. uwsgi --reload master.ini
复制代码
 
4、创建start_project.sh文件,赋予可执行权限
  1. #chmod +x start_project.sh
  2. #vim /usr/local/src/mail_api_flask/uwsgi/start_project.sh
  3. uwsgi --ini /usr/local/src/mail_api_flask/uwsgi/uwsgi.ini
复制代码
 
5、编辑nginx配置文件
  1.     # sendmail api
  2.     server {
  3.         listen       8082;
  4.         server_name  _;
  5.         location =/sendmail {
  6.             #include /etc/nginx/uwsgi_params;
  7.             proxy_pass http://127.0.0.1:5000/api/v1/sendmail;
  8.         }
  9.     }
复制代码
 
6、设置开机自启动
  1. #赋予rc.local可执行权限
  2. chmod +x /etc/rc.d/rc.local
  3. #在rc.local添加启动脚本路径
  4. /usr/local/src/mail_api_flask/uwsgi/start_project.sh
  5. #使rc.local文件生效
  6. source /etc/rc.d/rc.local
复制代码
 

来源:https://www.cnblogs.com/QiuPing-blog/p/17240722.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具