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