Flask JWT简单但完整的项目部署

环境:

Python 3.10

开发工具: pycharm 免费版

项目目录结构如下:

764be738-de4a-4dec-a1f0-3c97d813ef92

 源代码及其功能

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
}

 

posted @ 2026-03-16 10:53  半岛拖鞋  阅读(1)  评论(0)    收藏  举报