首页 > 其他分享 >在Flask中构建API接口的相关概念

在Flask中构建API接口的相关概念

时间:2023-02-10 23:33:25浏览次数:33  
标签:session username return Flask app 接口 API route def

在Flask中构建API接口的相关概念

重定向行为

斜杠

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

第一个路由的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方法

1 GET 请求指定的页面信息,并返回实体主体。
2 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
3 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
4 DELETE 请求服务器删除指定的页面。
@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界面导航

01.png

标签:session,username,return,Flask,app,接口,API,route,def
From: https://www.cnblogs.com/engpj/p/17110679.html

相关文章

  • 开发私有chatGPT(四)openai接口文档-快速开始
    快速开始OpenAI训练了非常擅长理解和生成文本的尖端语言模型。我们的API提供对这些模型的访问,可用于解决几乎任何涉及处理语言的任务。在本快速入门教程中,您......
  • 函数式接口介绍、方法引用在Lambda中的使用 及 基本数据类型优化、并行流使用
    (目录)函数式接口1.概述​ 只有一个抽象方法的接口我们称之为函数接口。​ JDK的函数式接口都加上了**@FunctionalInterface**注解进行标识。但是无论是否加上该注解......
  • Apipost参数描述的填写和参数描述库的使用
    请求参数的描述填写对于header、query以及form-data和urlencode的body参数,我们在如下地方填写参数描述:如图中所示,对于一个填写过的参数,我们可以在新建接口可以通过点击参数......
  • 基于Python的天气API
    ██████╗███████╗██████╗██╗██╗███████╗██╔═══██╗██╔════╝██╔══██╗╚██╗██╔╝██╔═══......
  • java 接口返回空指针问题排查
    java接口返回空指针问题排查问题现象现象:业务流程都能通,数据也正常,就是接口返回【空指针异常】排查:postman接口调用测试,返回200PHP项目中调用接口,返回400空指针异常......
  • 执行kubectl api-resources 报错error: unable to retrieve the complete list of ser
    1、故障现象:error:unabletoretrievethecompletelistofserverAPIs:metrics.k8s.io/v1beta1:theserveriscurrentlyunabletohandletherequest2、分析原因......
  • Go使用协程批量获取数据,加快接口返回速度
    服务端经常需要返回一个列表,里面包含很多用户数据,常规做法当然是遍历然后读缓存。使用Go语言后,可以并发获取,极大提升效率。使用channelpackagemainimport("fmt"......
  • 抽象类和接口的区别
    1、抽象类是单继承,接口可以多实现。2、抽象类中方法的访问权限可以任意,接口里方法的访问权限只能是public3、抽象类中可以有构造方法,接口中不能有。4、抽象类中可以有......
  • RestTemplate调用天地图api
    代码ClientHttpRequestFactoryrequestFactory=newHttpComponentsClientHttpRequestFactory(HttpClients.createDefault());RestTemplateclient=newRest......
  • Apipost参数描述的填写和参数描述库的使用
    请求参数的描述填写对于header、query以及form-data和urlencode的body参数,我们在如下地方填写参数描述:如图中所示,对于一个填写过的参数,我们可以在新建接口可以通过点击......