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上下文

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 "<h1>登录失败!</h1>"

结果

?

例子2

@app.route("/comment")
def do_comment():
 ? ?print("g.msg=", g.msg)
?
@app.route("/error")
def do_error():
 ? ?g.msg = "我是小兵张嘎"
 ? ?print(g.msg)
 ? ?return "<h1>我是小兵张嘎</h1>"

结果:结果:先执行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 "<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类

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("<h1>返回图书列表</h1>")
 ? ? ? ?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")

结果

  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:42 
 
开发: 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:50:27-

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