栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

大型项目结构与蓝图

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大型项目结构与蓝图

目录

一、Flask上下文

1、请求上下文

2、应用上下文

例子1

例子2

二、蓝图

1、蓝图介绍

2、使用蓝图

三、Flask-RESTful

1、下载第三方模块

2、怎么使用

结果​ 四、装饰器

case_装饰器

 case_装饰器

 例子1

 1、视图类添加

2、单方法添加


一、Flask上下文

1、请求上下文
request
    封装了HTTP请求的内容, 针对的是HTTP请求. 
    请求的数据封装在request对象中, 比如查询参数, 文件数据等
session
    session用来记录请求会话中的信息, 针对的是用户信息.

2、应用上下文
current_app 代表当前app   app可以完成跨视图函数访问
​
g   全局的变量   但是不能跨视图函数访问

例子1
app.jiyun = "你好 积云"
​
@app.route("/count")
def do_home():
    print("jiyun:{}".format(current_app.jiyun))
    return "登录失败!"

结果

 

例子2
@app.route("/comment")
def do_comment():
    print("g.msg=", g.msg)
​
@app.route("/error")
def do_error():
    g.msg = "我是小兵张嘎"
    print(g.msg)
    return "我是小兵张嘎"

结果:结果:先执行error,后执行comment

二、蓝图

1、蓝图介绍
蓝图(blueprint):用于实现单个应用的视图、模板、静态文件的集合。
​
蓝图就是模块化处理的类。类似于django中app,子应用。
​
简单来说,蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。
​
flask中,将项目模块化,blueprint,是flask自带的一种开发模式,目的是为了方便开发大型的项目

2、使用蓝图

使用蓝图 3步走

app = Flask(__name__)
​
# 1、创建一个蓝图模板
main_blue = Blueprint("main", __name__)
​
​
# 2、 定义视图函数  使用蓝图配置路由
@main_blue.route("/")
def home():
    return "欢迎来到2050年"
​
​
@main_blue.route("/login")
def login():
    return "登录成功"


​
​
# 3、把蓝图 注册到 app上
app.register_blueprint(main_blue)
  • 结果 注册蓝图的时候 参数

我们可以 添加 url_prefix 添加一个路由前缀,这样子 这个蓝图上的所有路由都有了这个前缀。

三、Flask-RESTful

1、下载第三方模块
pip install flask-restful

2、怎么使用

flask-restful 引入了两个类 一个API类 一个是 Resource类

Resource类 用来定义视图类

API类 用来管理视图类

apps.book_blue

from flask_restful import Api, Resource
​
from flask import Blueprint, make_response, jsonify
​
book_blue = Blueprint("book", __name__)
​
api = Api(book_blue)
​
​
# 创建视图类
class Book(Resource):
    def get(self):
        resp = make_response("返回图书列表")
        return resp
​
    def post(self):
        return jsonify({"msg": "添加图书成功"})
​
​
# 把这个视图类  配置一个路由
api.add_resource(Book, "/books")

restful

from flask import Flask​

from apps.book_blue import book_blue
​
app = Flask(__name__)
​
#注册蓝图
app.register_blueprint(book_blue, url_prefix="/my")
​
if __name__ == "__main__":
    app.run()

结果 四、装饰器

case_装饰器
def checkInt(func):
    def inner(x,y):
        print("----函数执行前调用----")
        return func(x, y)
    return inner
​
@checkInt
def add(x, y):
    return x + y
​
@checkInt
def mulit(x, y):
    return x * y
​
print(add(3,10))
​
print(mulit(10, 20))

结果

 case_装饰器

def checkInt(func):
    def inner(x,y):
        if isinstance(x, (int, float)) and isinstance(y, (int, float)):
          return func(x, y)
        else:
            return "非数字不能相加"
    return inner
​
@checkInt
def add(x, y):
    return x + y
​
@checkInt
def mulit(x, y):
    return x * y
​
print(add(3,"a"))

结果

 例子1

from flask_restful import Api, Resource
​
from flask import Blueprint, make_response, jsonify
​
book_blue = Blueprint("book", __name__)
​
api = Api(book_blue)
​
​
def checkIsNone(func):
    def inner():
        resp = func()
        if resp.content_length > 0:
            return resp
        else:
            return make_response("内容为空")
​
    return inner
​
​
# 创建视图类
class Book(Resource):
​
    method_decorators = [checkIsNone]
​
    def get(self):
        resp = make_response("")
​
        return resp
​
    def post(self):
        return jsonify({"msg": "添加图书成功"})
​
​
# 把这个视图类  配置一个路由
api.add_resource(Book, "/books")

结果

 1、视图类添加

Flask-Restful 框架 定义的 Resource视图类中 都有一个属性

method_decorators,可以在这里方法里声明 多个装饰器

这样子,会作用在 每一个视图类中的方法上。

from flask_restful import Api, Resource
​
from flask import Blueprint, make_response, jsonify
​
book_blue = Blueprint("book", __name__)
​
api = Api(book_blue)
​
​
def checkIsNone(func):
    def inner():
        resp = func()
        if resp.content_length > 0:
            return resp
        else:
            return make_response("内容为空")
​
    return inner
​
​
def decorator2(func):
    def wrapper(*args, **kwargs):
        print('decorator2')
        return func(*args, **kwargs)
    return wrapper
​
​
# 创建视图类
class Book(Resource):
    method_decorators = [checkIsNone, decorator2]
​
    def get(self):
        resp = make_response("")
        return resp
​
    def post(self):
        return jsonify({"msg": "添加图书成功"})
​
# 把这个视图类  配置一个路由
api.add_resource(Book, "/books")

结果​​​​​​​

2、单方法添加

我们也可以给每一个函数,进行单独的添加

from flask_restful import Api, Resource
from flask import Blueprint, make_response, jsonify
book_blue = Blueprint("book", __name__)
api = Api(book_blue)
​
def checkIsNone(func):
    def inner():
        resp = func()
        if resp.content_length > 0:
            return resp
        else:
            return make_response("内容为空")
    return inner
​
def decorator2(func):
    def wrapper(*args, **kwargs):
        print('decorator2')
        return func(*args, **kwargs)
    return wrapper
​
​
# 创建视图类
class Book(Resource):
    method_decorators = {
        "get":[checkIsNone],
        "post":[decorator2]
    }
​
    def get(self):
        resp = make_response("")
        return resp
​
    def post(self):
        return jsonify({"msg": "添加图书成功"})
​
# 把这个视图类  配置一个路由
api.add_resource(Book, "/books")

结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350164.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号