IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> flask之搭建web服务 -> 正文阅读

[Python知识库]flask之搭建web服务

前言

在这里插入图片描述
flask是什么?众所周知 java有 spring 全家桶和sparkjava,Python有Django和flask,Django属于大而全的框架,flask是一个轻量级的web服务框架,结构简单但功能强大,像一把尼泊尔军刀一样,非常适合我们在平时工作中开发一些简单的工具,如简单的自动化测试平台,今天一起来了解下flask在web服务中的应用。

本地搭建flask服务

设置路由

# 导包flask
from flask import Flask

# 实例化一个Flask的对象
app = Flask(__name__)


# 调用app.route来指定接口的路由,/表示根目录
@app.route("/login")
def flask_demo(): # flask_demo为你的接口名称
    return "login successful" # 接口的返回值


if __name__ == '__main__':
    app.run(debug=True) # app.run()启动服务,并打开debug模式设置为True,热处理更新
    
控制台打印如下
* Serving Flask app 'flask_fx' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 536-367-075
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [04/Dec/2021 17:01:33] "GET /testcase HTTP/1.1" 404 -
127.0.0.1 - - [04/Dec/2021 17:01:34] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [04/Dec/2021 17:01:52] "GET /LOGIN HTTP/1.1" 404 -
127.0.0.1 - - [04/Dec/2021 17:02:02] "GET /login HTTP/1.1" 200 -
 * Detected change in 'E:\\code_software\\Python Charm\\Python Project\\flask_demo2\\flask_fx.py', reloading
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 536-367-075
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Detected change in 'E:\\code_software\\Python Charm\\Python Project\\flask_demo2\\flask_fx.py', reloading
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 536-367-075
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

其中 http://127.0.0.1:5000/ 为flask服务地址
浏览器访问flask服务,如下图
在这里插入图片描述

设置请求方法和参数

# 导包flask
from flask import Flask, request

# 实例化一个Flask的对象
app = Flask(__name__)


# 调用app.route来指定接口的路由,/表示根目录
# methods指定访问接口的请求的方法,必须传入列表,否则报错
@app.route("/login", methods=["get"])
def flask_demo():  # flask_demo为你的接口名称
    user = request.args.get("user")
    return f"login successful user={user}"  # 接口的返回值


@app.route("/home", methods=["post"])
def flask_demo2():  # flask_demo为你的接口名称
    user = request.json.get("user")  # 接受post请求的json数据
    return {f"message": "login successful", "user": f"{user}"}  # 接口的返回值


if __name__ == '__main__':
    app.run(debug=True)  # app.run()启动服务,并打开debug模式设置为True,热处理更新

使用浏览器并带参数访问flask_demo接口
在这里插入图片描述
访问flask_demo2

   def test_flask_fx():
        url = "http://127.0.0.1:5000/home"
        data = {
            "user": "leo",
        }
        re = requests.post(url=url, json=data)
        print(re.text)
        assert re.status_code == 200


控制台信息:
PASSED                            [100%]{
  "message": "login successful", 
  "user": "leo"
}

知识点一:methods 可以用来指定请求方法,但必须是列表
知识点二:requests.args来接收get请求的params参数,requests.form用来接收post的data参数,requests .json用来接收post请求体中的json数据

如何搭建一个restful接口的服务

非restful接口

@app.route("/testcase", methods=["get", "post", "put", "delete"])
def test_case():
    if request.method == "get":
        pass
    elif request.method == "post":
        pass
    elif request.method == "put":
        pass
    elif request.method == "delete":
        pass


if __name__ == '__main__':
    app.run()

按照上面的剧情发展我们写的接口大概就会成为这样,但是如果通过判断method来进行业务逻辑的编写,会使得代码很耦合,违背了高内聚,低耦合的设计理念。那有没有一种方法可以直接编写get、post、delete、put接口呢,既符合接口设计规范,又不互相耦合,这里我们引入了flask的第三方库 flask_restful

安装flask_restful

pip install flask_restful
from flask_restful import Api, Resource  # 导入flask_restful的两个重要的方法
from flask import Flask

from logger_until import logger

app = Flask(__name__)  # 实例化Flask对象
api = Api(app)  # 将Flask的对象实例塞进Api中,将flask和flask_restful进行绑定


class TestCaseServer(Resource):

    def get(self):
        logger.info(" get method ")
        return {"errcode": 0000, "message": " get method "}

    def post(self):
        logger.info(" post method ")
        return {"errcode": 0000, "message": " post method "}

    def delete(self):
        logger.info(" delete method ")
        return {"errcode": 0000, "message": " delete method "}

    def put(self):
        logger.info(" put method ")
        return {"errcode": 0000, "message": " put method "}


# 将继承了resource的接口定义类添加到api中,并定义接口的路由地址
api.add_resource(TestCaseServer, "/testcase")

if __name__ == '__main__':
    app.run(debug=True)

上面就是按照restful规范定义的后台接口

下面为测试代码

import requests


class TestCase:

    def setup_class(self):
        self.url = "http://127.0.0.1:5000/testcase"

    def teardown_class(self):
        pass

    def test_get(self):
        re = requests.get(url=self.url)
        print(re.text)
        # assert re.status_code == 200

    def test_post(self):
        re = requests.post(url=self.url)
        assert re.status_code == 200

    def test_put(self):
        re = requests.put(url=self.url)
        assert re.status_code == 200

    def test_delete(self):
        re = requests.delete(url=self.url)
        assert re.status_code == 200

在这里插入图片描述
接口框架已搭建成功,再需要根据业务规则与数据库或其他业务模块进行交互

下一节链接: flask与数据mysql进行交互.

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:00:09  更:2021-12-05 12:01:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:40:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码