Python轻量级Web框架Flask(11)——Flask内置对象简介/配置templates和static路径的方法

0、前言:

  • Flask内置对象中,request和session都是用于前后端数据交互的技术;g就是全局对象,通过g.x的方式就可以设置全局变量x,一般g用于views视图函数中;current_app就是Flask创建的应用对象。
  • template和static的位置不是固定在模板的App文件夹中的,可以改变其位置,但是修改了这两个文件夹的位置,就要在创建app时对默认配置进行修改。

1、Flask内置对象:

  • request:请求对象
  • session:会话对象
  • g:global全局对象
  • current_app:Flask应用对象,就是模板中在init当中创建的app
    在这里插入图片描述

2、内置对象的说明:

  • g:是全局对象,在某个视图函数中设置了,在其他视图函数中也可以调用,具体例子如下:
  • current_app:app配置信息,app对象获取
    假设使用配置好的Flask模板,在views文件中存在视图函数代码如下:
@blue.route('/')
@cache.cached(timeout=5)
def index():
    time.sleep(3)
    print(f'验证全局对象是否可以应用于其他视图函数:{g.a}')
    print(current_app) # <Flask 'App'>
    print(current_app.config) # <Config {'DEBUG': True, ...
    return '这是Flask内置对象验证代码'

@blue.before_request
def before():
    # Flask内置对象:request、session、g、current_app
    # g:全局对象
    # current_app:Flask应用对象
    g.a = 'huawei'

当运行上面代码,就会发现,虽然g.a的设置和调用不在同一个视图函数中,但是依然可以调用。可以发现current_app的确可以获取到init文件中创建的app


3、在init中配置templates和static的路径的方法(模板中本来使用的是默认配置路径,这里就是讲明白这个默认配置路径从哪改)

  • 配置templates和static路径是为了解决有多个app的情况,或者需要将static文件夹或templates文件夹移动到App文件夹外面的情况。
  • 修改templates和static路径是在创建app时完成的,所以要在init文件中,创建app时修改templates和static路径
  • 设置BASE_DIR的目的,是为了在下面代码中如果用相对路径的方法设置路径时,明确相对路径的基础路径。
    • os.path.dirname(): 表示当前文件所在的文件夹目录路径
    • os.path.abspath(__file __): 表示当前文件的绝对路径

在这里插入图片描述
templates和static在调用Flask创建app时本来就有默认配置,就是放在app文件夹里面,如果非要把这两个文件夹拿出来,那就要给他们配置路径。在上面的例子中,第18行少些了个template_folder的路径,写法和17行一样。

  • 实例验证:如下图所示为改变templates文件夹和static文件夹的项目概览,这个例子意在展示如何在init中修改template和static路径,后面有需求可以借鉴该方法。
    在这里插入图片描述
    views中代码如下:
# 在views.py中放路由和视图函数
import random
import time

from flask import Blueprint, render_template, request, session, g, current_app
from .models import * #后面是用views来控制数据库的,所以要在views中导入models文件
from .exts import cache

# 蓝图(蓝图可以有多个,方便对路径进行区分)
blue = Blueprint('user', __name__)

@blue.route('/')
@cache.cached(timeout=5)
def index():
    return '这是Flask验证修改static和template路径是否可行的项目'

@blue.route('/template/')
def template():
    return render_template('template.html')

init中代码如下:

# __init__.py : 初始化文件,创建Flask应用
from flask import Flask
from .views import blue
from .exts import init_exts

def creat_app():
    # 修改template和static路径
    static_folder = 'E:\code\learn_flask\learn_10_进阶\\app1\static'
    template_folder = 'E:\code\learn_flask\learn_10_进阶\\app1\\templates'

    app = Flask(__name__,static_folder=static_folder,template_folder=template_folder)

    # 注册蓝图(将views中的蓝图和对应app绑定,可能会存在有多个app的情况)
    # 蓝图就是为了便于模块化管理和拓展应用,蓝图会给每个url加上前缀
    app.register_blueprint(blueprint=blue)

    # 配置数据库(配置不同数据库软件,就要用不同配置,配置的目的,就是在用到数据库的时候让项目知道找什么数据库,去哪找数据库)
    db_uri = 'sqlite:///sqlite3.db'
    # db_uri = 'mysql+pymysql://root:123456@localhost:3306/more_table' # mysql的配置
    app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 禁止对象追踪修改(为了不浪费服务器资源进行的设置)

    # 初始化插件
    init_exts(app=app)

    return app

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值