一、准备工作
- 经过分析,项目需要用f以下技术
- lask框架前后端分离
- mysql数据库
- redis数据库
- 工程日志
- 前端静态文件
- …
1.创建虚拟环境
pipenv shell
2、安装Flask框架及相关包
- 需要用到以下安装包
- Flask框架
- flask-sqlalchemy 数据库连接
- 2.3 redis 数据库连接
- 2.4 flask-wtf :表单处理
- 2.5 flask-session :session 和 cookies应用
pip install flask
pip install flask-sqlalchemy
pip install redis
pip install flask-wtf
pip install flask_session
3、创建Flask工程
二、配置环境
-
根据项目分析,项目需要准备以下内容
-
- flask框架
-
2、mysql
-
3、redis
-
4、session:参数SESSION_TYPE和SESSION_REDIS保存到redis数据库中,并对session签名
-
form验证表单需要加密
-
flask框架入口文件一般用manage.py,现在把所有可能用的到东西都写到一个入口文件,再进行拆分
1、入口文件准备
- 入口文件需要准备以下内容:
1、配置参数:定义成一个配置类,保存配置参数 - mysql数据库配置参数
- 安装并启动mysql数据库,并定义相关配置参数
- redis数据库配置参数:注册时可能会用到图片和短信验证,保存到redis数据库中
- 安装redis数据库
- session保存redis数据库中时,需要配置
2、加载配置文件
3、创建mysql数据库
4、创建redis数据库
5、session绑定app
6、form验证表单 wtf csrf
# manage.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
import redis
from flask_wtf import CSRFProtect
app=Flask(__name__)
class Config():
"""配置信息"""
SECRET_KEY="ASDFLKASDKJF%AKLSDXO$IPPIUF" # 字符串随便设,用于session签名使用
# mysql数据库配置
# 连接数据库
MYSQL_HOSTNAME = '127.0.0.1'
# 数据库
MYSQL_DATABASE = 'testdb'
# 端口
MYSQL_PORT = 3306
# 用户名和密码
MYSQL_USERNAME = 'root'
MYSQL_PASSWORD = 'root'
# mysql+pymysql://用记名:密码@址址:端口/数据库
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_HOSTNAME, MYSQL_PORT, MYSQL_DATABASE)
# redis 配置
REDIS_HOSTNAME="127.0.0.1"
REDIS_PORT=6379
# flask-session
SESSION_TYPE = 'redis'
SESSION_REDIS = redis.Redis(host=REDIS_HOSTNAME, port=REDIS_PORT)
SESSION_USE_SIGNER = True # session 签名
PERMANENT_SESSION_LIFETIME = 86400 # session生命周期,单位是秒,1天=60*60*24
# 加载配置参数
app.config.from_object(Config)
# 建立mysql数据库对象
db=SQLAlchemy(app)
# 创建Redis
redis_store = redis.Redis(host=Config.REDIS_HOSTNAME, port=Config.REDIS_PORT)
# session
Session(app)
# post请求 wtf csrf
CSRFProtect(app)
app.route("/")
def index():
return "hello world!"
if __name__=="__main__":
app.run()
2、入口文件拆分
2.1 拆分配置文件
- 项目配置文件一般都是单独的文件,故把 配置类拆分到配置文件中
- 项目一般都会分为开发环境和生产环境,所以再创建两个类,用于区分开发和生产环境,有些参数都是共用,所以两个类共用公共部分基类
- 加载配置文件时,怎么区分哪个是生产环境哪个是开发环境,有两种方式,一般对app定义采用工厂模式,传递参数,在函数内进行区分
- 方式一:用if判断进行区分
- 方式二:用字典引用
2.1.1 拆分后的配置文件
import redis
class Config():
"""配置信息"""
SECRET_KEY = 'ASDAXCWE5ERTFG%%DAS34' # 这个字符串自己随便写,用于session加密
# mysql配置
MYSQL_HOSTNAME = '127.0.0.1'
MYSQL_DATABASE = 'testdb'
MYSQL_PORT = 3306
MYSQL_USERNAME = 'root'
MYSQL_PASSWORD = 'root'
# mysql+pymysql://用记名:密码@址址:端口/数据库
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_HOSTNAME, MYSQL_PORT,MYSQL_DATABASE)
# redis 配置
REDIS_HOSTNAME = "127.0.0.1"
REDIS_PORT = 6379
# flask-session session保存到redis中
SESSION_TYPE = 'redis'
SESSION_REDIS = redis.Redis(host=REDIS_HOSTNAME, port=REDIS_PORT)
SESSION_USE_SIGNER = True # 对session签名,即加密
PERMANENT_SESSION_LIFET