在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,可以使用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界面导航

在Flask中构建API接口的相关概念的更多相关文章

  1. docker&flask快速构建服务接口(二)

    系列其他内容 docker快速创建轻量级的可移植的容器✓ docker&flask快速构建服务接口✓ docker&uwsgi高性能WSGI服务器生产部署必备 docker&g ...

  2. ASP.NET WebAPI构建API接口服务实战演练

    一.课程介绍 一.王小二和他领导的第一次故事 有一天王小二和往常一下去上早班,刚吃完早餐刚一打开电脑没一会儿.王小二的领导宋大宝走到他的面前,我们现在的系统需要提供服务给其他内部业务系统,我看你平时喜 ...

  3. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

  4. 从App业务逻辑中提炼API接口

    2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...

  5. 手把手教你用Abp vnext构建API接口服务

    ABP是一个开源应用程序框架,该项目是ASP.NET Boilerplate Web应用程序框架的下一代,专注于基于ASP.NET Core的Web应用程序开发,也支持开发控制台应用程序. 官方网站: ...

  6. 如何调用EcStore中的API接口

    EcStore系统已内置了丰富的API接口供外部系统调用(接口列表见文章最下面),外部系统具体如何调用这些API呢? 例如有一个PHP的论坛需要调用ecstore系统内一个商品的详情,则可以使用b2c ...

  7. Vue实例中封装api接口的思路 在页面中用async,await调用方法请求

    一般我们写小型的项目是用不到封装axios实例 但是当我们写大型项目时  接口有时候多到有上百个接口,那我们在请求一次调用一次接口,接口上好多都是重复的,这个时候我们就可以封装axios实例,既节省了 ...

  8. 使用Swoole 构建API接口服务

    网上类似的文章已经很多了,我也是刚入门.从头开始学习.所以如果重复写文章阐释,反而会浪费时间,于是就自己动手构建了一个demo,使用swoole 的TCP 服务器接受TCP客户端的发来的http请求, ...

  9. ruby 构建API接口流程代码

    来源:https://ruby-china.org/topics/25822 1.创建新项目 rails new api_demo 2.生成控制器: # 我们不需要生成资源文件 $ bundle ex ...

  10. 构建标准OpenStack API接口文档

    1.构建API接口文档标准参考: http://docs.openstack.org/contributor-guide/api-guides.html 2.构建API接口文档步骤参考下面的Patch ...

随机推荐

  1. iview table json数据里的num排序问题

    title: 'Num', key: 'num', sortable: true, sortMethod:function(a,b,type){ //可以用Number()或者parseInt(a)转 ...

  2. Halcon使用MeasurePos来实现检测边缘点

    (1)为了提高性能,测量句柄只需要初始化一次: 参数:测量矩形的中心点行坐标,测量矩形中心的列坐标,测量矩形的角度,测量矩形的宽,测量矩形的高,待处理图像的宽,待处理图像的高,使用的算法,输出测量句柄 ...

  3. C#自定义控件开发(2)—LED指示灯

    下面来开发一个LED指示灯控件,如下: 设计属性包括: 外环宽度,外环间隙,内环间隙,颜色[五种],当前值. 由于该LED指示灯基本是完全独立设计的,并不是在某个控件的基础上进行的开发,因此,这里使 ...

  4. 面试 考察网络请求HTTP相关知识(第六天!)

    01.HTTP 常⻅的状态码有哪些? 1xx 服务器收到请求 2xx 请求成功         ---   200 成功状态码 3xx 重定向            ---  301永久重定向,浏览器 ...

  5. 轻量级领域驱动设计DDD Lite在嵌入式系统重构中的应用

    前言 目前,关于领域驱动设计(Domain Driven Design)DDD的培训,材料,视频都比较多,大家对DDD的一些概念都有所了解,但是在实际使用过程中,有很多的问题.例如 为什么DDD的架构 ...

  6. i春秋象棋

    这是一道非常有意思的一道题,打开后就是一个pve的象棋游戏,我觉得下赢了就应该会出现flag,可惜多次尝试后失败了(果真有点厉害,我一时兴起就玩了好几把,有空试试拿更厉害的电脑跟他对下,如果赢了会怎么 ...

  7. Karmada跨集群优雅故障迁移特性解析

    摘要:在 Karmada 最新版本 v1.3中,跨集群故障迁移特性支持优雅故障迁移,确保迁移过程足够平滑. 本文分享自华为云社区<Karmada跨集群优雅故障迁移特性解析>,作者:Karm ...

  8. SSH(七)新的开始

    在完成了ssh框架搭建的基础上,我尝试着去了解更多.新一阶段还是一些简单的增删改查,只是提高自己的熟练度. 这一片我要创建一个登录页面,并查询数据库完成登录. 一.创建实体: 1.1新建职员实体emp ...

  9. 2.10:数据加工与展示-pandas清洗、Matplotlib绘制

    〇.目标 1. 使用pandas完成基本的数据清洗加工处理: 2. 使用Matplotlib进行简单的数据图形化展示. 一.用pandas清洗处理数据 1.判断是否存在空值 数据缺失在很多数据中存在, ...

  10. hook详解和应用

    一.hook的作用区域 1.客户端的过程 链接服务器 拿回资源 渲染(解析资源)资源 初始化(自执行) 页面逻辑 等待用户输入 加密数据 提交数据 2.hook的本质 在这些流程任意环节中插入自己的代 ...