在Flask中构建API接口

news2024/11/24 9:48:41

重定向行为

斜杠

以下两个路由的不同之处在于是否使用尾部的斜杠。

第一个路由的URL尾部有一个斜杠,看起来就像一个文件夹,访问一个没有斜杠结尾的URL时,Flask会自动进行重定向,在结尾加上一个斜杠。

第二个路由的URL没有尾部斜杠,因此其行为表现与一个文件类似,如果访问这个URL时添加了尾部斜杠就会得到一个404错误,这样可以保持URL唯一,并帮助搜索引擎避免重复索引同一页面。

@app.route('/home/')
def hello_world():
    return 'Hello World!'
    
@app.route('/home')
def hello_world():
    return 'Hello World!'

redirect

from flask import Flask, redirect

@app.route('/baidu')
def baidu():
    return redirect('https://www.baidu.com')

Flask HTTP方法

1GET请求指定的页面信息,并返回实体主体。
2POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
3PUT从客户端向服务器传送的数据取代指定的文档的内容。
4DELETE请求服务器删除指定的页面。
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()

登录登出案例

# 登录
@app.route("/login", methods=['POST'])
def login():
    """
    username: 123456
    password: 123456
    :return:
    """
    get_data = request.get_json()
    username = get_data.get("username")
    password = get_data.get("password")

    if not all([username, password]):
        return jsonify(msg="参数不完整")

    if username == '123456' and password == '123456':
        # 如果验证通过,保存登录状态在session中
        session['username'] = username
        return jsonify(msg='登录成功')
    else:
        return jsonify(msg='账号或密码错误')

# 检查登录状态
@app.route("/session", methods=["GET"])
def check_session():
    username = session.get("username")
    if username is not None:
        return jsonify(username=username)
    else:
        return jsonify(msg="出错了,没登录")

# 登出
@app.route('/logout', methods=['GET'])
def logout():
    session.clear()
    return jsonify(msg='成功退出登录')

要访问cookie,可以使用cookie属性,通过使用响应对象的set_cookie方法来设置cookie。请求对象的cookie属性是一个包含了客户端传输的所有cookie的字典。在Flask中,如果使用session,就不要直接使用cookie,因为session比较安全一些。

Session

session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证。

一、配置SECRET_KEY

因为flask的session是通过加密之后放到了cookie中,所以需要配置“SECRET_KEY”。

配置方法

新建一个config.py的文件配置secret_key

config.py

SECRET_KEY = 'XXXXXXXXX'

然后在主运行文件里面添加config文件里面的内容。

from flask import Flask,session
import config
app = Flask(__name__)
app.config['SECRET_KEY'] = config.SECRET_KEY  # 写法一
app.secret_key = config.SECRET_KEY  # 写法二

二、操作session

操作session的方法就如同操作字典。

设置session

# 设置session
@app.route('/')
def set():
     session['name'] = 'lili' # 设置“字典”键值对
     return 'success'

读取session

因为session就像字典一样所以,操作它的时候有两种方法:

  • (1)result = session[‘key’] :如果内容不存在,将会报异常。
  • (2)result = session.get(‘key’) :如果内容不存在,将返回None(推荐用法)。
# 读取session
@app.route('/get')
def get():
    session['name']  # 写法一
    session.get('name')  # 写法二
    return 'success'

删除session

# 删除session
@app.route('/delete/')
def delete():
    session.pop('name',None)  # 写法一
    session['name'] = False  # 写法二
    return 'success'

清除session中所有数据

# 清除session中所有数据
@app.route('/clear')
def clear():
    session.clear()
    return 'success'

三、设置session的过期时间

若没有指定session的过期时间,那么默认是浏览器关闭后就自动结束。session.permanent = True语句在flask下则可以将有效期延长至一个月。

方法一

 # 设置session
 @app.route('/')
 def set():
     session['name'] = 'lili'
     session.permanent = True # 长期有效,一个月的时间有效
     return 'success'

方法二

  • 1.引入包:from datetime import timedelta
  • 2.配置有效期限:app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
  • 3.设置:session.permanent = True
#encoding: utf-8
from flask import Flask,session
from datetime import timedelta
import os 
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 

# 设置session
@app.route('/')
def set():
    session['username'] = 'liefyuan'
    session.permanent = True
    return 'success'

Postman

在构建API接口时,可以使用Postman工具来进行接口测试。

Postman界面导航

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

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

相关文章

CVPR 2023 | 风格迁移论文3篇简读,视觉AIGC系列

CAP-VSTNet: Content Affinity Preserved Versatile Style Transfer 内容相似度损失(包括特征和像素相似度)是逼真和视频风格迁移中出现伪影的主要问题。本文提出了一个名为CAP-VSTNet的新框架,包括一个新的可逆残差网络(reversib…

微信小程序一键登录功能,使用uni-app和springboot(JWT鉴权)

目录 概述 微信登录接口说明 关于获取微信用户的信息 前端代码(uni-app) 后端代码(SpringBoot) 配置文件:application.yml 配置文件:Pom.xml 类:WeChatModel 类:WeChatSe…

《面试1v1》JVM内存模型

聊聊 JVM 内存模型 我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官: 你好,请问你对JVM内存模型有了解吗? 候选人: 当然,JVM内存模型是Java程序运…

【计算机视觉 | 目标检测】术语理解5:Split Shuffle Block、Group Shuffle Block 和复杂非结构化室内场景

文章目录 一、Split Shuffle Block二、Group Shuffle Block三、复杂非结构化室内场景 一、Split Shuffle Block Split Shuffle Block(分割混洗块)是一种用于深度学习模型的基础组件,旨在增强模型的表征能力和学习能力。该概念最常用于图像分…

3D图像双线性插值

文章目录 前言结论说明:公式 测试 前言 看了一下2d图像的双线性插值的理论,基本上都是在原图上找到对应的浮点坐标 p f p_f pf​后,将以 p f p_f pf​外围的4个点进行计算。计算的方法类似于二维直线方程的理论,但是写成了权重的…

《低代码指南》——维格云低代码管理系统解决方案,成倍降低开发成本

目录 典型场景介绍 一、采购管理 二、产品BOM管理 三、成本核算管理 “我之前是打算自己去开发ERP系统,大概要用上八九个月时间,而且还不是很稳定。但现在用维格云,我们一个人做个一两个月,就可以做到很稳定了。因此,即使需要付出一些学习成本,但无代码的确能极大的帮…

自动驾驶系统中摄像头相对地面的在线标定

文章:Online Camera-to-ground Calibration for Autonomous Driving 作者:Binbin Li, Xinyu Du, Yao Hu, Hao Yu, and Wende Zhang 编辑:点云PCL 欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享&…

记录--前端小票打印、网页打印

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一、小票打印 目前市面上的小票打印机大多采用的打印指令集为ESC/POS指令,它可以使用ASCII码、十进制、十六进制来控制打印,我们可以使用它来控制字体大小、打印排版、字体加粗…

如何用 ChatGPT 做数据进阶可视化?(三维交互图与动图视频)

你只需输入数据和需求,结果自然来。 自动可视化 在《如何用 ChatGPT 帮你自动分析数据?》这篇文章里,我已经为你介绍过 Code Interpreter 。它是 ChatGPT 的一个模式,目前还在 alpha 测试阶段。 Code Interpreter 可以接收文件输入…

Android 图片编码之必备技能

在进行 Android 开发时,不可避免地会接触到许多图片格式,例如 JPEG、PNG 等。就以 JPEG 格式为例,它是一种有损压缩模式,使用 YCbCr 的颜色空间来保存色彩信息。当需要在屏幕上显示图片时,会将 JPEG 数据解码成 RGB 进…

淘宝用户体验分析方法论

本专题共10篇内容,包含淘宝APP基础链路过去一年在用户体验数据科学领域(包括商详、物流、性能、消息、客服、旅程等)一些探索和实践经验,本文为该专题第一篇。 在商详页基于用户动线和VOC挖掘用户决策因子带来浏览体验提升&#x…

chatgpt赋能python:Python扫描IP段的简介

Python 扫描 IP 段的简介 Python 是一种广泛应用于数据科学、机器学习、Web 开发等领域的高级编程语言。作为一种通用编程语言,Python 也可以应用于网络安全领域。其中,Python 可以用于扫描 IP 段的网络安全工具开发。 Python 扫描 IP 段 Python 扫描…

5.27下周黄金行情走势预测及开盘操作策略

近期有哪些消息面影响黄金走势?下周黄金多空该如何研判? ​黄金消息面解析:周五(5月26日)黄金大幅下跌,主要受到美国数据影响,美国公布的4月PCE和耐用品订单数据向好,再次强化市场对美联储的鹰派押注。现货…

软件测试之自动化测试【webdriver API】

目录 一、webdriver API 1.元素的定位 2.操作测试对象 3.添加等待 3.1 sleep 强制等待 3.2 隐式等待 3.3 显式等待 4.打印信息 5.浏览器的操作 5.1 浏览器的前进和后退 5.2 浏览器滚动条操作 5.3 浏览器最大化及设置浏览器宽、高 6.键盘按键 7. 鼠标事件 8.定位…

chatgpt赋能python:Python找零-让你的生活更轻松

Python 找零 - 让你的生活更轻松 在我们日常生活中,找零是一个很常见的问题。无论是在超市买东西、给朋友拿钱、或者是做商业交易,都需要进行找零操作。而使用 Python 编程语言,可以让这个问题更加简单易懂,让我们来一起学习 Pyt…

Python中的布尔类型以及布尔值介绍

什么是布尔类型? 布尔类型是一种逻辑类型,它只有两个取值:True(真)和False(假)。在Python中,True和False是内置的布尔类型常量,用于表示真和假的状态。 布尔运算符 在P…

一场九年前的“出发”:奠基多模态,逐鹿大模型

原创:谭婧 全球AI大模型的技术路线,没有多少秘密,就那几条路线,一只手都数得过来。 而举世闻名的GPT-4浑身上下都是秘密。 这两件事并不矛盾。为什么呢? 这就好比,回答“如何制造一台光刻机?”。…

Yolov5/Yolov7涨点技巧:MobileViT移动端轻量通用视觉transformer,MobileViTAttention助力小目标检测,涨点显著

1. MobileViT介绍 论文:https://arxiv.org/abs/2110.02178 现有博客都是将MobileViT作为backbone引入Yolov5,因此存在的问题点是训练显存要求巨大,本文引入自注意力的Vision Transformer(ViTs):MobileViTAttention MobileViT是一种基于Transformers的轻量级模型,它可以用于…

chatgpt赋能python:Python操作手机:SEO指南

Python 操作手机:SEO 指南 在移动设备占据互联网用户市场大头的今天,应用程序的互动变得越来越受欢迎。这就需要我们在开发和优化网站时将手机端无缝集成到我们的计划中。使用 Python 语言可以有效地实现此目标,本文将探讨如何使用 Python 操…

【一篇文章带你掌握HTML中ul、ol和dl列表的使用 - 超详细】

【一篇文章带你掌握HTML中ul、ol和dl列表的使用 - 超详细】_dl标签_China_YF的博客-CSDN博客 前提 在项目开发过程中,列表是非常常见的,因此列表标签也是我们使用相对频繁的标签,但是当我们遇到列表的时候有没有停顿思考一下,我在…