(一)flask+flask_sqlalchemy+flask_script+flask_migrate 创建一个flask项目
最近开始学习flask, 做一下记录目前这个并不完善,后期会慢慢把这个项目该有的都搭建起来, 目前只是记录flask项目使用,有些详细的我可能也讲不出来,慢慢会去维护补充。如果时间充足,会用我的思路去做一个项目练习。
文件名可能不太规范。
1. 文件结构
- 静态文件的默认文件夹:
static
- 静态文件的默认访问前缀:
/static
- 模板文件的默认文件夹:
templates
testWeb # 项目文件 ---- app # 主目录
---- model # 模型问价夹
---- user.py # 用户模型
---- dash.py # app 创建函数文件
---- handlers.py # 逻辑函数文件, 相当于djano 的 view
---- index.py # 没用,忘记删了
---- myRoutes.py # 路由文件
---- test.py # 没用忘记删了
---- config # 配置文件
---- __init__.py # 主配置写在这里
---- migrations # 使用manage 管理项目的时候自己创建的,主要记录数据迁移版本
---- static # 静态文件
---- templates # html
---- manage.py # 项目管理文件, 使其像diango的 python manage.py 一样使用
2. config.py 文件内容
DIALECT = 'mysql' # 使用mysql DRIVER = 'pymysql' # 使用 pymysql 连接数据库 USERNAME = 'root' # 用户名 PASSWORD = '295213' # 密码 HOST = 'localhost' # ip PORT = '3306' # 端口 DATABASE = 'hr' # 数据库名 # 数据库连接配置 SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format( DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE ) SQLALCHEMY_TRACK_MODIFICATIONS = False
注意: 数据库 hr 必须先创建。
3. dash.py 文件内容及注释
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from flask import Flask from flask_cors import CORS from flask_sqlalchemy import SQLAlchemy import config # 因为config配置是直接写在__init__ 中的所以直接导入即可 # 创建db db = SQLAlchemy() # 取消跨域请求问题 def create_app(): # 创建app app = Flask(__name__) # 导入配置文件 app.config.from_object(config) # 解决跨域请求问题 CORS(app, resources=r'/*') # 数据库绑定app db.init_app(app) # 导入路由 from . import myRoutes # 注册路由 myRoutes.register(app) return app
4. user.py 数据库表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from app.dash import db class Users(db.Model): __tablename__ = "users" # 创建时候的表名 username = db.Column(db.VARCHAR(200), primary_key=True, comment="用户名") def __init__(self, username): self.username = username
5. handlers.py 逻辑处理
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from app.model.user import Users def index(): users = Users.query.filter() print(users) return users.first().username
6. myRoutes.py 路由设置
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from .handlers import index def register(app): # 注册路由 app.add_url_rule('/index', "index", index, methods=['GET'])
7. manage.py 管理文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from app.dash import create_app from flask_script import Manager from flask_migrate import Migrate, MigrateCommand from app.dash import db # from app dash = create_app() # 调用manager.run()启动Manager实例接收命令行中的命令; manager = Migrate(dash, db) # 初始化管理器 manager = Manager(dash) manager.add_command('db', MigrateCommand) manager.add_command('db', MigrateCommand) if __name__ == "__main__": manager.run()
注意: 以上文件在导入的路径。
使用:
在manage.py 所在的目录下 执行命令
python manage.py db init # 初始化 python manage.py db migrate # 记录修改数据 python manage.py db upgrade # 迁移数据
运行项目:
绑定app set flask_app=app.dash 设置为debug 环境, 在这种情况下运行, 在配置文件中添加 DEBUG=True 不会生效,所以采用这种方式运行set flask_env=development 运行 或者 flask run -p port -h ip flask run 注意: 在 linux 环境下要将 set 改为 export
或者直接
python manage.py runserver