【星海出品】flask (二) request替代VUE测试flask接口

本文主要是介绍【星海出品】flask (二) request替代VUE测试flask接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

flask 是一门使用 python 编写的后端框架。

VUE前端UI装饰推荐学习Element组件库
之后就不使用UI去测试flask了,环节太多,影响直观反映,直接使用postman或request测试更加直观.

url携带参数

 @app.route('/my/blog/<blog_id>')def blog_detail(blog_id):  # put application's code herereturn '您访问的博客是{}'.format(blog_id)```

flask里的requests方法
要获取来自前端的参数,可以使用request.args.get方法。
有时候我们需要在前端没有传递该参数时,设置一个默认值。这个时候可以使用request.args.get的第二个参数。下面是设置默认值的代码

age = request.args.get(‘page’, default=18)

 from flask import Flask,request@app.route('/book/list')def book_detail():  # put application's code herepage = request.args.get('page', default=1, type=int)return '你获取的是{}'.format(page)

在前端有时候我们需要传递多个参数,例如下面的代码:

http://localhost:5000/login?username=python123&password=12345

这里username和password都是需要获取的参数。我们可以分别使用request.args.get方法获取各个参数:

username = request.args.get('username')
password = request.args.get('password')

http://localhost:5000/search?keywords=python&keywords=flask&keywords=web&page=1

keywords = request.args.getlist('keywords')
page = request.args.get('page')

可以将获取的值转换成int

page = int(request.args.get('page', default=1))

http://localhost:5000/search?is_valid=true

获取boole值

is_valid = request.args.get('is_valid', default='false') == 'true'
request.form.get("key", type=str, default=None) 
//获取表单数据
request.args.get("key") 
//获取get请求参数
request.values.get("key") 
//获取所有参数

我们用代码的方式去展示

C/S模式

Client

requests是一个Python第三方库,用于发送HTTP请求。它提供了一种简单而优雅的方式来发送HTTP/1.1请求,并且可以自动处理
连接池,重定向等问题。requests库可以在Python 2.7和Python 3中使用,支持HTTP和HTTPS请求,支持Cookie、代理、SSL证书验证等功能。
使用requests库可以方便地发送GET、POST、PUT、DELETE等请求,并且支持上传文件和发送JSON数据等操作。通过requests库,我们可以轻松地与Web服务进行交互,获取数据或提交数据。requests库已经成为Python中最常用的HTTP客户端库之一,被广泛应用于Web开发、数据分析、爬虫等领域。

python request 的使用
pip3 install requests

方法2:源码安装
下载 requests源码 http://mirrors.aliyun.com/pypi/simple/requests/
下载文件到本地之后,解压到Python安装目录,之后打开解压文件
运行命令行输入python setup.py install 即可安装

Server

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

Client

requests.request(url)	构造一个请求,支持以下各种方法
requests.get()	发送一个Get请求
requests.post()	发送一个Post请求
requests.head()	获取HTML的头部信息
requests.put()	发送Put请求
requests.patch()	提交局部修改的请求
requests.delete()	提交删除请求
import requests
ip = "192.168.0.100"
port = "5000"
url = 'http://' + ip + ':' + port
print(url)
r = requests.get(url)
print('code')
print(r.status_code)
print(type(r.status_code))
print('header')
print(r.headers)
print(type(r.headers))
print('content')
print(r.headers)
print(type(r.headers))
print('text')
print(r.text)
print(type(r.text))

http://192.168.0.100:5000
code
200
<class ‘int’>
header
{‘Server’: ‘Werkzeug/3.0.0 Python/3.10.11’, ‘Date’: ‘Tue, 07 Nov 2023 07:25:38 GMT’, ‘Content-Type’: ‘text/html; charset=utf-8’, ‘Content-Length’: ‘12’, ‘Connection’: ‘close’}
<class ‘requests.structures.CaseInsensitiveDict’>
content
{‘Server’: ‘Werkzeug/3.0.0 Python/3.10.11’, ‘Date’: ‘Tue, 07 Nov 2023 07:25:38 GMT’, ‘Content-Type’: ‘text/html; charset=utf-8’, ‘Content-Length’: ‘12’, ‘Connection’: ‘close’}
<class ‘requests.structures.CaseInsensitiveDict’>
text
Hello World!
<class ‘str’>

Client

Head = r.headers
print(type(Head))
print(type(r.headers))
if 'Content-Type' in Head:print("B")B = Head.get('Content-Type')print(B)print(type(B))

<class ‘requests.structures.CaseInsensitiveDict’>
<class ‘requests.structures.CaseInsensitiveDict’>
B
text/html; charset=utf-8
<class ‘str’>

url = url + '/user/login'
print(url)
auth = {"userName" : "admin","password" : "123456"
}
r = requests.post(url,json=auth)
print(r.status_code)
print(r.content)print( r.json() )
print( type(r.json() ) )
print(r.json().get('data').get('token') )

http://192.168.0.100:5000/user/login
200
b’{\n “code”: 0,\n “data”: {\n “token”: “666666”\n }\n}\n’
{‘code’: 0, ‘data’: {‘token’: ‘666666’}}
<class ‘dict’>
666666

urlB = url + '/user/info'
print(urlB)
headers = {'token': '666666','Content-Type': 'application/json'
}response = requests.request("POST", urlB, headers=headers)
print(response.text)
print(response.json().get('data').get('realName').encode('utf-8').decode('gbk'))

http://192.168.0.100:5000/user/info
{
“code”: 0,
“data”: {
“id”: “1”,
“realName”: “\u5f20\u4e09”,
“userName”: “admin”,
“userType”: 1
}
}
张三

server

@app.route('/book/list', methods=["GET", "POST"])
def book_detail():page = request.args.get('page',default=1,type=int)return 'you get is {}'.format(page)

client

urlC = url + '/book/list' + "?page=z"
print(urlC)
r = requests.request("GET",urlC)
print(r.status_code)
print(r.text)

传输的不是规定的类型,就会按照default赋值

http://192.168.0.100:5000/book/list?page=z
200
you get is 1

这篇关于【星海出品】flask (二) request替代VUE测试flask接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383351

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背