数据库迁移(migrate)扩展的使用和使用flask框架发送邮件(二十一)

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框架发送邮件

(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	邮件账户的密码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值