首页 > 其他分享 >flask项目结构参考与g对象

flask项目结构参考与g对象

时间:2023-04-04 15:56:58浏览次数:28  
标签:__ py 参考 flask app 蓝图 对象 order

flask项目结构参考与g对象

flask本身是一个轻量化的框架,如果选择flask做项目,大部分时候,可能并不是打算运行特别庞大的项目,因此flask项目的结构并没有特别统一的规范,这篇文章仅作参考。

flask蓝图

蓝图——blueprint

蓝图的基本使用

from flask import Flask, Blueprint

app = Flask(__name__)

order_bp = Blueprint('order', __name__)


@order_bp.route('/')
def index1():
    return 'ooo'


app.register_blueprint(order_bp)

上述代码中,蓝图的注册方式与使用方法和app类似,最终再将这个蓝图注册到app中,app这个flask对象就也可以访问到蓝图所注册的路由了。

那么我们为什么要使用蓝图呢?

是为了分模块所准备的,我们可以导入app使用app注册路由等操作,但是如果有很多文件要导入app最终app又需要在某一个文件下run起来,这个问题就变的棘手了,很有可能导致循环导入问题。

所以我们在需要使用app功能的文件下先注册蓝图,让蓝图代app执行它的功能,最终再将蓝图注册到app中,让app统一启动即可。

多py文件flask项目

##### app_start.py
from flask import Flask
from order import order_bp
from home import home_bp

app = Flask(__name__)
app.register_blueprint(order_bp)

if __name__ == '__main__':
    app.run()
    
##### order.py
from flask import Blueprint

order_bp = Blueprint('order', __name__,url_prefix='order')  # 可以使用url_prefix加此蓝图注册的路由前缀

@order_bp.before_request
def before():
    print('请求来了')

@order_bp.route('/')
def index1():
    return 'order'

##### home.py
from flask import Blueprint

home_bp = Blueprint('home', __name__,url_prefix='home')

@home_bp.route('/')
def index():
    return 'home'

上述代码分为了三个py文件,在编写其中一个py文件时,不需要考虑其他py文件的执行顺序。

两个蓝图文件中,只需要注册一个蓝图对象,然后当做app使用即可

总启动文件则需要将其他文件中的蓝图对象导入并注册蓝图,然后app中就包囊了这些蓝图所有的功能,此时app.run()即可启动flask项目。

flask项目目录参考

flask小项目

涉及前后端混合的项目可能会需要templates和static目录

-项目文件夹
    -src							 # 核心代码
    	-(static)						# 静态文件
        -(templates)				# 模板文件
        __init__.py					   # src包
            ↑产生flask的app,并注册蓝图
        -views							# 视图文件夹
        	v1.py						 # 视图文件1
        	v2.py						 # 视图文件2        
        models.py					 # 表模型
    manage.py						# 启动文件
    	↑导入src中的app,run

flask稍微大一点的项目

-项目文件夹
    -src    							 # 核心代码
    	__init__.py					   # src包
        	↑产生flask的app,并注册蓝图
    	-app1							# 每个app有自己的表模型、视图、静态文件等
            __init__.py					   # src包
                ↑产生app1的蓝图,并注册子蓝图
            -(static)						# 静态文件
            -(templates)				# 模板文件
            -views							# 视图文件夹
                v1.py						 # 视图文件1
                v2.py						 # 视图文件2        
            models.py					 # 表模型
            befores.py					  # 请求来时的函数可以统一在这
            afters.py						# 响应走时
        -app2
        -app。。
    manage.py						# 启动文件
    	↑导入src中的app,run

子蓝图

上文中提到蓝图拥有flask几乎所有的方法,实际上它也有注册蓝图的方法,所以我们可以让一个蓝图A去注册另一个蓝图B,这样就可以称蓝图B是蓝图A的子蓝图。

这里的子蓝图是笔者自己起的名字,只是方便理解项目层级中的蓝图关系。我们可以在视图中先产生视图子蓝图,最终再app1的__init__中将其归总到app1蓝图中,所有的app级别蓝图最终又归总到src的flask对象app中。

g对象

g对象的作用

g对象实际为global的意思,它表示本次请求的全局变量,注意与直接在文件的顶格书写的全局变量相比,它的全局范围更小只作用于每次请求,而顶格书写所定义的全局变量是项目一启动就在本文件的全局共享的。

g对象可以作为上下文管理的变量, 如我在befores中请求处理函数中产生了一个xx值,存入了g的g.xx中,那么在views视图函数中我就可以用g.xx的值拿到xx值。而这两个函数甚至是不同的py文件中执行的。

g对象与request对象一样都可以全局直接导入使用表示本次请求可用的变量,那为什么不直接使用request对象呢?因为g是纯净的空对象,与request区分可以避免污染request的变量。

g对象和session对象有何不同?g对象只有本次请求有效,session对象是多次请求都有效(将内容存到了cookie中,下次携带过来处理成session已达到多次请求的变量延续)

g的基本使用

from flask import Flask, g, request

app = Flask(__name__)
app.debug = True

@app.before_request
def before():
    g.xx = 'xx'   # 存值

@app.route('/')
def index():
    print(g.xx)  # 查值
    return '..'

标签:__,py,参考,flask,app,蓝图,对象,order
From: https://www.cnblogs.com/Leethon-lizhilog/p/17286690.html

相关文章

  • 1 蓝图的使用 、2 g对象 、3 数据库连接池
    目录1蓝图的使用2g对象3数据库连接池1蓝图的使用#blueprint翻译过来的,称之为蓝图#作用是:之前全在一个py中写flask项目,后期肯定要划分目录#不用蓝图,划分目录 no_blueprint_flask#项目名src#核心源码位置__init__.py#包里......
  • 蓝图,g对象,数据库链接池
    flask蓝图使用blueprint翻译后称之为蓝图。作用是:用来划分目录​ 之前写项目的时候全在一个py文件内写flask项目。需要使用蓝图来划分目录。小型项目与大型目录都可以蓝图使用1导入蓝图类业务视图里fromflaskimportBlueprint2实例化得到蓝图对象业务视图里u......
  • Flask 框架
    Flask和pythonweb框架介绍#pythonweb框架,本质其实都是一样的--django:大而全,它自身自带着很多的内置app,提供了很多的方法,第三方的app也很多--flask:小而精,没有过多的内置组件,只能完成web框架最基本的功能,需要借助于第三方,完成更加丰富的功能--web:是一个小巧的python框......
  • flask,mysql实现用户登录注册注销改密
    flask.py文件fromflaskimportFlask,render_template,request,redirect,url_for,flash,sessionfromflask_mysqldbimportMySQLimportbcryptapp=Flask(__name__)app.secret_key="secret"#MySQLconfigurationsapp.config['MYSQL_HOST'......
  • List集合之元素和对象去重
    目录1List元素去重1.1移除List中指定某一元素1.1.1For循环移除1.1.1.1For移除不彻底问题1.1.1.2用i--解决问题1.1.1.3倒序遍历移除元素1.1.2ForEach移除1.1.2.1ConcurrentModificationException异常1.1.2.2iterator遍历1.2移除List中重复元素1.2.1ForEach添加去重1.2......
  • 【服务器】Cloudreve绑定七牛云免费对象存储
    一、七牛云注册1、注册账号:https://portal.qiniu.com/signup?code=1hate2niuffbm2、完成实名认证3、创建对象存储4、绑定域名二、Cloudreve创建策略1、添加策略2、添加用户和用户组三、完成上传1、cloudreve界面2、管理页面3、七牛页面四、关于错误......
  • 订单数据参考
    {"status":0,"msg":"订单详情","data":{"order":{"id":34,"userId":12,"orderNum":1519573542074,"......
  • flask,cbv分析,模板,请求与响应,session及源码分析,闪现,请求扩展
    内容回顾web框架同步框架django:大而全,有很多内置的app,还有很多第三方appflask:小而精异步框架santic:异步faskapi异步flask框架wsgirefwerkzeug登录小案例注册路由app.router(路径,methods=[请求方式])新手四件套render_template渲染模板根django有区别redirec......
  • Flask学习笔记(2)--最简单的小应用
    Flask学习笔记(2)--最简单的小应用 新建一个flask项目,第一个小程序,我们来看一下fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world():return'HelloWorld!'if__name__=='__main__':app.run() 1、引入flask类2、将Flask对象......
  • Flask 学习笔记(1)--环境安装
    Flask学习笔记(1)--环境安装Flask官网:http://flask.pocoo.org/Flask文档:http://docs.jinkan.org/docs/flask/0x01安装方式A、第一种安装步骤很简单,就是这个样子安装python安装flaskpipinstallflaskB、第二种:虚拟环境D:\test>pipinstallvirtualenv#安装vir......