SQLAlchemy在模型之间建立关系模式: https://www.bbsmax.com/A/mo5k7gKn5w/
一对多时:外键只能存储单一数据(标量),所以外键总是在“多”这一侧定义,多篇文章属于同一个作者,所以我们需要为每篇文章添加外键存储作者的主键值以指向对应的作者
关系属性在关系的出发侧定义,即一对多关系的“一”这一侧
用关系函数定义的属性不是数据库字段,而是类似于特定的查询函数
back_populates参数的值需要设为关系另一侧的关系属性名。
需要注意的是,我们只需要在关系的一侧操作关系。当为Book对象的writer属性赋值后,对应Writer对象的books属性的返回值也会自动包含这个Book对象。反之,当某个Writer对象被删除时,对应的Book对象的writer属性被调用时的返回值也会被置为空(即NULL,会返回None)
=============
在 Flask 中,如果能够使用 会话 ,那么就不要直接使用 cookies ,因为 会话比较安全一些
username = request.cookies.get('username')
=================
resp = make_response(render_template(...))
resp.set_cookie('username', 'the username')
===============
使用 redirect() 函数可以重定向。使用 abort() 可以更早退出请求,并返回错误代码
使用 errorhandler() 装饰器可以定制出错页面:
=========
from flask import Flask, session
@app.route('/login', methods=['GET', 'POST'])
def login():
session['username'] = request.form['username']
return redirect(url_for('index'))
@app.route('/logout')
def logout():
# 如果会话中有用户名就删除它。
session.pop('username', None)
return redirect(url_for('index'))
=============
flash() 用于闪现一个消息。在模板中,使用 get_flashed_messages() 来操作消息
分析SQLAlachemy的构造方式可以发现,初始化并非一定要传递app应用对象到内部,事实上它提供了init_app方法给我们后续调用。而 init_app 方法是flask框架要求任何的第三方组件都要实现这个方法