这个教程完成了一个更丰富的项目-博客!
包含的知识点有: 应用工厂函数、蓝图、数据库的使用等
一、应用工厂函数
说的简单易懂点,就是小项目我们直接在app.py中定义实例: app = Flask(__name__),
但在大应用中,这样就显得比较散乱。则,首先用一个包来管理主要代码。
在python包的__init__.py中定义函数 create_app,用来装配和应用相关的所有配置,并返回实例。
import os
from flask import Flask
# 应用工厂函数,用来装配和应用相关的所有配置、注册和其他设置
def create_app(test_config=None):
app = Flask(__name__, instance_relative_config=True) # 创建flask实例
app.config.from_mapping(
SECRET_KEY='DEV',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite')
)
# test_config如果存在,就会替换9-12行的配置,实现测试和开发的配置分离,相互分离
if test_config is None:
app.config.from_pyfile('config.py', silent=True)
else:
app.config.from_mapping(test_config)
# 确保实例文件夹存在
# 这里会创建一个instance文件夹,SQLite数据库文件会保存在里面
try:
os.makedirs(app.instance_path)
except OSError:
pass
# 一个简单的路由
@app.route('/hello')
def hello():
return 'hello, world'
# 在工厂中导入并调用数据库相关的内容
from . import db
db.init_app(app)
# 注册蓝图:第二步:在工厂函数中注册蓝图 在后面会用到。
from . import auth
app.register_blueprint(auth.bp)
from . import blog
app.register_blueprint(blog.bp)
app.add_url_rule('/', endpoint='index') # 将项目端点名称index 和 / 相关联
return app
二、数据库的操作
相较于第一个快速上手,这篇教程多了个数据库操作相关介绍。此处用SQLite.
1、准备好数据库建表语句
flaskr/schema.sql
DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
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)
);
2、写一个命令 flask init,执行上面的见表语句
import sqlite3
import click
from