flask框架----扩展

flask框架----扩展,第1张

目录
  • 配置flask
  • *** 作数据库
  • 发送邮件

配置flask
  1. 配置文件settings.py
# 项目根目录下创建settings.py
DEBUG = True
ENV = 'development'
#...

项目中直接,
app.config.from_pyfile(“settings.py”)

  1. 配置文件settings.json
# 根目录下 settings.json

{
	"DEBUG": "True",
}

app.config.from_json(“settings.json”)

  1. 配置app属性, 如app.debug=True。只有属性配置是小写形式
  2. 其他形式
# 字典形式
app.config.from_mapping({"DEBUG": True})

# 环境变量
import os
os.environ["MyConfig"] = 'myconfig.py'
app.config.from_envvar('MyConfig')

# 配置类对象,在settings.py 中定义类
class ProductionConfig(object):
    ENV='production'
    DEBUG=False

from settings import ProductionConfig
app.config.from_object(ProductionConfig)

 

*** 作数据库

flask-sqlalchemy

# 安装
pip install flask-sqlalchemy

# 使用
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb()

# 配置项, settings.py
# 配置连接数据库
SQLALCHEMY_DATABASE_URI = "mysql://lauf:lauf123@localhost:3306/world"
# 配置自动追踪更新
SQLALCHEMY_TRACK_MODIFICATIOINS = True
# 查询显示原始sql
SQLALCHEMY_ECHO = True

# 创建app,并配置
app = Flask(__name__)
app.config.from_pyfile("settings.py")

# 注册db 实例
db = SQLAlchemy(app)

# 定义模型类
class UserByFlask(db.Model):
	id = db.Column(db.Integer, primary_key=True, autoincrement=True)
	name = db.Column(db.String(30), nullable=True)
	age = db.Column(db.Integer)
	
# 创建所有的表
db.create_all(app=app)

# 删除所有表  db.drop_all()

插入数据

# 实例化数据对象
user1 = UserByFlask(name="jack", age=10)
user2 = UserByFlask(name="lucy", age=20)

# 将数据对象,添加到会话中
db.session.add_all([user1, user2])

# 数据提交到数据库
db.session.commit()

另外,还可以为模型类定义函数,实现自动添加数据

# 在模型类中 定义实例方法,遍历获取到的数据,为模型动态赋值
def set_attr(self, data):
    if isinstance(data,dict):
        for k, v in data.items(): # item 最后遍历出来的是 ('key','value')
            if hasattr(self, k) and k != 'id': # id不被赋值,它是主键
                setattr(self, k, v)
    else:
        raise Exception('{0} must be dict'.format(data))
 
 
data = {'name':'lucy','age':23, }
book = Book()
book.set_attr(data)  # 自动赋值

# 添加到会话
db.session.add_all([book])
# 提交到数据库
db.session.commit()

查询数据

# 模型类通过query 来查询

# 对象列表
result = UserByFlask.query.all()

# 遍历
for i in result:
    print(i.name)

# 过滤
r = Book.query.filter(Book.username == 'jack').all()
r = Book.query.filter(Book.username == 'jack').first()

# 获取一个对象 , 没有返回None
r = Book.query.get(id)
r.name = "lucy"  # 更新
db.session.commit() 

# 删除
db.session.delete(r)
db.session.commit()

# 回滚
db.session.rollback()

xxx
过滤器 说明
filter() 把过滤器添加到原查询上, 返回一个新查询
filter_by() 把等值过滤器添加到原查询上, 返回一个新查询
limit() 使用是zing的值限制原查询返回的结果数量, 返回一个新查询
offset() 偏移原查询返回的结果, 返回一个新查询
order_by() 根据指定条件对原查询结果进行排序, 返回一个新查询
group_by() 根据指定条件对原查询结果进行分组, 返回一个新查询

all() 以列表形式返回查询的所有结果
first() 以列表形式返回查询的第一个结果,如果没有结果,则返回 None
first_or_404() 返回查询的第一个结果,如果未查到,返回404
get() 返回指定主键对应的行,如不存在,返回None
get_or_404() 返回指定主键对应的行,如不存在,返回404
count() 返回查询结果的数量
paginate() 返回一个Paginate对象,它包含指定范围内的结果

发送邮件

flask-mail

# 安装
pip install flask-mail
# 使用
from flask_mail import Mail, Message

# 注册邮件实例
mail = Mail(app)

# 还可以
mail = Mail()
mail.init_app(app)

案例:

  1. 配置 在项目的根目录下settings.py

# 配置邮件服务器
MAIL_SERVER = "smtp.qq.com"
MAIL_PORT = 25
MAIL_USERNAME = "944582529@qq.com"
MAIL_PASSWORD = "gvgyqnhuxrhybcje"
MAIL_USE_TSL = True

  1. 配置app

from flask_mail import Mail, Message
# 创建app
app = Flask(__name__)
# 配置app  直接使用settings.py
app.config.from_pyfile("settings.py")

# 注册Mial实例
mail = Mail(app)

@app.route("/send_mail", methods=["GET", "OPTIONS"])
def send_mail():
    # 直接使用mail发送邮件, 返回None
    r = mail.send_message("subject", body="2", sender="944582529@qq.com", recipients=["944582529@qq.com"])
    # 也可以
    # msg = Message("subject", body=, sender=, recipients=)
    # mail.send(msg)
    
    res = jsonify({"code": 200, "msg": "发送邮件成功"})
    res.headers["Access-Control-Allow-Origin"] = "http://localhost:8080"
    res.headers["Access-Control-Allow-Credentials"] = "true"
    res.headers["Access-Control-Allow-Headers"] = "x-requested-with, authorization, token, content-type"

    return res

也可以不指定sender参数,直接配置在settings.py中

MAIL_DEFAULT_SENDER = "XXX"

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存