关键词搜索

源码搜索 ×
×

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

发布2020-02-28浏览6678次

详情内容

大体上的结构如下:

这里举个例子:

程序运行截图如下:

打印个

文件结构如下:

源码如下:

account.py

  1. from application import db
  2. class Account(db.Model):
  3. id = db.Column(db.Integer, primary_key = True)
  4. name = db.Column(db.String(50))
  5. password = db.Column(db.String(50))

user.py

  1. # coding: utf-8
  2. from application import db
  3. class User(db.Model):
  4. __tablename__ = 'user'
  5. Host = db.Column(db.String(60, 'utf8_bin'), primary_key=True, nullable=False, server_default=db.FetchedValue())
  6. User = db.Column(db.String(32, 'utf8_bin'), primary_key=True, nullable=False, server_default=db.FetchedValue())
  7. password_last_changed = db.Column(db.DateTime)
  8. password_lifetime = db.Column(db.SmallInteger)

base_setting.py

  1. #公用配置
  2. DEBUG = True
  3. SQLALCHEMY_ECHO = False
  4. SQLALCHEMY_TRACK_MODIFICATIONS = False
  5. SQLALCHEMY_ENCODING = "utf8mb4"
  6. SECRET_KEY = "it1995123456"

local_setting.py

  1. #本地开发配置文件
  2. from config.base_setting import *
  3. #这样的话就可以覆盖配置了
  4. SQLALCHEMY_TRACK_MODIFICATIONS = True
  5. SQLALCHEMY_DATABASE_URI = "mysql://root:XXXXXXXXXX@XXX.XXX.XXX.XXX/mytest"
  6. SECRET_KEY = "12345IT1995"

production_setting.py

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

index.py

  1. from flask import Blueprint,render_template
  2. from common.models.user import User
  3. from common.models.account import Account
  4. index_page = Blueprint( "index_page",__name__ )
  5. @index_page.route("/")
  6. def index():
  7. context = {}
  8. #result = User.query.all()
  9. result = Account.query.all()
  10. context['result'] = result
  11. return render_template("index.html", **context)

Auth.py

  1. from application import app
  2. @app.before_request
  3. def before_request():
  4. app.logger.info("----------before_request----------")
  5. return
  6. @app.after_request
  7. def after_request(response):
  8. app.logger.info("----------after_request----------")
  9. return response

errorHandler.py

  1. from application import app
  2. @app.errorhandler(404)
  3. def error_404(e):
  4. return "404 not found"

layout.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>模版</title>
  6. </head>
  7. <body>
  8. {% block content %} {% endblock %}
  9. </body>
  10. </html>

index.html

  1. {% extends "common/layout.html" %}
  2. {% block content %}
  3. <p> flask 查询数据库</p>
  4. <p>
  5. {% for item in result %}
  6. {{ item['id'] }} {{ item['name'] }} {{ item['password'] }}
  7. {% endfor %}
  8. </p>
  9. {% endblock %}

application.py

  1. from flask import Flask
  2. from flask_script import Manager
  3. from flask_sqlalchemy import SQLAlchemy
  4. import os
  5. app = Flask(__name__)
  6. manager = Manager(app)
  7. app.config.from_pyfile("config/base_setting.py")
  8. #ops_config=local|production
  9. #linux export ops_config=local|production
  10. #windows set ops_config=local|production
  11. if "ops_config" in os.environ:
  12. app.config.from_pyfile("config/%s_setting.py" % (os.environ['ops_config']))
  13. db = SQLAlchemy(app)

manager.py

  1. from application import app,manager
  2. from flask_script import Server,Command
  3. from www import *
  4. #web server
  5. manager.add_command("runserver", Server(host = "0.0.0.0", use_debugger = True, use_reloader = True ))
  6. #create_table
  7. @Command
  8. def create_all():
  9. from application import db
  10. from common.models.user import User
  11. db.create_all()
  12. manager.add_command( "create_all",create_all )
  13. def main():
  14. manager.run()
  15. if __name__ == "__main__":
  16. try:
  17. import sys
  18. sys.exit(main())
  19. except Exception as e:
  20. import traceback
  21. traceback.print_exc()

requirement.txt

  1. flask
  2. flask-sqlalchemy
  3. mysqlclient
  4. flask-script
  5. flask_debugtoolbar

www.py

  1. from application import app
  2. from controllers.index import index_page
  3. from flask_debugtoolbar import DebugToolbarExtension
  4. toolbar = DebugToolbarExtension(app)
  5. #拦截器和错误处理
  6. from interceptors.Auth import *
  7. from interceptors.errorHandler import *
  8. app.register_blueprint(index_page, url_prefix = "/")

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

从中可以看到。

create_all,就可以创建表了!

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

python manager.py runserver

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载