Django也有内置的邮件发送器
一、数据库迁移
pip install flask-migrate 要依赖 pip install flask-script才能运行
- 数据库迁移文档的代码
from flask import Flask, render_template, redirect, request, url_for, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, IntegerField, TextField
from wtforms.validators import DataRequired
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
app = Flask(__name__)
app.secret_key = '1'
class Config(object):
SQLALCHEMY_DATABASE_URI = 'mysql://xiaobook:xiaobook@127.0.0.1:3306/bookflask'
SQLALCHEMY_TRACK_MODIFICATIONS = True
app.config.from_object(Config)
db = SQLAlchemy(app)
#创建Flask脚本管理工具对象
manager = Manager(app)
#创建数据库迁移工具对象
Migrate(app, db)
#向Manager对象中添加数据库操作命令
manager.add_command("db", MigrateCommand)
#定义模型类-作者
class Author(db.Model):
__tablename__ = 'author1'
id = db.Column(db.Integer, primary_key=True)#整形的主键,会默认设置为自增主键
name = db.Column(db.String(32), nullable=False)
mobile = db.Column(db.String(64))
au_book = db.relationship('Book', backref='author')
def __repr__(self):
"""定义之后,可以让显示对象的时候更加直观"""
return '对象名字为%s' % self.name
#定义模型类-书名
class Book(db.Model):
__tablename__ = 'books'
id = db.Column(db.Integer, primary_key=True)
info = db.Column(db.String(32), unique=True)
au_book = db.Column(db.Integer, db.ForeignKey('author1.id'))
def __str__(self):
return 'Book:%s,%s' % (self.info, self.lead)
if __name__ == '__main__':
manager.run()
- 数据库迁移命令的顺序
(1)python sql_main.py db init
:初始化操作(对文件的初始化操作)
(2)python sql_main.py db migrate
:创建迁移脚本(迁移失败,后面的操作无法进行)
(3)python sql_main.py db upgrade
:更新数据库
(4)python sql_main.py db migrate -m 'add mobile'
:当某个模型添加了相应字段,执行此命令即会在数据库中添加相应字段
(5)python sql_main.py db history
:查看数据迁移历史版本
(6)python sql_main.py db downgrade 6d81b6cde0ac
:回退数据库操作,6d81b6cde0ac是python sql_main.py db history
中的版本号
二、flask框架发送邮件
- 参考文档:flask_mail发送邮件
- 代码:
(1) main.py
from flask import Flask, render_template
from flask_mail import Mail, Message
import config
mail = Mail()
app = Flask(__name__)
app.config.from_object(config)
mail.init_app(app)
#发送文本
@app.route('/email_send_charactor/')
def email_send_charactor():
message = Message(subject='hello flask-mail', recipients=['3244037268@qq.com'], body='flask-mail测试代码')
try:
mail.send(message)
return '发送成功,请注意查收~'
except Exception as e:
print(e)
return '发送失败'
#发送一个html
@app.route('/email_send_html/')
def email_send_html():
message = Message(subject='hello flask-mail',recipients=['2929611521@qq.com'])
try:
#发送渲染一个模板
message.html = render_template('HomePage/index.html')
mail.send(message)
return '发送成功,请注意查收~'
except Exception as e:
print(e)
return '发送失败'
#发送附带附件的邮件
@app.route('/email_send_attach/')
def email_send_attach():
message = Message(subject='hello flask-mail',recipients=['2929611521@qq.com'], body='我是一个附件邮件')
try:
with open('./static/Images/1.jpg', 'rb') as fp:
message.attach("test.jpg", "image/jpg", fp.read())
mail.send(message)
return '发送成功,请注意查收~'
except Exception as e:
print(e)
return '发送失败'
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
(2)config.py
#encoding:utf-8
# __author__ = 'donghao'
# __time__ = 2019/1/13 21:38
# 邮箱
MAIL_SERVER = "smtp.qq.com"
MAIL_PORT = "587"
MAIL_USE_TLS = True
MAIL_USERNAME = "3479461057@qq.com"
MAIL_PASSWORD = "xdqumekiumitciad" #生成的授权码
MAIL_DEFAULT_SENDER = "3479461057@qq.com"
# MAIL_SERVER localhost 电子邮件服务器的主机名或IP地址
# MAIL_PORT 587 电子邮件服务器的端口
# MAIL_USE_TLS False 启用传输层安全协议
# MAIL_USE_SSL False 启用安全套接层协议
# MAIL_USERNAME None 邮件账户的用户名
# MAIL_PASSWORD None 邮件账户的密码