flask使用jwt
在服务器端最好使用虚拟环境,否则容易提示找不到Flask-JWT-Extended
安装pip install Flask-JWT-Extended
初始化
#这里是初始化设置,包括创建app实例,注册蓝图,配置app,配置peewee
from flask import Flask
from flask_jwt_extended import JWTManager
from config import Config
from .views import view
from .api import api
from .models import peeweeDB, DB, Article
# 创建app实例
app = Flask(__name__)
app.config.from_object(Config) #配置app
jwt = JWTManager(app) # 初始化jwt
app.register_blueprint(view) #注册视图蓝图
app.register_blueprint(api) #注册api蓝图
# 将peewee集成到flask中
peeweeDB.init_app(app)
# 创建表
with app.app_context():
DB.create_tables([Article])
调用
#一个蓝图模块,定义api,这里的所有路由前面都会加上/api
from flask import Blueprint,request,jsonify
from config import AdminConfig # 引入配置
from flask_jwt_extended import create_access_token,jwt_required # 引入jwt
@api.route('/login',methods=['POST'])
def login():
#取得请求的数据
data = request.get_json()
# 这里是判断验证码的其他逻辑
if data.get('name') != AdminConfig.username or data.get('password') != AdminConfig.password:
return jsonify({'msg': '用户名或密码错误'}), 400
# 创建一个15天的token
access_token = create_access_token(identity=data.get('name'),expires_delta=timedelta(days=15))
return jsonify({'token': access_token}),200
#定义一个post方法,接收josn,并返回接收到的json
#jwt只允许登录用户访问
@api.route('/add',methods=['POST'])
@jwt_required()
def add():
#取得请求的数据
data = request.get_json()
#写入数据库
try:
new_article = Article.create(
title=data.get('title'),
content=data.get('content'),
markdown=data.get('markdown'),
type=data.get('type')
)
# 如果写入成功,打印新记录的 ID
return jsonify({'msg': new_article.id}),200
except IntegrityError as e:
return jsonify({'msg': f'写入失败:{e}'}),500