说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢你们!python
接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/85613780mysql
目录redis
一丶建立项目sql
二丶建立工程目录(拆分manage.py)数据库
三丶以开发环境进行项目测试flask
一丶建立项目
1 新建ihome_python项目文件夹api

2 在Pycharm中打开此文件 ,并配置项目解释器(python2环境)浏览器

3 在工程目录下建立manage.py做为项目启动文件缓存
# coding:utf-8
from flask import Flask
app = Flask(__name__)
@app.route('/index')
def index():
return "index page"
if __name__ == '__main__':
app.run()
class Config(object):
"""配置信息"""
DEBUG = True
SECRET_KEY = "cdtaogang**CSDN@uhduqw82981h"
# 链接mysql数据库
SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/ihome_python"
SQLALCHEMY_TRACK_MODIFICATIONS = True
app.config.from_object(Config)
db = SQLAlchemy(app)
- step3 在本地mysql中建立ihome_python数据库
create database ihome_python charset=utf8;
- step4 配置redis数据库用于保存session信息以及缓存数据(由于flask框架默认将session数据存到cookie中),因此这里须要利用flask_session这个工具包帮助咱们将flask存储的session数据交给咱们管理,这样就能够将session数据存到redis数据库中了
class Config(object):
"""配置信息"""
DEBUG = True
SECRET_KEY = "cdtaogang**CSDN@uhduqw82981h"
# 链接mysql数据库
SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/ihome_python"
SQLALCHEMY_TRACK_MODIFICATIONS = True
# redis数据库配置
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
app.config.from_object(Config)
db = SQLAlchemy(app)
#建立redis数据库链接对象
redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
- step5 配置flask_session用于咱们操做session到redis数据库(说明在Config类中再次建立redis数据库链接,是由于在实际线上环境中,可能须要将session数据存到不一样的服务器上)
# flask_session配置
SESSION_TYPE = "redis"
SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_USE_SIGNER = True # 对cookie中session_id进行隐藏处理
PERMANENT_SESSION_LIFETIME = 86400 # session数据的有效期,单位秒
# 利用flask_session, 将session数据保存到redis中
Session(app)
- step6 开启csrf防御机制(导入flask_WTF中的CSRFProtect类)
# 为flask补充csrf防御
CSRFProtect(app)
二丶建立工程目录(拆分manage.py)
1 拆分配置文件服务器
- step1 在项目根目录下建立一个config.py文件,将manage.py中的Config配置类放到该文件中

- step2 工程实现后,有两种运行环境,开发测试环境以及生成环境(线上环境),因此flask程序在运行时,就须要配置两个配置类,一个是用于开发环境,另外一个用于生成环境
class DevelopmentConfig(Config):
"""开发环境配置信息"""
DEBUG = True
class ProductConfig(Config):
"""生成环境配置信息"""
pass

#构建配置映射关系
config_map = {
"develop": DevelopmentConfig,
"product": ProductConfig
}
- step5 导入config中的config_map,经过调用create_app方法,建立app对象,将咱们须要的配置环境经过传参的方式来决定是用开发环境仍是生产环境,在create_app方法中就按照指明的环境进行配置便可

- step6 因最初建立的manage.py做为项目启动文件,因此咱们在manage文件中只保留启动代码便可,需将其他代码抽离出去,保证manage文件中没有其余的代码,项目根目录下只须要保留启动文件manage以及config配置文件,即在项目根目录下建立一个ihome的python包,将create_app代码放到这个ihome包的init文件中便可,随后在ihome包下建立一个static目录用于存放静态文件,再建立一个models.py文件用于作数据库的迁移

- step7 在manage中建立并绑定app对象的代码,放到init中,会致使没法绑定create_app方法里面的app,因此使用SQLAlchemy对象db提供的init_app方法,在create_app方法里面对db进行初始化,这样就解决了

- step8 在models.py文件中导入数据库对象db
from ihome import db
- step9 将manage文件中建立的redis数据库链接对象放到init文件中,须要思考是否放在create_app方法中,由于最初在manage文件中建立的redis数据库链接须要从config文件中拿去host以及port配置,因此咱们在全局声明redis_store变量为None,而后在方法中经过config_map获取的环境配置类config_class,说白了也就是config中的开发类DevelopmentConfig,直接拿去类中咱们配置好的r链接redis数据库的port和host

- step10 对于Session(app)和CSRFProtect(app),不会用到这两个对象来进行进一步操做,只是刚开始使用这两个对象来初始化app,一个是为了咱们将session数据存到redis数据库,另外一个是为了开启CSRF防御机制,因此直接放到create_app类便可
# 利用flask_session, 将session数据保存到redis中
Session(app)
# 为flask补充csrf防御
CSRFProtect(app)
- step11 建立蓝图,用于管理不一样版本的视图,在ihome核心目录下建立一个api_1_0python包,表明1.0版本的蓝图,在这个蓝图下就能够建立各类各样的视图了,在api_1_0蓝图下建立一个demo.py文件,将启动文件manage中的视图函数放到里面
@app.route('/index')
def index():
return "index page"
- step12 在api_1_0包下的init文件中建立蓝图

- step13 在flask项目应用文件init中注册蓝图 ,首先在init文件中经过绝对路径导入api_1_0包,再经过app应用对象中的register_blueprint方法,注册api_1_0包中的api蓝图名字,并定义url前缀地址为/api/v1.0表示1.0版本
# 注册蓝图
app.register_blueprint(api_1_0.api, url_prefix="/api/v1.0")
- step14 在建立工程时,可能会用到数据库models文件,那么就须要使用迁移插件,从flask_script中引入脚本命令管理对象,再从flask_migrate中导入迁移执行者Migrate,迁移命令解析人员Migratecommand

三丶以开发环境进行项目测试
- step1 在Pycharm终端中,执行python manage.py runserver 默认端口,运行项目

在浏览器中成功渲染出index视图函数返回的字符串,以下图

- step3 回到Pycharm终端查看程序日志,请求方式和地址以及状态码都是彻底正确,表明项目设计成功
