https://dormousehole.readthedocs.io/en/latest/index.html 已经写得挺清楚了,应该先去看一遍。但除此之外还有很多内容没有涉及到,并且Flask中许多功能必须借助别的包实现,因此在此做一总结。
用了flask_sqlalchemy
,参考 https://www.jianshu.com/p/73071abb607e
在Flask中,没有session_id的获取方式( https://stackoverflow.com/questions/15156132/flask-login-how-to-get-session-id ),虽然可以从cookie里面获取session,但并不是一个好的方法。如果需要session id,可以考虑自己在数据库中进行存储以便自己管理session。
注:
flask-login
的session_protection
,获得flask.session['_id']
,但该种方式仍然是需要有session才能获取,所以不适用于单独一个API请求中带有sessionID的情况。flask-login
中提供了适用于API的SecureCookieSessionInterface
貌似可解决sessionID的问题,但我没有尝试,具体说明在: https://flask-login.readthedocs.io/en/latest/#disabling-session-cookie-for-apissession
的具体用法,参见 https://www.askpython.com/python-modules/flask/flask-sessionscookie
操作,参见 https://pythonbasics.org/flask-cookies/ 或 https://blog.csdn.net/guoqianqian5812/article/details/75305697使用 flask-login : https://flask-login.readthedocs.io/en/latest/ ,具体例子可以看 https://github.com/toddbirchard/flasklogin-tutorial
表单的具体例子也可以看 https://github.com/toddbirchard/flasklogin-tutorial
用的是flask-WTF
,具体说明可以看 https://www.yiibai.com/flask/flask_wtf.html
在 https://dormousehole.readthedocs.io/en/latest/tutorial/layout.html 中,只介绍了把一个blueprint的内容都放在一个python文件里面的方法。
如果要在同一个blueprint里面放多个文件的view,可以在app.py
中做一次import(比如import user.routes, blog.routes
,虽然后面的代码中没有用到import进来的东西,但有import的话就会扫描这部分代码,将这个代码文件中的接口进行注册)。
目前的架构是:
`app.py`: 里面包括:
==================
from flask import Flask
from db import db
import user.routes, blog.routes
from api import bp
class Config:
SQLALCHEMY_DATABASE_URI = "xxx"
SQLALCHEMY_TRACE_MODIFICATIONS = True
if __name__ == '__main__':
app = Flask(__name__)
app.config.from_object(Config)
app.secret_key = os.urandom(24)
db.init_app(app)
with app.app_context():
app.register_blueprint(bp)
db.create_all()
app.run(host='localhost', port=5000, debug=True)
==================
`api.py`中包括:
==================
from flask import Blueprint
# 使用BluePrint管理/api子路由
bp = Blueprint('api', __name__, url_prefix='/api')
==================
`db.py`中包括:
==================
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
==================
`user/routes.py`中包括:
==================
from api import bp
from db import db
@bp.route('/login', methods=['POST'])
def login():
==================
request.json()
函数获得