大体上的结构如下:
这里举个例子:
程序运行截图如下:
打印个
文件结构如下:
源码如下:
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:XXXXXXXXXX@XXX.XXX.XXX.XXX/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
- 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