flask的安装和基本使用

前言

首先,需要知道的是flask是什么?flask是非常非常简单的接口部署工具(当然,也可以用来做前端开发),简单到只需要最简单的几行代码既可在本地调用接口;也是博主在公司常用的一个库,非常的轻量级!!接下来,我会用我写的一个mock接口进行讲解,该mock接口是集成了本项目的数个接口,然后统一集成为一个mock接口,提供给公司其他组同事调用;该接口的功能就是创建一个团购券,然后将团购券的券id通过接口返回出去;

安装

pip install flask

基本使用

全文由项目结构、核心层级详解组成

项目结构

首先需要知道,使用flask部署接口需要的项目结构
在这里插入图片描述

api层

先说下api文件夹,这个文件夹下主要一个接口一个文件
在这里插入图片描述
其中的add.py文件就是groupone服务的add应用;同理,groupone服务的del应用,select应用也都会存在groupone文件夹下,以便管理

com_tools层

com_tools通用工具层是该mock项目的一些通用模块,如生成日志,数据库取值,获取登录状态等等自定义模块
在这里插入图片描述

files层

files外部文件层,主要存放一些需要用的外部文件,如图片,配置文件,excel表格等等

libs层

这个是和api层一样重要的目录,api层所需要的的数据来源,都放在libs层进行运算处理
在这里插入图片描述
groupon_utils.py文件就是api层中的groupon文件夹中所有文件的数据来源,包括但不限于add.py文件

logs层

就是普通的日志存储位置

init_daodian文件

该文件是最核心的初始化文件,也是接口的服务文件,下面的层级详解中,会详细讲述;文件名自定义即可,不用按照博主的名字去编写;但是建议不要使用init,防止和python关键字冲突

核心层级详解

add.py文件的编写

先上代码,关于代码的解释,已经在码中进行了解析

from flask import Blueprint #引入flask的蓝图模块
from flask import request #引入flask的request模块,获取接口入参
from libs import groupon_utils
from com_tools import log_create
blueprint = Blueprint("groupon",__name__)  # blueprint要被init文件调用

@blueprint.route('/add',methods=['POST']) #接口应用名为add 接口的调用方式为host + 该蓝图blueprint的url_prefix+add 例如该接口 http://127.0.0.1:6767/groupon/add
def add_groupon():
   """新增团购劵
   只支持post方法,且入参只能是json格式
   """
   log_create.logger.logger.debug("创建团购券接口被调用,入参为:%s"%request.data)
   global host,utils
   pid = request.json.get("pid") #店铺id
   name = request.json.get("name") #团券名称
   price = request.json.get("price") #售价
   env = request.json.get("env") #环境
   left = request.json.get("left") #库存
   #判断代码执行环境
   if str(env).lower() == "qa":
       host = "内部信息,不展示了,这里输入你代码执行的环境对应的host"
   else:
       data = {"code": 99997, "errmsg": "env参数异常,请输入qa/pl/ol,pl和ol暂不支持", "data":""}
       log_create.logger.logger.debug("创建团购券接口被调用,响应参数为:%s" % data) #写入日志
       return data
   #非必填参数left
   if left is not None:
       utils = groupon_utils.Groupon_Utils(pid=pid, name=name, price=int(price), base_url=host,left=left)  # 创建Groupon_Utils的类实例
   else:
       utils = groupon_utils.Groupon_Utils(pid=pid, name=name, price=int(price), base_url=host)
   result = utils.select_groupon()#通过实例对象调用类的函数
   if result["code"] == 0:
       cardTemplateId = result["data"]["cardTemplateId"]
       data = {
           "code": 0,
           "errmsg":"成功",
           "data":{
               "cardTemplateId":cardTemplateId,
           }
       }
       log_create.logger.logger.debug("创建团购券接口被调用,响应参数为:%s" % data)
       return data
   else:
       log_create.logger.logger.debug("创建团购券接口异常,响应参数为:%s" % result)
       return result

上诉代码中需要注意到的是,该段代码并不能独立运行,所以入参是否正常取到,返回是否生效,都需要配合libs层文件和init文件一起执行才能判断

libs层的groupon_utils文件编写

还是不多说,边看代码边看解析吧

import requests,time,datetime,json
from com_tools import get_value_Utils,login_Utils,log_create
session = requests.session()#python的requests库的session实例化
class Groupon_Utils(): #创建一个团购操作类
	def __init__(self,pid,name,price,base_url,wid=2995903,left=1): #类的初始化文件,类被实例化时,均会调用该方法
		log_create.logger.logger.debug("Groupon_Utils()的入参为:pid=%s,name=%s,price=%s,base_url=%s,wid=%s,left=%s" % (pid,name,price,base_url,wid,left))
		re = login_Utils.Login_Utils(pid=pid,wid=wid) #登录操作的实例化
		self.pid = pid #将入参转化为类方法可以调用的参数
		self.wid = wid
		self.name = name
		self.price = price
		self.base_url = base_url
		self.Authorization = "Bearer " + re.login_pc('token') #获取登录身份
		self.B_cookie = re.login_pc('cookie') #同获取登录身份,这两个参数都是根据自身业务所需进行编写,你进行数据运算,接口调用,需要身份权限时,就设置对应的方法即可,例如博主就是在com-tools中有个登录操作模块,专门获取登录身份
		self.left = left


	def create_groupon(self): # 创建团购券,调用创建团购券接口
		url = str(self.base_url) + "敏感信息,不展示了,这里需要替换成你自己需要的接口位置"
		log_create.logger.logger.debug("创建团购券接口的变量信息为startDate=%s,expireDate=%s,detail_name=%s,url=%s" % (startDate,expireDate,detail_name,url))
		data = "这里输入json格式的参数信息,如果你不清楚什么事json格式的参数,可以抓个包看看"
		headers = {
			"channel-type":"pc",
			"Content-Type" : "application/json;charset=UTF-8",
			"Cookie": self.B_cookie,
			"Authorization":self.Authorization,
		} #headers头部信息
		log_create.logger.logger.debug(
			"创建团购券接口的入参信息为data=%s" % (data))
		log_create.logger.logger.debug(
			"创建团购券接口的请求头信息为headers=%s" % (headers))
		response = session.post(url=url,json=data,headers=headers) # 执行该接口请求
		if json.loads(response.text)["errcode"] == 0: #对接口请求进行判断
			return 0
		else:
			data = {"code": 99998, "errmsg": "创建团购券失败", "data": response.text}
			return data

	def select_groupon(self):
		#根据创建时间倒序排列
		create_result = self.create_groupon()#查找券id之前,先创建券
		if create_result == 0:
			url = self.base_url + "敏感信息,这里同上"
			data = "同上"
			headers = {
				"channel-type":"pc",
				"Content-Type" : "application/json;charset=UTF-8",
				"Cookie": self.B_cookie,
				"Authorization":self.Authorization,
			}
			response = session.post(url,json=data,headers=headers)
			for i  in range(len(json.loads(response.text)["data"]["items"])): #这是一个for循环,去遍历所有的接口返回值中的选项,通过这个方式,拿到需要查找的数据,其实还可以通过正则的方式来获取,这里就不做讲述了
				if json.loads(response.text)["data"]["items"][i]["name"] == self.name: 
					cardTemplateId =  json.loads(response.text)["data"]["items"][i]["cardTemplateId"]
					data = {"code": 0, "errmsg": "查询成功", "data": {"cardTemplateId":cardTemplateId}}
					return data
				else:
					data = {"code":99999,"errmsg":"查询cardTemplateId失败","data":response.text}
					return data
		else:
			return create_result


这段代码需要注意的就是,尽可能的将api层中的每一个目录都做成一个单一的类,这样方便管理

init文件的编写

from  flask import Flask
#导入的是api中的蓝图对象
from apis.groupone.add import blueprint #导入蓝图
#总驱动文件
app = Flask(__name__)# 我也不清楚这个为啥要这么写,也不清楚括号内改动有啥用,有知道的大佬,可以评论指出来
app.register_blueprint(blueprint,url_prefix='/groupon')#注册我们在add.py模块中创建的蓝图实例blueprint, 并将他的URL前缀设置为`/groupon`;前缀我们尽量使用api层的次一级目录,这样好管理
if __name__ == '__main__':
    app.run(host='0.0.0.0',port=6767,debug=False,threaded=True)

是的,你没有看错,init文件就是这么简单! 这个接口在本地调用的URL就是http://127.0.0.1:6767/groupon/add 入参要求的是json格式的pid,name,price,env,请求方式要求是post

结尾

flask框架的一个简单的安装和使用就到这里拉,后续我会写关于flask框架怎么部署到服务器,以及我在部署服务时遇到的坑

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值