flask 的簡單拆分升級版2
阿新 • • 發佈:2018-12-07
#建立manage.py
from flask_script import Manager from app import create_app app=create_app('developConfig')#呼叫建立的註冊create_app,developConfig給他傳一個生產環境,本次選擇開發者環境 manage = Manager(app) if __name__ == '__main__': manage.run()
#建立__init__.py檔案
from flask import Flask from app import settingsfrom app.ext import init_info from app.views import blue def create_app(environ):#定義一個建立app函式,為其新增一個環境變數引數 app = Flask(__name__)#註冊app app.register_blueprint(blueprint=blue)#載入藍圖 app.config.from_object(settings.config_info.get(environ)) #flask擴充套件包的配置資訊 # app.config['SECRET_KEY']='123'#session 的金鑰,如果沒有用session會報錯# app.config['SESSION_TYPE']='redis'#載入redis儲存,還可以理解為redis驅動 # app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///sqlite3.db'#載入sqlite資料庫 # app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/flask1805' # app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falseapp.config.from_object(settings.config_info.get(environ))#從配置裡面開發環境中獲取環境載入到新建立的app中 init_info(app) return app # url 統一資源定位符 # uri 統一資源識別符號
#建立settings.py檔案 # 關於咱們的四個生產環境 # 開發環境 測試環境 演示環境 線上環境 #針對MySQL的資料庫配置,可以呼叫沒有寫死 def get_database_url(info): name = info.get('name') or 'mysql' username = info.get('username') or 'root' password = info.get('password') or 'youpassword' host = info.get('host') or 'localhost' port = info.get('port') or '3306' driver = info.get('driver') or 'pymysql' database = info.get('database') or 'flask3'#換成自己的資料庫 return '{}+{}://{}:{}@{}:{}/{}'.format(name,driver,username,password,host,port,database) #配置資訊類也可以說是線上環境 class Config(): DEBUG = False#預設除錯模式關閉 TESTING = False#測試模式關閉 SECRET_KEY = '123'#金鑰 SESSION_TYPE = 'redis'#session儲存型別 SQLALCHEMY_TRACK_MODIFICATIONS = False#報的一個提示不是錯,只是一個警告資訊,通過這個可以關閉提示,想了解可以註釋掉自己看看 #開發環境 class DevelopConfig(Config): DEBUG = True TESTING = True database = { 'username': 'root', 'password': 'youpassword', 'host': 'localhost', 'port': '3306', 'database': 'flask3', 'driver':'pymysql', 'name' : 'mysql' } # 連結資料庫的url SQLALCHEMY_DATABASE_URI = get_database_url(database) #測試環境 class TestConfig(Config): TESTING = True database = { 'username': 'root', 'password': 'youpassword', 'host': 'localhost', 'port': '3306', 'database': 'flask3', 'driver':'pymysql', 'name' : 'mysql' } SQLALCHEMY_DATABASE_URI = get_database_url(database) #演示環境 class ShowConfig(Config): database = { 'username': 'root', 'password': 'youpassword', 'host': 'localhost', 'port': '3306', 'database': 'flask3', 'driver': 'pymysql', 'name': 'mysql' } SQLALCHEMY_DATABASE_URI = get_database_url(database) #生產環境 class WorkConfig(Config): database = { 'username': 'root', 'password': 'youpassword', 'host': 'localhost', 'port': '3306', 'database': 'flask3', 'driver':'pymysql', 'name' : 'mysql' } SQLALCHEMY_DATABASE_URI = get_database_url(database) #封裝四個開發環境 config_info = { "WorkConfig": WorkConfig, "developConfig":DevelopConfig, "testConfig": TestConfig, "showConfig": ShowConfig, "default": DevelopConfig, }
#建立views.py檔案 from flask import Blueprint#匯入藍圖模組 from app.ext import db from app.modles import City blue=Blueprint('first',__name__)#建立藍圖 @blue.route('/')#路由 def hello_world(): return 'Hello World!' #建立資料庫 @blue.route('/createall/') def create_all(): db.create_all() return '資料庫建立成功' #新增資料庫資訊 @blue.route('/addcity/') def add_city(): city=City() city.c_name='鄭州' city.c_age= 3500 db.session.add(city) db.session.commit() return '資料新增成功' #刪除資料 @blue.route('/dropall/') def drop_all(): db.drop_all() return '資料刪除成功' #獲取所有資訊 @blue.route('/getall/') def get_all(): city=City.query.all() print(city) print(type(city)) return '資料查詢成功'
#建立modles.py檔案 from app.ext import db class City(db.Model): c_id = db.Column(db.Integer, primary_key=True, autoincrement=True) c_name = db.Column(db.String(32)) c_age = db.Column(db.Integer)
#建立ext.py檔案 from flask_session import Session from flask_sqlalchemy import SQLAlchemy #第三庫都在這載入 sess=Session()#載入session db=SQLAlchemy()#載入SQLAlchemy def init_info(app):#定義一個init_info函式,在呼叫的時候直接呼叫session sess.init_app(app) db.init_app(app)#把資料庫載入到app
已測試都能成功