和网上的博客app不同,由于需求主要写一些小程序的借口
首先是初始化app
__init__.py
importos from flask importFlask def create_app(test_config=None): #create and configure the app app = Flask(__name__, instance_relative_config=True) app.config.from_mapping( SECRET_KEY='dev', DATABASE=os.path.join(app.instance_path, 'app.sqlite'), ) if test_config isNone: #load the instance config, if it exists, when not testing app.config.from_pyfile('config.py', silent=True) else: #load the test config if passed in app.config.from_mapping(test_config) #ensure the instance folder exists try: os.makedirs(app.instance_path) exceptOSError: pass #a simple page that says hello @app.route('/hello') defhello(): return 'Hello, World!' from . importdb db.init_app(app)
from . import auth
app.register_blueprint(auth.bp)
return app
这一部分完成就可以运行,通过访问127.0.0.1/5000/hello来检测应用是否创建成功
db.py '''数据库操作初始化'''
importsqlite3 importclick from flask importcurrent_app, g from flask.cli importwith_appcontext defget_db(): if 'db' not ing: g.db =sqlite3.connect( current_app.config['DATABASE'], detect_types=sqlite3.PARSE_DECLTYPES ) g.db.row_factory =sqlite3.Row returng.db def close_db(e=None): db = g.pop('db', None) if db is notNone: db.close() definit_db(): db =get_db() with current_app.open_resource('schema.sql') as f: db.executescript(f.read().decode('utf8')) @click.command('init-db') @with_appcontext definit_db_command(): """Clear the existing data and create new tables."""init_db() click.echo('Initialized the database.') definit_app(app): app.teardown_appcontext(close_db) app.cli.add_command(init_db_command)
数据库模型文件
schema.sql
DROP TABLE IF EXISTS user; DROP TABLE IF EXISTSpost; CREATE TABLE user( id INTEGER PRIMARY KEYAUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL); CREATE TABLEpost ( id INTEGER PRIMARY KEYAUTOINCREMENT, author_id INTEGER NOT NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, title TEXT NOT NULL, body TEXT NOT NULL, FOREIGN KEY (author_id) REFERENCES user(id) );
这一部分按照flask官方文档来就好了,一般只需要在后面加新的特性就可以了,后面写具体接口事例