python flask框架学习之---abort 返回指定响应吗

一、学习目标:

我们使用flask搭建一个服务的时候,需要等请求进行一个拦截,比如我们需要拦截,也可以根据里面的某个字段或者用户进行对比数据库或者指定的sign来验证。

二、测试:

1、起个sign验证服务接口:

from flask import Flask, request,abort,Response
import json
app = Flask(__name__)


@app.route('/demo_status', methods=['GET', 'POST'])
def login():
    # 这里的请求数据和Django中不一样,Flask是通过上下文来管理的,request不是参数,而是导入的模块
    if request.method == 'GET':
        data = request.data.decode()
        # data = request.data
        print("get data", data)
        return "接收get请求,处理逻辑"

    if request.method == 'POST':
        data = request.data.decode()
        # data = request.data
        # print("request", dir(request))
        print("post data", data)
        resq_data = json.loads(data)
        if 'sign' not in resq_data:
            abort(404)

        sign = resq_data['sign']
        if sign == "8ba2e7c3274d8d9f2ac85b0814853833":
            return "审核sign通过认证"
        else:
            abort(403, Response('哈哈哈,认证不通过'))


if __name__ == '__main__':
    # 开始运行
    app.run()
    # app.run(host="127.0.0.1", port=7777, debug=True)

我这里post请求,验证sign,如果sign符合我随便加密的一个md5,服务才会通过,否则不予通过。
如果是账号类型的,可以将此处接口验证设定去指定的数据库读取,看看是否含有对应的账号和密码,然后根据是否登录来线上指定页面的数据。

2、请求测试:

直接本地爬上面的服务脚本,然后本地执行测试:

0)、部署:

如果是服务器上,可以使用gunicorn 部署:

pip3 install gunicorn 
pip3 install flask
# 服务器部署flask服务
方法2# gunicorn -b 服务器内网ip:7777 -w 4 1_flask_get_post:app
方法1# gunicorn -b 0.0.0.0:7777 -w 4 1_flask_get_post:app
# url = "http://公网ip:7777/demo_status"

1)、sign不符合时:

import requests
import json


# 本地启动服务器并测试请求
url = "http://127.0.0.1:5000/demo_status"

payload = {
    "sign":123
    # "sign":'8ba2e7c3274d8d9f2ac85b0814853833'
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
}
response = requests.post(url, headers=headers, data=json.dumps(payload))

print(response.text)

返回403
在这里插入图片描述

2)、sign符合时:

import requests
import json

# 本地启动服务器并测试请求
url = "http://127.0.0.1:5000/demo_status"

payload = {
    # "sign":123
    "sign":'8ba2e7c3274d8d9f2ac85b0814853833'
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
}
response = requests.post(url, headers=headers, data=json.dumps(payload))

print(response.text)

审核通过验证:

在这里插入图片描述

结束语:

其他的相关验证逻辑我觉得在目前的基础上扩展就行了,可能验证逻辑会复杂一点。不过逻辑差不多,想多了解的自己网上搜搜吧

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值