Flask框架的web开发01(Restful API接口规范)

目录

前言:

flask框架

 Restful API接口规范

1,最简单的web程序

 2.http方法和动态URL

3.请求类request模块 

 4.API接口

1.蓝图

2.Restful

 五:flask框架图


前言:

flask框架

        flask框架是python中的一个轻量级的前后端开发框架,不同于Django,flask只提供基础的功能,其他的功能需要安装各种插件。因为轻量,所以可以用来做一些小工程和低流量的开发;大型工程也可以使用flask框架,但是就需要安装很多插件。

 Restful API接口规范

        REST 代表表现层状态转移( REpresentational State Transfer ),由 Roy Fielding 在他的论文中提出。 REST 是一 种软件架构风格,不是技术框架,REST 有一系列规范,满足这些规范的 API 均可称为 RESTful API 。 REST 规范中最重要的核心就是使用标准的(GET/POST/PUT/DELETE) 来更改资源的状态,常见的操作有:资源的增删改查操作

1,最简单的web程序

        首先需要安装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管理路由

        运行结果如下就证明服务跑起来了:

Flask框架的web开发01(Restful API接口规范)_第1张图片

        通过ip+端口+路由组成的url访问就得到web界面:  

Flask框架的web开发01(Restful API接口规范)_第2张图片 

Flask框架的web开发01(Restful API接口规范)_第3张图片 

 2.http方法和动态URL

###############为请求添加方法
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)

        效果展示:

Flask框架的web开发01(Restful API接口规范)_第4张图片

3.请求类request模块 

# 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"

        效果如图:

Flask框架的web开发01(Restful API接口规范)_第5张图片

Flask框架的web开发01(Restful API接口规范)_第6张图片 

 4.API接口

        接口由URL和HTTP方法构成,URL为接口的地址,HTTP方法指的是GET,POST,PUT,DELETE等等。也就是后端写的东西,暴露出来给别人使用。

1.蓝图

        在了解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。实现分层解耦

        效果如图: 

Flask框架的web开发01(Restful API接口规范)_第7张图片

2.Restful

        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')

        效果图: 

Flask框架的web开发01(Restful API接口规范)_第8张图片

        我们为了路由的结构看起来更舒适,创造不同的文件通过导入模块的方式使其统一;

Flask框架的web开发01(Restful API接口规范)_第9张图片

 五:flask框架图

        为了便于理解,我们在图上直观的感受各模块之间的联系以及运用到的知识点。

Flask框架的web开发01(Restful API接口规范)_第10张图片

         后续将整理python运用pymysql模块连接数据库,模型序列化库,标准化返回,http基本认证,客户端信息验证等。

你可能感兴趣的:(python,flask,python,后端,restful,服务器)