Flask笔记-构建mvc分层结构及优化

大体上的结构如下:

这里举个例子:

程序运行截图如下:

打印个

文件结构如下:

源码如下:

account.py

from application import db

class Account(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(50))
    password = db.Column(db.String(50))

user.py

# coding: utf-8
from application import db


class User(db.Model):
    __tablename__ = 'user'

    Host = db.Column(db.String(60, 'utf8_bin'), primary_key=True, nullable=False, server_default=db.FetchedValue())
    User = db.Column(db.String(32, 'utf8_bin'), primary_key=True, nullable=False, server_default=db.FetchedValue())
    password_last_changed = db.Column(db.DateTime)
    password_lifetime = db.Column(db.SmallInteger)

base_setting.py

#公用配置
DEBUG = True
SQLALCHEMY_ECHO = False
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ENCODING = "utf8mb4"
SECRET_KEY = "it1995123456"

local_setting.py

#本地开发配置文件
from config.base_setting import *
#这样的话就可以覆盖配置了
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]/mytest"
SECRET_KEY = "12345IT1995"

production_setting.py

#生产环境配置文件
from config.base_setting import *
DEBUG = False

index.py

from flask import Blueprint,render_template
from common.models.user import User
from common.models.account import Account
index_page = Blueprint( "index_page",__name__ )

@index_page.route("/")
def index():
    context = {}
    #result = User.query.all()
    result = Account.query.all()
    context['result'] = result
    return render_template("index.html", **context)

Auth.py

from application import app

@app.before_request
def before_request():
    app.logger.info("----------before_request----------")
    return

@app.after_request
def after_request(response):
    app.logger.info("----------after_request----------")
    return response

errorHandler.py

from application import app

@app.errorhandler(404)
def error_404(e):
    return "404 not found"

layout.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模版</title>
</head>
<body>
{% block content %} {% endblock %}
</body>
</html>

index.html

{% extends "common/layout.html" %}
{% block content %}
<p> flask 查询数据库</p>
<p>
    {% for item in result %}
    {{ item['id'] }}  {{ item['name'] }}  {{ item['password'] }}
    {% endfor %}
</p>
{% endblock %}

application.py

from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
import os

app = Flask(__name__)
manager = Manager(app)

app.config.from_pyfile("config/base_setting.py")
#ops_config=local|production
#linux export ops_config=local|production
#windows set ops_config=local|production

if "ops_config" in os.environ:
    app.config.from_pyfile("config/%s_setting.py" % (os.environ['ops_config']))

db = SQLAlchemy(app)

manager.py

from application import app,manager
from flask_script import Server,Command
from www import *


#web server
manager.add_command("runserver", Server(host = "0.0.0.0", use_debugger = True, use_reloader = True ))


#create_table
@Command
def create_all():
    from application import db
    from common.models.user import User
    db.create_all()

manager.add_command( "create_all",create_all )

def main():
    manager.run()

if __name__ == "__main__":
    try:
        import sys
        sys.exit(main())
    except Exception as e:
        import traceback
        traceback.print_exc()

requirement.txt

flask
flask-sqlalchemy
mysqlclient
flask-script
flask_debugtoolbar

www.py

from application import app
from controllers.index import index_page
from flask_debugtoolbar import DebugToolbarExtension

toolbar = DebugToolbarExtension(app)

#拦截器和错误处理
from interceptors.Auth import *
from interceptors.errorHandler import *

app.register_blueprint(index_page, url_prefix = "/")

这样的话就不可以用python manager.py来跑了。

从中可以看到。

create_all,就可以创建表了!

runserver是可以跑起来的,所以要这么跑

python manager.py runserver
发布了1286 篇原创文章 · 获赞 1975 · 访问量 180万+

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/104555262