flask的基本使用 token插件(二)

一、安装flask-jwt-extended

安装flask-jwt-extend得时候 会自动安装一个pyjwt得库。pyjwt可以直接使用来生成JWT和验证。但是在flask中,可以通过Flask-JWT-Extended来实现JWT能,因为他封装了使用方式,以及一些属性和装饰器,用起来更加方便

pip install flask-jwt-extended

二、基本使用

1.简介

1.1 create_access_token()

create_access_token 函数用来生成实际的 JWT token

1.2 @jwt_required()

@jew_required 装饰器可以用来保护路由

1.3 get_jwt_identity()

get_jwt_identity()函数用来保护视图里面获取用户的身份信息。

2.初始化项目

创建python包 名称为api.
编辑api内 “init.py” 文件

from flask import  Flask,blueprints
from flask_jwt_extended import JWTManager
from .views.home import blue_home#创建flask 实例的函数
def create_app():app = Flask(__name__)app.config["SECRET_KEY"] = "super-secret"app.register_blueprint(blue_home)return  app# 初始化jwt的函数
def create_jwt(app):jwt = JWTManager()jwt.init_app(app)return jwt

3.创建token

编写main.py

from flask import request,jsonify
from api import create_app,create_jwt
from flask_jwt_extended import create_access_tokenapp = create_app()
jwt = create_jwt(app)@app.route('/login',methods=["POST"])
def index():username = request.form.get("username")password = request.form.get("password")if username == "admin" and password == "admin":# 当用户登陆成功,创建token并返回access_token = create_access_token(identity="admin")return  jsonify(access_token)else:return "用户名或者密码错误!!!"if __name__ == "__main__":app.run(debug=True,host="0.0.0.0")

请求127.0.0.1:5000/login得到访问token

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTcwNzAzNTg5MSwianRpIjoiNGJjNjY4NDctZTQxYy00ZjdmLWIxZWYtOTNjYjJmMTBjYzFmIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6ImFkbWluIiwibmJmIjoxNzA3MDM1ODkxLCJjc3JmIjoiY2VlZGNkZmMtNDIwMS00NmE4LWEzYTItZDRhNTliMDIwYjQ5IiwiZXhwIjoxNzA3MDM2NzkxfQ.SzMKMthP_xQ02QwgFwSu3Refc2oz1EseFgntPzS5U0g"

4.保护视图

创建一个视图函数 views/home.py

from flask import  Blueprint
from flask_jwt_extended import jwt_required,get_jwt_identityblue_home = Blueprint('home',__name__)@blue_home.route('/home')
# 校验token 的函数
@jwt_required()
def home():# 可以获取token中的用户print(get_jwt_identity())return "<h1>home页面<h1>"

当用户不带token访问的时候,会报错

{"msg": "Missing Authorization Header"
}

客户端携带token认证格式

import requests,json
header = {"Authorization": "Bearer eyJhbGciOi.................."
}
res = requests.get("http://127.0.0.1:5000/home",headers=header)

参考连接:https://juejin.cn/post/7234450312726691898#heading-1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java tomcat 使用spring-task,实现定时任务功能

前言 今天接触到一个需求&#xff0c;需要添加一个定时任务功能&#xff0c;第一反应是启动类EnableScheduling、定时任务方法使用Scheduled实现&#xff0c;导入项目后才发现&#xff0c;这个项目是ssm整合框架的tomcat项目&#xff0c;没有启动类&#xff0c; 于是改变了思路…

有趣的CSS - 鼠标悬浮线条动态变化

鼠标悬浮线条动态变化 整体效果核心代码html 代码&#xff1a;css 部分代码&#xff1a; 完整代码如下html 页面&#xff1a;css 样式&#xff1a;页面渲染效果&#xff1a; 整体效果 这个链接悬浮效果主要用 css3 的 animation 属性配合 :hover 伪选择器来实现的。 此效果可以…

从零开始 TensorRT(3)Python 篇:解析 ONNX、PyTorch TensorRT 接口

前言 学习资料&#xff1a; TensorRT 源码示例 官方文档&#xff1a;Working With TensorRT Using The Python API 官方文档&#xff1a;TensorRT Python 官方文档&#xff1a;CUDA Python B站视频教程 视频配套代码 cookbook 示例&#xff1a;解析 ONNX 模型 参考源码&…

get通过发送Body传参-工具类

1、调用方式 String url "http://ip/xxx/zh/xxxxx/xxxx/userCode"; //进行url中的对应的参数 url2 url2.replace("ip",bancirili); url2 url2.replace("zh",zh); url2 url2.replace("userCode",userCode);String dateTime xxxx; //组…

深度学习系列55:深度学习加速技术概述

总体有两个方向&#xff1a;模型优化 / 框架优化 1. 模型优化 1.1 量化 最常见的量化方法为线性量化&#xff0c;权重从float32量化为int8&#xff0c;将输入数据映射在[-128,127]的范围内。在 nvdia gpu&#xff0c;x86、arm 和 部分 AI 芯片平台上&#xff0c;均支持 8bit…

Python使用回调函数或async/await关键字、协程实现异步编程

异步编程是一种编程模式,它允许程序在执行某个任务时,能够同时执行其他任务而不需要等待当前任务完成。在传统的同步编程中,程序执行一个任务后必须等待该任务完成后才能继续执行下一个任务。而在异步编程中,程序可以发起一个任务后立即执行其他任务,当原先的任务完成后,…

LiveData 迁移到 Kotlin Flow详解

LiveData ,是Android 2017推出的一个东西,配合MVVM使用。观察者模式,的确简化了我们的工作方式,但 RxJava 等选项,对于当时的初学者来说实在是太复杂了。因此 Architecture Components 团队创建了 LiveData :这是个非常 “有主见的” 可观察数据持有者类,并且是专门为 A…

Go 函数 可变参数

有的时候&#xff0c;我们定义函数&#xff0c;都是形参固定&#xff0c;有时候我们并不知道参数有多少个&#xff0c;这里我们就可以用... 来使用可变参数 代码如下&#xff1a; package main import "fmt"//定义一个函数&#xff0c;函数的参数为&#xff1a;可变…

AI时代,人才的“重新定义”

参加一个讨论&#xff0c;梳理一下自己所理解到一些内容&#xff0c;有不对的请指正&#xff1a; 我们要好好借助AI工具成为一个π型人才&#xff0c;π型人才 是指至少拥有两种专业技能&#xff0c;并能将多门知识融会贯通的高级复合型人才。 π下面的两竖指两种专业技能&…

全自动网页生成系统重构版源码

全自动网页生成系统重构版源码分享&#xff0c;所有模板经过精心审核与修改&#xff0c;完美兼容小屏手机大屏手机&#xff0c;以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 为用户使用方便考虑&#xff0c;全自动网页制作系统无需繁琐的注…

PMP资料怎么学?PMP备考经验分享

PMP考试前大家大多都是提前备考个一两个月&#xff0c;但是有些朋友喜欢“不走寻常路”&#xff0c;并不打算去考PMP认证&#xff0c;想要单纯了解PMP&#xff0c;不管要不要考证&#xff0c;即使是仅仅学习了解一下我个人都非常支持&#xff0c;因为专业的基础的确能提高工作效…

基恩士 KV-8000 PLC通讯简单测试

1、KV-8000通讯协议 基恩士 KV-8000 PLC支持多种通讯方式&#xff0c;包括&#xff1a;OPC UA、Modbus、上位链路命令等。其中OPC UA需要对服务器和全局变量进行设置&#xff0c;Modbus需要调用功能块。默认支持的是上位链路命令&#xff0c;实际是一条条以回车换行结束的ASCII…

基于微信小程序的医保行政执法案件管理系统

本系统设计的是一个医保行政执法的网站&#xff0c;此网站使用户实现了不需出门就可以在手机或电脑前进行网上查询需求信息等。 用户在注册登陆后&#xff0c;在客户端可以实现&#xff1b;案件信息、结案归档、我的等。然而管理员则可以在服务端直接管理&#xff1b;个人中心、…

【已解决】Oracle 12541 TNS 无监听程序

目录 1、找到Oracle监听服务&#xff08;OracleOraDb10g_homeTNLListener&#xff09;&#xff0c;停止运行 2、首先查看监听文件是否超过4G 3、修改配置文件 连接oracle突然报错&#xff0c;提示Oracle 12541 TNS 无监听程序&#xff0c;可以按照以下步骤解决 1、找到Ora…

Redis-布隆过滤器解决穿透详解

本文已收录于专栏 《中间件合集》 目录 背景介绍概念说明原理说明解决穿透安装使用安装过程Redis为普通安装的配置方式Redis为Docker镜像安装的配置方式 具体使用控制台操作命令说明Spring Boot集成布隆过滤器 总结提升 背景介绍 布隆过滤器可以帮助我们解决Redis缓存雪崩的问题…

Fink CDC数据同步(四)Mysql数据同步到Kafka

依赖项 将下列依赖包放在flink/lib flink-sql-connector-kafka-1.16.2 创建映射表 创建MySQL映射表 CREATE TABLE if not exists mysql_user (id int,name STRING,birth STRING,gender STRING,PRIMARY KEY (id) NOT ENFORCED ) WITH (connector mysql-cdc,hostn…

算法学习打卡day47|单调栈系列题目

单调栈题目思路 通常是一维数组&#xff0c;要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置&#xff0c;此时我们就要想到可以用单调栈了。时间复杂度为O(n)。单调栈的本质是空间换时间&#xff0c;因为在遍历的过程中需要用一个栈来记录右边第一个比当前元…

链式二叉树(三种遍历)

1.链式二叉树的遍历&#xff1a;前序&#xff08;根&#xff0c;左子树&#xff0c;右子树&#xff09;中序&#xff08;左子树&#xff0c;根&#xff0c;右子树&#xff09;后序&#xff08;左子树&#xff0c;右子树&#xff0c;根&#xff09;层序&#xff08;一层一层访问…

探索深度学习的边界:使用 TensorFlow 实现高效空洞卷积(Atrous Convolution)的全面指南

空洞卷积&#xff08;Atrous Convolution&#xff09;&#xff0c;在 TensorFlow 中通过 tf.nn.atrous_conv2d 函数实现&#xff0c;是一种强大的工具&#xff0c;用于增强卷积神经网络的功能&#xff0c;特别是在处理图像和视觉识别任务时。这种方法的核心在于它允许网络以更高…

Flask 入门6:模板继承

一个网站中&#xff0c;大部分网页的模块是重复的&#xff0c;比如顶部的导航栏&#xff0c;底部的备案信息。如果在每个页面中都重复的去写这些代码&#xff0c;会让项目变得臃肿&#xff0c;提高后期的维护成本。比较好的做法是&#xff0c;通过模板继承&#xff0c;把一些重…