Flask 10(Flask-RESTful)

写在前面

Flask-RESTful官方文档

https://flask-restful.readthedocs.io/en/latest/

安装Flask-RESTful

pip install flask-restful

1、Flask-RESTful开始

1.1、新建一个flask项目

首先得安装一下这几个包

# rest
pip install flask-restful
# 插件
pip install flask-script
# mysql
pip install pymysql
# mysql驱动
pip install flask-sqlalchemy
# 迁移
pip install flask-migrate
# 缓存
pip install flask_caching
# reids
pip install redis

目录结构
在这里插入图片描述
这里我把app.py改成了manage.py

App/_ init _.py里面的代码

from App.ext import init_ext
from App.settings import envs
from App.views import init_blue
from flask import Flask


def create_app(env):
    app = Flask(__name__)
    app.config.from_object(envs.get(env))
    init_ext(app)
    init_blue(app)
    return app

App/ext.py里面的代码

from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from flask_caching import Cache

db = SQLAlchemy()
migrate = Migrate()
cache = Cache(
    config={
        "CACHE_TYPE": "redis"
    }
)


def init_ext(app):
    db.init_app(app)
    migrate.init_app(app, db)
    cache.init_app(app)

App/models.py里面的代码:目前为空

App/settings.py里面的代码

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

def get_db_url(dbinfo):
    engine = dbinfo.get("ENGINE") or "sqlite"
    driver = dbinfo.get("DRIVER") or "sqlite"
    user = dbinfo.get("USER") or ""
    password = dbinfo.get("PASSWORD") or ""
    host = dbinfo.get("HOST") or ""
    port = dbinfo.get("PORT") or ""
    name = dbinfo.get("NAME") or ""

    return "{}+{}://{}:{}@{}:{}/{}".format(engine, driver, user, password, host, port, name)


class Config:
    # 开发环境
    DEBUG = False
    # 测试环境
    TESTING = False
    # 数据库

    SQLALCHEMY_TRACK_MODIFICATIONS = False

    SECRET_KEY = "123456789"

    SESSION_TYPE = "redis"


# 开发环境
class DevelopConfig(Config):
    DEBUG = True

    dbinfo = {
        "ENGINE": "mysql",
        "DRIVER": "pymysql",
        "USER": "root",
        "PASSWORD": "root",
        "NAME": "Flaskrest",
        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 测试环境
class TestConfig(Config):
    TESTING = True

    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "Flaskrest",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 演示环境
class StagingConfig(Config):
    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "Flaskrest",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


# 生产环境
class ProductConfig(Config):
    DEBUG = True

    dbinfo = {
        # 什么数据库
        "ENGINE": "mysql",
        # 驱动名
        "DRIVER": "pymysql",
        # 数据库用户名
        "USER": "root",
        # 密码
        "PASSWORD": "root",
        # 创建的库名
        "NAME": "Flaskrest",

        "HOST": "localhost",
        "PORT": "3306",
    }

    SQLALCHEMY_DATABASE_URI = get_db_url(dbinfo)


envs = {
    "develop": DevelopConfig,
    "testing": TestConfig,
    "staging": StagingConfig,
    "product": ProductConfig,
    "default": DevelopConfig
}

manage.py里面的代码

from App import create_app
from flask_migrate import MigrateCommand
from flask_script import Manager
import os

env = os.environ.get('FLASK_ENV', "develop")
app = create_app(env)


manager = Manager(app)
manager.add_command("db", MigrateCommand)

if __name__ == '__main__':
    manager.run()

创建数据库

登录mysql:mysql -uroot -proot;

建库:create database Flaskrest charset=utf8;

1.2、开始使用Flask-RESTful

创建App/apis.py

from flask_restful import Api, Resource

api = Api()


def init_api(app):
    api.init_app(app)


class Hello(Resource):
    def get(self):
        return {"msg": "Hello World"}


api.add_resource(Hello, '/hello/')

在这里插入图片描述
运行并访问
在这里插入图片描述
post请求实例:
在这里插入图片描述
打开postman工具,访问
在这里插入图片描述
get传参实例
在这里插入图片描述

1.3、json序列化器

用装饰器例:
在这里插入图片描述
用函数例:
在这里插入图片描述
在这里插入图片描述

1.4、级联嵌套序列化

在这里插入图片描述
在这里插入图片描述
访问结果
在这里插入图片描述

1.5、列表级联嵌套序列化

在这里插入图片描述
访问结果
在这里插入图片描述
如果不用装饰器,可以直接返回marshal
在这里插入图片描述

1.6、序列化模板

给字段后面加attribute属性,可以改变字段名(相当于取别名)
在这里插入图片描述
在这里插入图片描述
序列化模板可以添加默认值属性default
在这里插入图片描述
在这里插入图片描述
添加url
在这里插入图片描述在这里插入图片描述

2、Flask-RESTful 的 abort()

用法
在这里插入图片描述
源码
在这里插入图片描述

3、Flask-RESTful 请求转换

在这里插入图片描述在这里插入图片描述
这样args就代替了request.form
在这里插入图片描述
它可以用来做校验
在这里插入图片描述
比如这里我们不给参数访问
在这里插入图片描述
它的其他各种用法:可以在各种位置取各种参数在这里插入图片描述

本文学习笔记截至P412,18:15

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`Flask-RESTful` 是 Flask 的一个扩展,它使创建 RESTful API 变得更加容易。使用 Flask-RESTful,你可以使用 Python 类来定义资源(Resource),并使用 Flask 的路由系统来将 URL 映射到这些资源上。 Flask-RESTful 提供了一组类和方法来处理 HTTP 请求和响应,例如 `Resource`、`Api`、`reqparse` 等。其中,`Resource` 类表示一个 RESTful 资源,它封装了 HTTP 请求和响应的处理逻辑。`Api` 类表示整个 RESTful API,它可以将多个资源组合在一起,并将它们映射到 URL 上。`reqparse` 类用于解析和验证 HTTP 请求参数。 下面是一个简单的使用 Flask-RESTful 的示例: ``` from flask import Flask from flask_restful import Api, Resource, reqparse app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): return {'hello': 'world'} api.add_resource(HelloWorld, '/') if __name__ == '__main__': app.run(debug=True) ``` 在上面的示例中,`HelloWorld` 类继承自 `Resource` 类,表示一个 RESTful 资源。`get()` 方法表示处理 HTTP GET 请求的逻辑,它返回一个 JSON 响应。`api.add_resource()` 方法将 `HelloWorld` 资源映射到根 URL 上。当用户访问根 URL 时,Flask-RESTful 将自动调用 `HelloWorld` 资源的 `get()` 方法,并返回 JSON 响应。 Flask-RESTful 还支持其他 HTTP 方法,例如 POST、PUT、DELETE 等。你可以根据实际需求定义不同的资源和方法,以创建一个完整的 RESTful API。 总之,Flask-RESTful 是一个非常方便的 Flask 扩展,可以帮助你轻松地创建 RESTful API,从而提供 Web 服务和数据接口。它提供了一组类和方法,使 HTTP 请求和响应的处理变得更加简单和易于维护。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值