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

发布了136 篇原创文章 · 获赞 30 · 访问量 7085

猜你喜欢

转载自blog.csdn.net/a__int__/article/details/104595816