- 配置flask
- *** 作数据库
- 发送邮件
- 配置文件settings.py
# 项目根目录下创建settings.py
DEBUG = True
ENV = 'development'
#...
项目中直接,
app.config.from_pyfile(“settings.py”)
- 配置文件settings.json
# 根目录下 settings.json
{
"DEBUG": "True",
}
app.config.from_json(“settings.json”)
- 配置app属性, 如app.debug=True。只有属性配置是小写形式
- 其他形式
# 字典形式
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)
案例:
- 配置 在项目的根目录下settings.py
# 配置邮件服务器
MAIL_SERVER = "smtp.qq.com"
MAIL_PORT = 25
MAIL_USERNAME = "944582529@qq.com"
MAIL_PASSWORD = "gvgyqnhuxrhybcje"
MAIL_USE_TSL = True
- 配置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"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)