项目的立项准备大致可以分为7步骤:
1. 创建项目
2. 配置类加载
3. 集成MySQL
4. 集成Redis
5. 开启CSRF保护
6. 集成Session
7. 集成脚本
创建项目:
创建项目时选择flask项目,环境选择已经下好包的环境,模板语言选择Jinja2
配置类加载:
通过类的方式加载配置信息,
目前的需求只要开启Debug
class Config(object):
DEBUG = True
app = Flask(__name__)
app.config.from_object(Config)
集成MySQL:
从 flask_sqlalchemy 中导包 SQLAlchemy
实例化SQLAlchemy并配置连接信息:
from flask_sqlalchemy import SQLAlchemy
class Config(object):
DEBUG = True
# 格式:mysql://用户名:密码@主机号:端口号/数据库名
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo"
# 动态追踪:建议关闭
SQLALCHEMY_TRACK_MODIFICATIONS = False
db = SQLAlchemy(app)
集成Redis:
从 redis 中导包 StrictRedis
由于连接的主机号及端口号都可能发生变化,因此将其写入配置类中
需要使用时可以通过调用类属性 Config.属性 的方式
实例化StrictRedis并配置连接信息:
from redis import StrictRedis
class Config(object):
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo"
SQLALCHEMY_TRACK_MODIFICATIONS = False
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
rs = StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
开启CSRF保护:
开启CSRF保护的目的是为了防止跨站请求伪造
开启的方式也是十分简单:
from flask_wtf import CSRFProtect
CSRFProtect(app)
集成Session:
从 flask_session 中导包 Session
实例化Session并配置连接信息:
查看要配置哪些信息的方式:
Ctrl + 左键方式点进源码:
发现对应的redis有4个配置信息:
SESSION_REDIS,SESSION_KEY_PREFIX
SESSION_USE_SIGNER,SESSION_PERMANENT
因此:
from flask_session import Session
class Config(object):
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo"
SQLALCHEMY_TRACK_MODIFICATIONS = False
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
# session类型
SESSION_TYPE = "redis"
# 连接redis数据库
SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
# 使用签名
SESSION_USE_SIGNER = True
# 存储数据时间(s)
SESSION_PERMANENT = 60*60*24 # 对应为 1 天
Session(app)
集成脚本:
从 flask_script 中导包 Manager
从 flask_migrate 中导包 Migrate 与 MigrateCommand
配置并通过脚本的形式启动服务器:
from flask_script import Manager
manager = Manager(app)
if __name__ == '__main__':
manager.run()
初始化Migrate:
from flask_migrate import Migrate, MigrateCommand
manager = Manager(app)
Migrate(app, db)
manager.add_command("mysql", MigrateCommand)
所有代码:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from redis import StrictRedis
from flask_wtf import CSRFProtect
from flask_session import Session
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
class Config(object):
""" 配置信息 """
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/news_20"
SQLALCHEMY_TRACK_MODIFICATIONS = False
REDIS_HOST = "127.0.0.1"
REDIS_POST = 6379
SECRET_KEY = "a1b2c3d4"
SESSION_TYPE = "redis"
SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_USE_SIGNER = True
PERMANENT_SESSION_LIFETIME = 60*60*24
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
rs = StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
CSRFProtect(app)
Session(app)
Migrate(app, db)
manager = Manager(app)
manager.add_command("mysql", MigrateCommand)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
manager.run()