在Flask中构建API接口的相关概念
2024-10-21 06:07:56
在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界面导航
最新文章
- 枚举全排列(包括数列中有重复数)的C语言实现
- linuxmint 默认不启动图形界面
- 【USB多路电源】---需求分析方案制定
- ASP.NET MV3 部署网站 报";Could not load file or assembly ' System.Web.Helpers “ 错的解决方法
- 破解source insignt方法
- Andriod wifi 基本操作
- Tutorial Unity 4 apk splitting into OBB for google play
- JqGrid自定义toolbar
- 【nodejs学习】2.网络相关
- Best practice for Invoke other scripts or exe in PowerShell
- jrtplib使用注意事项
- Oracle启动操作
- C# Restful 启用 Session
- DBsever工具连接mysql数据库
- sublime text3配置及相关小技巧
- zookeeper:shell操作以及可视化工具的使用
- ubuntu远程桌面、VNC(转载)
- Linux基础命令---bzmore
- 20155233 2016-2017-2 《Java程序设计》第6周学习总结
- RabbitMQ--Publish/Subscribe(三)
热门文章
- docker搭建ddns
- 【翻译】Spring Security - 如何解决WebSecurityConfigurerAdapter类已被弃用的问题?
- JavaScript 实现地图搜索功能
- 零基础入门数据挖掘——二手车交易价格预测:baseline
- 【论文解读】NIPS 2021-HSWA: Hierarchical Semantic-Visual Adaption for Zero-Shot Learning.(基于层次适应的零样本学习)
- 玩好.NET高级调试,你也要会写点汇编
- jQuery事件与动态效果
- 为什么总是应该考虑给定 List 的初始大小
- 数据库MySQL(完结)
- PTA散列表平方探测法解决冲突