目录
前言:
flask框架
Restful API接口规范
1,最简单的web程序
2.http方法和动态URL
3.请求类request模块
4.API接口
1.蓝图
2.Restful
五:flask框架图
flask框架是python中的一个轻量级的前后端开发框架,不同于Django,flask只提供基础的功能,其他的功能需要安装各种插件。因为轻量,所以可以用来做一些小工程和低流量的开发;大型工程也可以使用flask框架,但是就需要安装很多插件。
REST 代表表现层状态转移( REpresentational State Transfer ),由 Roy Fielding 在他的论文中提出。 REST 是一 种软件架构风格,不是技术框架,REST 有一系列规范,满足这些规范的 API 均可称为 RESTful API 。 REST 规范中最重要的核心就是使用标准的(GET/POST/PUT/DELETE) 来更改资源的状态,常见的操作有:资源的增删改查操作
首先需要安装flask服务:flask--pip3 install flsak。程序总体上我们要有一个核心对象(由Flask模块实例化得到),然后需要一个路由(相当于一条道路指向哪里),最后是一个函数(做了什么事)。
from flask import Flask #导入Flask模块
app = Flask(__name__) #核心对象app
@app.route("/") #为函数添加路由
def index(): #函数体
return "hello world"
@app.route("/sc")
def sc():
return "this is sc2"
app.add_url_rule("/sc2",view_func=sc,endpoint="xixi")
app.run()
# 路由查找跟核心对象的两个属性app.url_map属性以及app.view_functions属性有关
# 1,用户访问时,先在url——map表里找/sc2,没有找到就抛出404异常
# 2,找到再在view_functionli找到对应endpoint视图函数 endpoint全局唯一
# 3,多中间值是为了解耦,便于后续服务扩展,还有数据读取速度等等所以加入endpoint管理路由
运行结果如下就证明服务跑起来了:
通过ip+端口+路由组成的url访问就得到web界面:
###############为请求添加方法
http方法:
GET, 获取页面信息。浏览器默认不允许有body,浏览器默认发送get方法,服务端默认是get方法。
POST, 提交信息
PUT, 修改信息
DELETE, 删除信息
OPTIONS, 可以查看当前URL支持哪些方法
HEAD, 获得头部字段
# 构造动态URL
from flask import Flask
app = Flask(__name__)
#将URl中的可变部分使用一堆尖括号包裹起来,声明变量。
@app.route("/user//passwd/",methods = ["POST","PUT","DELETE","GET"])
def index(username,password):
return f"username is {username},passwd is {password}"
app.run(debug=True)
效果展示:
# request:
# args --获取请求url中的参数
# from --获取请求表单中的数据
# json --获取请求中传递的json数据
# headers -- 获取请求中的头部字段
# path --获取请求中的资源定位url
# method --获取请求中的http方法
#请求类 客户端请求发过来的数据全部都在request对象里
from flask import url_for,Flask,request
app = Flask(__name__)
@app.route("/sc",methods = ["POST","PUT","PATCH","GET"])
def index():
print(dir(request))
print(request.path,request.url,request.host)
# 获取url中的请求agrs参数数据
print(request.args)
print(request.args.get("username"))
print(request.args.get("passwd"))
# 获取from表单数据
print(request.form)
print(request.form.get("username"))
print(request.form.get("passwd"))
# 获取传递过来的json数据:轻量级的数据交互格式,传过来是什么格式,得到就是什么格式
print(request.json)
print(request.json.get("username"))
print(request.json.get("passwd"))
# 通过json传递用户名和密码
# 如果获取到的用户名和密码分别是root 123456
# 得到 login successful
# 否则得到login failure
if request.json.get("username") == "root" and request.json.get("passwd") == "123456":
return "login successful"
else:
return "login failure"
效果如图:
接口由URL和HTTP方法构成,URL为接口的地址,HTTP方法指的是GET,POST,PUT,DELETE等等。也就是后端写的东西,暴露出来给别人使用。
在了解restful接口风格之前,我们先来了解一下蓝图的概念,flask中蓝图的作用就是让Flask项目更加模块化,结构更加清晰,方便管理。如果将所有的视图函数都是写在同一个文件,项目比较大的话,这显然不是一个合理的结构。
from flask import Blueprint,request
# 蓝图1
stu_bp = Blueprint("student", __name__) #导入Blueprint并生成一个蓝图对象
# 创建蓝图和视图函数并把视图函数绑定到蓝图1和2(蓝图stu_bp),同下
@stu_bp.route("/student/get")
def get_student():
return "this is get_student"
# 使用蓝图管理 endpoint默认都是(蓝图的名字.函数名)。endpoint全局唯一,否则会抛出断言异常。
# 蓝图2
stu_bpa = Blueprint("sc", __name__ , url_prefix="/v2/")
@stu_bpa.route("/student/sc",methods = ["POST","PUT","PATCH","GET"])
def index():
return "hello world"
蓝图可以根据函数功能的不同划分为多个,本质上来说从原先的函数直接绑定到核心app上变成函数绑定蓝图,蓝图再绑定核心app。实现分层解耦
效果如图:
restful在蓝图的基础上更加优化了函数的结构
from flask import Blueprint,request
from flask_restful import Resource,Api #使用Resource类获得四种请求方法的函数
#Api类实例化api对象连接函数类和蓝图
#再通过蓝图绑定核心app实现资源高可用
# 蓝图
stu_bp = Blueprint("student", __name__)
@stu_bp.route("/student/get")
def get_student():
return "this is get_student"
# 使用restful,api绑定在蓝图上
api = Api(stu_bp)
class StudentApi(Resource):
def get(self):
return "this is get"
def post(self):
return "this is post"
def put(self,id):
return "this is put"
def delete(self,id):
return "this is delete"
# 把视图函数绑定到api上
api.add_resource(StudentApi,"/stuapi")
api.add_resource(StudentApi,"/stuapi/",endpoint='stuapiid')
效果图:
我们为了路由的结构看起来更舒适,创造不同的文件通过导入模块的方式使其统一;
为了便于理解,我们在图上直观的感受各模块之间的联系以及运用到的知识点。
后续将整理python运用pymysql模块连接数据库,模型序列化库,标准化返回,http基本认证,客户端信息验证等。