项目结构搭建
创建一个Flask项目
第一步
先创建一个python Package 起名叫做app
第二步
把static文件夹和template文件夹放入app文件夹中
第三步
创建settings.py配置文件
"""
ENV = "development"
DEBUG = True
SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:123456@39.106.150.87:3306/py1901"
SQLALCHEMY_TRACK_MODIFICATIONS = True
--------------------------------------------------------------------
# secret key
SECRET_KEY = 'dhfjh244djsqopfv5790874878jchfjh'
# SECRET_KEY=os.urandom(24)
PERMANENT_SESSION_LIFETIME = timedelta(hours=1)
--------------------------------------------------------------------
# permanent_session_lifetime
BASE_DIR = os.path.dirname(__file__)
# print(BASE_DIR)
UPLOAD_DIR = os.path.join(BASE_DIR, 'app/static/upload')
"""
第四步
重命名启动文件app.py文件名为manage.py
第五步
将启动文件manage.py中"""app = Flask(__name__)"""去除,仅作为启动文件@app.route('/')def hello_world():return 'Hello World!
第六步
在app文件夹中的__init__.py(存放各种配置文件。蓝图,模型等配置文件都放在这个文件夹中)文件中去构建app
"""from flask import Flaskimport settingsdef create_app():app = Flask(__name__)app.config.from_object(settings)return app """
第七步
在manage.py文件中要拿到__init__中创建的app对象,调用create_app()这个函数,返回app对象然后使用flask_script中Manager(app)这个类,将app作为实参传入创建一个manager对象来管理app对象"""from app import create_appfrom flask_script import Managerapp = create_app()manager = Manager(app)"""因为把app的权利交给了manager,所以把app.run() 改为了manager.run()
第八步
使用views包,创建一个user_views.py文件,将所有的路由都放在其中)为了避免循环导入,所以使用蓝图在user_views.py文件中:
"""
from flask import Blueprintuser_bp = Blueprint('user',__name__,url_prefix='/user') #定义蓝图 #rl_prefix:路径的前缀@user_bp.route('/') #使用蓝图对象定义路由,相当于app.route('/')
def index():return"....""""
第九步
在app包中的__init__文件中使用主函数app注册蓝图:app.register_blueprint(user_bp)
===========================================================================
pip install pymysql 驱动,相当于pycharm和数据库的链接桥梁
pip install flask sqlalchemy 完成数据的映射
pip install flask-script 脚本命令 操作命令
============================================================================
第十步
为了完成数据库的映射,就需要构建一个sqlalchemy对象,就需要在外围创建一个exts拓展包,所有通过pip安装的都放在这个exts包里,在exts包中的__init__.py文件中创建操作数据库的操作:
"""
from flask_sqlalchemy import SQLAlchemy#创建一个sqlalchemy类对象来完成python中对象和数据库中表的迁移映射
db = SQLAlchemy()
"""
在app文件夹中的__init__.py文件中,完成sqlalchemy的初始化:
"""
from exts import dbdb.init_app(app)
"""
这样db就和app关联起来了,就相当于给db通电了在配置文件settings.py中添加连接数据库的配置:
"""
SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:123456@39.106.150.87:3306/py1901"
SQLALCHEMY_TRACK_MODIFICATIONS = True
"""
第十一步
在models包中,创建user_model.py模型,在文件中创建一个User类,这个类需要继承db.model构成一个模型类对应数据库中的一张表,来完成映射:
"""
from exts import dbclass User(db.model):__tablename__ = 'user'id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(10), nullable=False)password = db.Column(db.String(12), nullable=False)phone = db.Column(db.String(11), nullable=False, unique=True)usertype = db.Column(db.String(20))def __str__(self):return self.username"""
第十二步
因为manager的内置命令只有两个:runserver、shell,为了执行与数据库完成映射,所以需要给manager添加命令,在在启动文件manage.py添加:
"""
from exts import db
from app.models import user_model migrate=Migrate(app=app,db=db)
manager.add_command('db',MigrateCommand)
"""
使用命令:python manage.py db initpython manage.py db migrate - --迁移python manage.py db upgrade来完成python模型与数据库之间的迁移映射