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

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

VUE前端UI装饰推荐学习Element组件库

之后就不使用UI去测试flask了,环节太多,影响直观反映,直接使用postman或request测试更加直观.

url携带参数

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

flask里的requests方法

要获取来自前端的参数,可以使用request.args.get方法。

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

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

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

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

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

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

python 复制代码
username = request.args.get('username')
password = request.args.get('password')

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

python 复制代码
keywords = request.args.getlist('keywords')
page = request.args.get('page')

可以将获取的值转换成int

python 复制代码
page = int(request.args.get('page', default=1))

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

获取boole值

python 复制代码
is_valid = request.args.get('is_valid', default='false') == 'true'
python 复制代码
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

python 复制代码
@app.route('/')
def hello_world():
    return 'Hello World!'

Client

python 复制代码
requests.request(url)	构造一个请求,支持以下各种方法
requests.get()	发送一个Get请求
requests.post()	发送一个Post请求
requests.head()	获取HTML的头部信息
requests.put()	发送Put请求
requests.patch()	提交局部修改的请求
requests.delete()	提交删除请求
python 复制代码
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

python 复制代码
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'>

python 复制代码
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

python 复制代码
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

python 复制代码
@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

python 复制代码
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

相关推荐
懒大王爱吃狼21 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷1 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
深度学习lover2 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
API快乐传递者3 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
Devil枫5 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
阡之尘埃5 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
GIS程序媛—椰子6 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
毕业设计制作和分享7 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
程序媛小果7 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot
从兄7 小时前
vue 使用docx-preview 预览替换文档内的特定变量
javascript·vue.js·ecmascript