Flask.2
Flask 拆分文件
FlaskWork 为工程文件
- __init__.py :
from flask import Flaskfrom App.extension import init_ext from App.settings import envs from App.views import init_bluedef create_app(env):# 创建Flask对象app = Flask(__name__)# 加载配置 初始化配置 app.config.from_object(envs.get(env))# 初始化扩展库,加载扩展库 init_ext(app)# 初始化路由 加载路由 init_blue(app)return app
- extension.py(扩展库)
from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy() migrate = Migrate()def init_ext(app):db.init_app(app)migrate.init_app(app, db)
- settings.py(一般配置四套环境:开发环境、测试环境、演示环境、生产环境)
def get_db_uri(dbinfo):database = dbinfo.get("DATABASE")driver = dbinfo.get("DRIVER")user = dbinfo.get("USER")password = dbinfo.get("PASSWORD")host = dbinfo.get("HOST")port = dbinfo.get("PORT")name = dbinfo.get("NAME")return "{}+{}://{}:{}@{}:{}/{}".format(database,driver,user,password,host,port,name)class Config:DEBUG = FalseTESTING = FalseSECRET_KEY = "zbczbc"SQLALCHEMY_TRACK_MODIFICATIONS = Falseclass DevelopConfig(Config):DEBUG = Truedbinfo = {"DATABASE":"mysql","DRIVER":"pymysql","USER":"root","PASSWORD":"your password","HOST":"127.0.0.1","PORT":"3306","NAME":"FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class TestingConfig(Config):TESTING = Truedbinfo = {"DATABASE":"mysql","DRIVER":"pymysql","USER":"root","PASSWORD":"your password","HOST":"127.0.0.1","PORT":"3306","NAME":"FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class StagingConfig(Config):dbinfo = {"DATABASE": "mysql","DRIVER": "pymysql","USER": "root","PASSWORD": "your password","HOST": "127.0.0.1","PORT": "3306","NAME": "FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class ProductConfig(Config):dbinfo = {"DATABASE": "mysql","DRIVER": "pymysql","USER": "root","PASSWORD": "your password","HOST": "127.0.0.1","PORT": "3306","NAME": "FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)envs = {"develop": DevelopConfig,"testing": TestingConfig,"staging": StagingConfig,"product": ProductConfig,"default": ProductConfig }
- views.py(视图函数(FlaskWork))
from Movies.views import movies_blue from Users.views import users_bluedef init_blue(app):app.register_blueprint(blueprint=users_blue)app.register_blueprint(blueprint=movies_blue)
Users
- models.py
from FlaskWork.extension import db from common.models import BaseModelclass User(BaseModel):name = db.Column(db.String(32), unique=True)password = db.Column(db.String(256))email = db.Column(db.String(128), unique=True)icon = db.Column(db.String(256), nullable=True)def check_password(self,password):return self.password == password
- views.py(简单的实现用户注册)
#蓝图 users_blue = Blueprint("users_blue",__name__,url_prefix="/users")@users_blue.route('/register/',methods=["GET","POST"]) def register():if request.method == "GET":return render_template('register.html')elif request.method == "POST":username = request.form.get("username")password = request.form.get("password")password1 = request.form.get("conpassword")email = request.form.get("email")icon = request.files.get("icon")users = User.query.filter(User.name.__eq__(username)).all()if users:return "该用户已存在"if password != password1:return "两次密码输入不一致"path = Noneif icon:try:ext = "." + icon.filename.split(".")[-1]except Exception as e:ext = ".jpg"path = "/static/icons/" + username + extsave_path = "/Users/elema/Desktop/python1903/Day04/FlaskHomework/static/icons/" + username + exticon.save(save_path)user = User(name=username, password=password, email=email, icon=path)if user.save():return redirect(url_for('users_blue.login'))else:return "注册失败"
manage.py(管理者)
import osfrom flask_migrate import MigrateCommand from flask_script import Managerfrom FlaskWork import create_appenv = os.environ.get("FLASK_ENV") or "default"app = create_app(env)manager = Manager(app) manager.add_command("db", MigrateCommand)if __name__ == "__main__":manager.run()
migrations(为迁移文件,可以和数据库进行映射)
扩展库
- 迁移
- 可以自动将模型变成数据库中的表
- 实现
- flask-migrate
- 使用过程
- 安装
- pip install flask-migrate
- 配置
- 绑定app和db
- 创建一个Migrate对象,传递app和db进去
- 安装
-
- 具体使用
- 首次使用需要初始化
- python manage.py db init
- 如果模型有变更,生成迁移文件
- python manage.py db migrate
- 将迁移文件映射到数据库中
- python manage.py db upgrade(升级)
- 后悔药
- python manage.py db downgrade(降级)
- 首次使用需要初始化
- 具体使用
转载于:.html
Flask.2
Flask 拆分文件
FlaskWork 为工程文件
- __init__.py :
from flask import Flaskfrom App.extension import init_ext from App.settings import envs from App.views import init_bluedef create_app(env):# 创建Flask对象app = Flask(__name__)# 加载配置 初始化配置 app.config.from_object(envs.get(env))# 初始化扩展库,加载扩展库 init_ext(app)# 初始化路由 加载路由 init_blue(app)return app
- extension.py(扩展库)
from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy() migrate = Migrate()def init_ext(app):db.init_app(app)migrate.init_app(app, db)
- settings.py(一般配置四套环境:开发环境、测试环境、演示环境、生产环境)
def get_db_uri(dbinfo):database = dbinfo.get("DATABASE")driver = dbinfo.get("DRIVER")user = dbinfo.get("USER")password = dbinfo.get("PASSWORD")host = dbinfo.get("HOST")port = dbinfo.get("PORT")name = dbinfo.get("NAME")return "{}+{}://{}:{}@{}:{}/{}".format(database,driver,user,password,host,port,name)class Config:DEBUG = FalseTESTING = FalseSECRET_KEY = "zbczbc"SQLALCHEMY_TRACK_MODIFICATIONS = Falseclass DevelopConfig(Config):DEBUG = Truedbinfo = {"DATABASE":"mysql","DRIVER":"pymysql","USER":"root","PASSWORD":"your password","HOST":"127.0.0.1","PORT":"3306","NAME":"FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class TestingConfig(Config):TESTING = Truedbinfo = {"DATABASE":"mysql","DRIVER":"pymysql","USER":"root","PASSWORD":"your password","HOST":"127.0.0.1","PORT":"3306","NAME":"FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class StagingConfig(Config):dbinfo = {"DATABASE": "mysql","DRIVER": "pymysql","USER": "root","PASSWORD": "your password","HOST": "127.0.0.1","PORT": "3306","NAME": "FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class ProductConfig(Config):dbinfo = {"DATABASE": "mysql","DRIVER": "pymysql","USER": "root","PASSWORD": "your password","HOST": "127.0.0.1","PORT": "3306","NAME": "FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)envs = {"develop": DevelopConfig,"testing": TestingConfig,"staging": StagingConfig,"product": ProductConfig,"default": ProductConfig }
- views.py(视图函数(FlaskWork))
from Movies.views import movies_blue from Users.views import users_bluedef init_blue(app):app.register_blueprint(blueprint=users_blue)app.register_blueprint(blueprint=movies_blue)
Users
- models.py
from FlaskWork.extension import db from common.models import BaseModelclass User(BaseModel):name = db.Column(db.String(32), unique=True)password = db.Column(db.String(256))email = db.Column(db.String(128), unique=True)icon = db.Column(db.String(256), nullable=True)def check_password(self,password):return self.password == password
- views.py(简单的实现用户注册)
#蓝图 users_blue = Blueprint("users_blue",__name__,url_prefix="/users")@users_blue.route('/register/',methods=["GET","POST"]) def register():if request.method == "GET":return render_template('register.html')elif request.method == "POST":username = request.form.get("username")password = request.form.get("password")password1 = request.form.get("conpassword")email = request.form.get("email")icon = request.files.get("icon")users = User.query.filter(User.name.__eq__(username)).all()if users:return "该用户已存在"if password != password1:return "两次密码输入不一致"path = Noneif icon:try:ext = "." + icon.filename.split(".")[-1]except Exception as e:ext = ".jpg"path = "/static/icons/" + username + extsave_path = "/Users/elema/Desktop/python1903/Day04/FlaskHomework/static/icons/" + username + exticon.save(save_path)user = User(name=username, password=password, email=email, icon=path)if user.save():return redirect(url_for('users_blue.login'))else:return "注册失败"
manage.py(管理者)
import osfrom flask_migrate import MigrateCommand from flask_script import Managerfrom FlaskWork import create_appenv = os.environ.get("FLASK_ENV") or "default"app = create_app(env)manager = Manager(app) manager.add_command("db", MigrateCommand)if __name__ == "__main__":manager.run()
migrations(为迁移文件,可以和数据库进行映射)
扩展库
- 迁移
- 可以自动将模型变成数据库中的表
- 实现
- flask-migrate
- 使用过程
- 安装
- pip install flask-migrate
- 配置
- 绑定app和db
- 创建一个Migrate对象,传递app和db进去
- 安装
-
- 具体使用
- 首次使用需要初始化
- python manage.py db init
- 如果模型有变更,生成迁移文件
- python manage.py db migrate
- 将迁移文件映射到数据库中
- python manage.py db upgrade(升级)
- 后悔药
- python manage.py db downgrade(降级)
- 首次使用需要初始化
- 具体使用
转载于:.html