项目结构:
__init__.py
from flask import Flask from flask_sqlalchemy import SQLAlchemy from .views.admin import admin from .views.shop import shop db = SQLAlchemy() from .models import * def create_app(): app = Flask(__name__, template_folder=‘templates‘, static_folder=‘statics‘, static_url_path=‘/static‘) # 导入配置文件(以类的形式导入) app.config.from_object("settings.TsetSesstings") # 将db注册到app中(在内部读取配置文件) db.init_app(app) #注册蓝图 app.register_blueprint(admin) app.register_blueprint(shop) return app
run.py
# 程序入口 from flask_app import create_app app = create_app() if __name__ == ‘__main__‘: app.run()
settings.py
# 这是配置文件
# 测试配置
class TsetSesstings(): DEBUG = True TESTING = True SECRET_KEY = "djcishcnieodkscj9codscojsojcd0ojc" ‘‘‘ 数据库连接配置 SQLALCHEMY_DATABASE_URI‘, ‘sqlite:///:memory:‘ SQLALCHEMY_BINDS‘, None SQLALCHEMY_NATIVE_UNICODE‘, None SQLALCHEMY_ECHO‘, False SQLALCHEMY_RECORD_QUERIES‘, None SQLALCHEMY_POOL_SIZE‘, None SQLALCHEMY_POOL_TIMEOUT‘, None SQLALCHEMY_POOL_RECYCLE‘, None SQLALCHEMY_MAX_OVERFLOW‘, None SQLALCHEMY_COMMIT_ON_TEARDOWN‘, False ‘‘‘ SQLALCHEMY_DATABASE_URI = ‘mysql+pymysql://root:密码@localhost:3306/数据库名‘ SQLALCHEMY_POOL_SIZE = 5 SQLALCHEMY_POOL_TIMEOUT = 30 SQLALCHEMY_POOL_RECYCLE = -1 # 追踪对象的修改并且发送信号 SQLALCHEMY_TRACK_MODIFICATIONS = False
# 正式配置 class FormalSettings(): DEBUG = False TESTING = False SECRET_KEY = "xfsec@admin!2019(shuijizifuchuan)" #数据库连接
SQLALCHEMY_DATABASE_URI = ‘mysql+pymysql://root:密码@localhost:3306/数据库名‘
SQLALCHEMY_POOL_SIZE = 5
SQLALCHEMY_POOL_TIMEOUT = 30
SQLALCHEMY_POOL_RECYCLE = -1
# 追踪对象的修改并且发送信号
SQLALCHEMY_TRACK_MODIFICATIONS = False
models.py
from . import db class Users1(db.Model): __tablename__ = "users" id = db.Column(db.Integer,primary_key=True) username = db.Column(db.String(50),nullable=False,unique=True) email = db.Column(db.String(150), nullable=False, unique=True) def __repr__(self): return "<Users %r>" %self.username
crcate_tables.py
# 这是一个创建数据库表的脚本 from flask_app import db from flask_app import create_app app = create_app() with app.app_context(): db.create_all()
admin.py
from flask import Blueprint from flask import render_template from flask import request # 创建app应用 # url_prefix : 路由拼接 # template_folder : 模板路径 admin= Blueprint(‘admin‘, __name__, url_prefix=‘/admin‘, template_folder=‘templates‘)
# 每次请求进来时的操作
@admin.before_request
def process_request(*args, **kwargs):
‘‘‘
判断用户是否登陆
‘‘‘
if request.path == "/admin_dingding_xfsec/login":
print("登录页面不需要登陆!!!")
return None
else:
print("后台每次请求进来时都会执行这个函数")
#每次请求结束时的操作(必须加return 否则会报错!!!)
@admin.after_request
def process_response(response):
print("后台每次请求结束后都会执行这个函数")
return response
@admin.route(‘/login‘, methods=[‘GET‘, "POST"])
def login():
if request.method == "GET":
return "前端登录页面!!!"
else:
pass
@admin.route(‘/index‘, methods=[‘GET‘, "POST"])
def index():
if request.method == "GET":
return "前端首页!!!"
else:
pass
shop.py
from flask import Blueprint from flask import render_template from flask import request ‘‘‘ 前端管理函数处理 使用蓝图 创建蓝图实例 创建路由 函数处理 ‘‘‘ shop = Blueprint(‘shop‘, __name__, template_folder=‘templates‘) # 每次请求进来时的操作 @shop.before_request def process_request(*args, **kwargs): print("前端每次请求进来时都会执行这个函数") # 每次请求结束时的操作(必须加return 否则会报错!!!) @shop.after_request def process_response(response): print("前端每次请求结束后都会执行这个函数") return response @shop.route(‘/login‘, methods=[‘GET‘, "POST"]) def login(): if request.method == "GET": return "前端登录页面!!!" else: pass @shop.route(‘/index‘, methods=[‘GET‘, "POST"]) def index(): if request.method == "GET": return "前端首页!!!" else: pass
原文:https://www.cnblogs.com/xingxingnbsp/p/10558219.html