IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 大型项目结构与蓝图 -> 正文阅读

[Python知识库]大型项目结构与蓝图

一、Flask上下文

# Flask上下文
上下文:即语境,语意,在程序中可以理解为在代码执行到某一时刻时,根据之前代码所做的操作以及下文即将要执行的逻辑,可以决定在当前时刻下可以使用到的变量,或者可以完成的事情
Flask上下文对象分类:
? ? (1).请求上下文:
? ? ? ? 1).request
? ? ? ? 2).session
? ? (2).应用上下文:
? ? ? ? 1).current_app
? ? ? ? 2).g对象

1、请求上下文

request
?
session

2、应用上下文

current_app 代表当前app ? app可以完成跨视图函数访问
?
g ? 全局的变量 ? 但是不能跨视图函数访问

2.应用上下文: current_app与g对象
# current_app对象:
?? ?current_app事实上是Flask实例的代理, 由于一个项目只能有一个app实例, 在其他地方使用app需要导入, 不方便使用, current_app就是APP的全局代理. 在代码不方便操作flask的APP对象时, 可以操作current_app就等价于操作APP实例.
? ? current_app用于存储应用程序中的变量:
? ? ? ? - 应用的启动脚本是哪个文件, 启动时指定了哪些参数
? ? ? ? - 加载了哪些配置文件, 导入了哪些配置
? ? ? ? - 连接了哪个数据库
? ? ? ? - 有哪些public的工具类, 常量
? ? ? ? - 应用跑在哪个机器上, IP是多少,内存多大等等信息
# g对象
?? ?g对象作为flask程序全局的一个临时变量, 充当中间媒介的作用, 我们可以通过它在一次请求调用的多个函数间传递一些数据, 相当与一个共享的数据容器, 每次请求都会重设这个变量.
? ??
# g对象实例
from flask import Flask, g

app = Flask(__name__)

def db_query():
? ? user_id = g.user_id
? ? user_name = g.user_name
? ? print('user_id={} user_name={}'.format(user_id, user_name))

@app.route('/')
def get_user_profile():
? ? g.user_id = 131
? ? g.user_name = 'Jeremy'
? ? db_query()
? ? return 'hello world'

二、蓝图

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 "<h1>欢迎来到2050年</h1>"
?
?
@main_blue.route("/login")
def login():
 ?  return "<h1>登录成功</h1>"
?
?
# 3、把蓝图 注册到 app上
app.register_blueprint(main_blue)

  • 注册蓝图的时候 参数

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

三、Flask-RESTful

1、下载第三方模块

pip install flask-restful

2、怎么使用

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

# 简单接口的实现
from flask import Flask
# 1.导入Api, Resource
from flask_restful import Api, Resource

app = Flask(__name__)
# 2.创建api对象
api = Api(app)


# 3.自定义类视图, 必须继承于Resource
class IndexResource(Resource):
? ? # 4.在视图类中定义请求方法
? ? def get(self):
? ? ? ? # 返回响应
? ? ? ? return 'first restful api'


# 5.使用api对象的add_resource()添加路由
?? ?# IndexResource是视图
? ? # '/index'是路由
? ? # endpoint是路由别名
api.add_resource(IndexResource, '/index', endpoint='index')


# 程序入口
if __name__ == '__main__':
? ? app.run(debug=True)

Resource类 用来定义视图类

API类 用来管理视图类

# Flask-RESTful配合蓝图:
1.创建蓝图文件, 编写蓝图代码:
? ? - 创建蓝图对象
? ? - 创建蓝图api接口对象
? ? - 编写蓝图的视图类
? ? - 给蓝图视图添加路由
2.创建主程序, 编写主程序代码:
? ? - 导入蓝图对象, 用于后续的注册
? ? - 创建Flask实例对象
? ? - 创建Flask实例的api对象
? ? - 注册蓝图
? ? - 程序入口
# 注: 简单实用, 将蓝图集中化与apps目录下统一管理, demo目录就够如下图:

# users_bp.py: 蓝图编码
from flask import Blueprint
from flask_restful import Api, Resource

# 创建蓝图对象
users_bp = Blueprint('users', __name__)
# 创建接口api对象
api = Api(users_bp)

# 创建蓝图视图
class IndexResource(Resource):
? ? def get(self):
? ? ? ? return 'users_bp.api'

# 添加蓝图路由
api.add_resource(IndexResource, '/index', endpoint='index')

# 主程序编码
from flask import Flask
from flask_restful import Api, Resource
# 导入蓝图
from apps.users_bp import users_bp

app = Flask(__name__)
api = Api(app)
# 注册蓝图
app.register_blueprint(users_bp)

if __name__ == '__main__':
? ? # 查看路由映射
? ? print(app.url_map)
? ? app.run()

四、装饰器

1、视图类添加

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

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

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

method_decorators = [checkIsNone, decorator2]

2、单方法添加

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

 ?  method_decorators = {
 ? ? ?  "get": [checkIsNone],
 ? ? ?  "post": [decorator2]
 ?  }

# 给视图类中的所有方法加装饰器
def decorator1(func):
? ? ? def wrapper(*args, **kwargs):
? ? ? ? ? print('decorator1')
? ? ? ? ? return func(*args, **kwargs)
? ? ? return wrapper


def decorator2(func):
? ? def wrapper(*args, **kwargs):
? ? ? ? print('decorator2')
? ? ? ? return func(*args, **kwargs)
? ? return wrapper


class DemoResource(Resource):
? ? method_decorators = [decorator1, decorator2]

? ? def get(self):
? ? ? ? return {'msg': 'get view'}

? ? def post(self):
? ? ? ? return {'msg': 'post view'}

# 指定方法加指定装饰器
class DemoResource(Resource):
? ? ? method_decorators = {
? ? ? ? ? 'get': [decorator1, decorator2],
? ? ? ? ? 'post': [decorator1]
? ? ? }

? ? ? # 使用了decorator1 decorator2两个装饰器
? ? ? def get(self):
? ? ? ? ? return {'msg': 'get view'}

? ? ? # 使用了decorator1 装饰器
? ? ? def post(self):
? ? ? ? ? return {'msg': 'post view'}

? ? ? # 未使用装饰器
? ? ? def put(self):
? ? ? ? ? return {'msg': 'put view'}

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:20:59  更:2021-10-28 12:21:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:43:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码