Flask JWT简单但完整的项目部署
环境:
Python 3.10
开发工具: pycharm 免费版
项目目录结构如下:

源代码及其功能
run.py 程序启动文件, test.py源代码测试功能, config.py项目配置文件.
app.__init__.py 入口程序启动文件, app.routes.__init__.py 路由统一引入文件, app.routes.jwt.py JWT登录,验证实例文件
相关文件看附件: https://gitee.com/schrodinger/flask_jwt.git
源码简单说明:
jwt.py
from flask import Blueprint, request, jsonify
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity,get_jwt
bp = Blueprint('jwt', __name__)
@bp.route('/get')
@jwt_required()
def get():
username = get_jwt_identity()
additional_claims = get_jwt()
data = {"claims":additional_claims,"username":username}
resp = {"status":0,"success":True,"message":"OK","data":data}
return jsonify(resp)
@bp.route('/login',methods=['POST'])
def login():
username = request.json.get('username')
password = request.json.get('password')
data = {"status":-1,"success":False,"message":"Not defined","token":""}
if username is None or len(username) == 0:
data["message"] = "username is required"
return jsonify(data)
if password is None or len(password) == 0:
data["message"] = "password is required"
return jsonify(data)
if username == "admin" and password == "admin888":
data["status"] = 0
data["message"] = "OK"
data["success"] = True
additional_claims = {"role":"admin","uid":1}
data["token"] = create_access_token(identity=username,additional_claims=additional_claims)
return jsonify(data)
else:
data["message"] = "用户名或密码错误"
return jsonify(data)
以上的def get(): 函数上的 @jwt_required() , 要记得保留括号
项目启动(python run.py) 后通过 POST数据获取jwt tokon:
curl -X POST -H "Content-Type: application/json" -d "{\"username\":\"admin\",\"password\":\"admin888\"}" http://127.0.0.1:5000/jwt/login
返回的数据大概如下:
1 { 2 "message": "OK", 3 "status": 0, 4 "success": true, 5 "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTc3MzYyNzcwMSwianRpIjoiNmU0MzhjNDItNzE0Yy00MGEwLTljYjYtZTIzZDViMGU4YTI2IiwidHlwZSI6ImFjY2VzcyIsInN1YiI6ImFkbWluIiwibmJmIjoxNzczNjI3NzAxLCJjc3JmIjoiNmFlMjQ0NWYtOWE2NS00Y2QwLTgyZTctYWQxYjkwNzRjN2E1IiwiZXhwIjoxNzczNjI5NTAxLCJyb2xlIjoiYWRtaW4iLCJ1aWQiOjF9.aqMYxwx8Qx5mUIDcWSxVWuJiO2Nb4_oVgyvehcGdaa8" 6 }
接下来复制token值进行访问验证:
curl -X GET -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTc3MzYyNjUwNiwianRpIjoiY2M0ZDhmZmUtNGQyMS00NWRkLWJjZDMtZmI0ZGNiYTRlYzJiIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6ImFkbWluIiwibmJmIjoxNzczNjI2NTA2LCJjc3JmIjoiZjQwNDFmZTQtMmQ2MS00ZWI0LWI5YzQtYWFiYjI2OTczZGY2IiwiZXhwIjoxNzczNjI4MzA2LCJyb2xlIjoiYWRtaW4iLCJ1aWQiOjF9.ibCwVR_eqP-Al-0CdWQeyHmjKGw2aQDWDe_ODUjf_mY" http://127.0.0.1:5000/jwt/get
返回的结构大概如下:
{ "data": { "claims": { "csrf": "f4041fe4-2d61-4eb4-b9c4-aabb26973df6", "exp": 1773628306, "fresh": false, "iat": 1773626506, "jti": "cc4d8ffe-4d21-45dd-bcd3-fb4dcba4ec2b", "nbf": 1773626506, "role": "admin", "sub": "admin", "type": "access", "uid": 1 }, "username": "admin" }, "message": "OK", "status": 0, "success": true }

浙公网安备 33010602011771号