1. 程式人生 > >flask 的簡單拆分升級版2

flask 的簡單拆分升級版2

#建立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 settings
from 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'] = False
app.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

  已測試都能成功