第七课 Flask-Restful的使用

本文介绍了Flask-Restful的使用,包括安装、RESTful API设计原则、返回值序列化以及RequestParser对象的使用。讲解了如何通过Flask-Restful创建RESTful API,如何对数据进行序列化,并探讨了爬虫与反爬虫的策略,如IP频率限制、UA池和Cookie管理。
摘要由CSDN通过智能技术生成

第七课 Flask-Restful的使用

tags:

  • Flask
  • 2019千锋教育

categories:

  • flask-Restful
  • 返回值序列化
  • RequestParser对象

第一节 Flask-Restful介绍安装

  1. 官网:https://flask-restful.readthedocs.io/en/latest/index.html

  2. 安装:pip install Flask-RESTful -i https://pypi.douban.com/simple

  3. restful api是用于在前端与后台进行通信的一套规范。使用这个规范可以让前后端开发变得更加轻松。以下将讨论这套规范的一些设计细节

  4. 协议:采用http或者https协议。

  5. 数据传输格式: 数据之间传输的格式应该都使用json,而不使用xml。

  6. url链接:url链接中,不能有动词,只能有名词。并且对于一些名词,如果出现复数,那么应该在后面加s。比如:获取文章列表,应该使用/articles/,而不应该使用/get_article/

  7. HTTP请求的方法:

    • GET:从服务器上获取资源。
    • POST:在服务器上新创建一个资源。
    • PUT:在服务器上更新资源。(客户端提供所有改变后的数据)
    • PATCH:在服务器上更新资源。(客户端只提供需要改变的属性)
    • DELETE:从服务器上删除资源。
  8. 示例如下:

    • GET /users/:获取所有用户。
    • POST /user/:新建一个用户。
    • GET /user/id/:根据id获取一个用户。
    • PUT /user/id/:更新某个id的用户的信息(需要提供用户的所有信息)。
    • PATCH /user/id/:更新某个id的用户信息(只需要提供需要改变的信息)。
    • DELETE /user/id/:删除一个用户。
  9. 写一个Resource资源apis.py

# apis.py
from flask_restful import Api, Resource


api = Api()
def init_ api (app):
	api.init_app(app)
	
	
class HelloResource(Resource):
	def get(self):
		return {
   "msg": "hello api get"}
		
	def post(self):
		return {
   "msg": "hello api post"}

# 注册HelloResource 通过
api.add_resource(HelloResource, '/hello/')
  1. 这里去掉了之前views的方式注册路由。通过127.0.0.1:5000/hello/,访问资源。
# __init__.py
from App.apis import init_api

# 只要路由相关的 都写在__init__.py中 不要卸载ext中
init_api(app=app)
  1. 把上面的apis.py 变成包的形式。用来写不同种类的接口。
  2. 除了Flask-Restful可以用来实现这个,flask还有其他的包也可以用来实现Restful接口。
    • Flask-Restless https://restless.readthedocs.io/en/latest/ (测试版 bug多)
    • Flask-REST-JSONAPI https://flask-rest-jsonapi.readthedocs.io/en/latest/

第二节 Flask-Restful返回数据序列化

  1. 序列化: 直接调用marshal函数或者通过marshal_with装饰。它装饰内部也是调用marshal函数
    • 直接marshal函数 “data”: marshal(goods, goods_fields)
    • @marshal_with(goods_fields) 可以直接返回goods
    • 想要返回data,data中嵌套goods: 写一个single_goods_fields如下。使用装饰器@marshal_with(single_goods_fields)
  2. goods_fields和single_goods_fields 实际上就是我们需要返回数据对象序列化的模板
  3. 模版中多个没有的字段 不会报错 返回null 比如: “hh”: fields.String
  4. 以格式的模板为主
    • 如果格式和数据完全对应,数据就是预期格式
    • 如果格式比数据中的字段多,程序依然正常运行,不存在的字段是默认值"desc": fields.String(default=‘success’),
    • 如果格式比数据中的字段少,程序正常执行,少的字段不会显示
  5. 格式和数据的映射
    • 格式中的字段名和数据中的名需要一致
    • 不一致可以起别名解决:“name”: fields.String(attribute=‘g_name’)
    • 返回URL:‘uri’: fields.Url(‘single_goods’, absolute=True) absolute 绝对路径
      • 需要加上endpoint名称:api.add_resource(GoodsResource, “/goods/int:id/”, endpoint=“single_goods”)
  6. 模板中的字段fields
    • Raw
      • format
      • output
      • 调用
        • 将数据传递进格式化工具的时候,先获取值output
        • 再对值进行格式化 format
    • String
      • 继承Raw
      • 将value进行格式化
      • 转换成兼容格式的text
    • Interger
      • 继承自Raw
      • 重写了初始化,将default设置为0
      • 重写格式化 直接将value转换成int
    • Boolean
      • 继承自Raw
      • 重写格式化
      • 重写格式化,直接将value转换成 bool
    • Nested
      • 继承自Raw
      • 重写output
      • 进行marshal
    • List
      • 继承自Raw
      • 重写output
        • 判断你的类型
        • 对不同的类型进行不同的处理
          • dict 直接进行处理
          • list 迭代处理
      • 重写format
        • 进行格式化
# goods_api.py
from flask import request
from flask_restful import Resource, fields, marshal_with, marshal, abort, reqparse

from App.models import Goods

goods_fields = {
   
    "id": fields.Integer,
    "name": fields.String(attribute='g_name'),
    "g_price": fields.Float,
    'uri': fields.Url('single_goods', absolute=True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值