flask使用装饰器


前言

为什么要用装饰器呢?在实际开发中会有这样的需求:有些视图只能给特定的权限的用户看,有些视图是需要登录的时候看,如果给每个视图一一设置,那么代码量会很大。使用装饰器就不同,只要设置好了,只要使用装饰器对对应的视图进行装饰就能实现上面的需求。


一、环境

python 3.7
flask 2.0.2

二、使用步骤

本篇博客接着上篇博客flask自定义错误页继续写代码,文件目录如下
在这里插入图片描述
想具体了解装饰器的可以看这篇博客装饰器decorator实现Django的访问和权限控制

1.创建装饰器

创建装饰器文件decorators.py

from flask import session, redirect, url_for
from functools import wraps


# 定义登录装饰器,判断用户是否登录
def decorator_login(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        # 判断session是否保存了用户名,保存了即该用户已登录
        name = session.get('name')
        if name:
            return func(*args, **kwargs)
        else:
            # 未登录重定向到登录页面
            return redirect(url_for('test.login'))
    return wrapper

2.使用

直接使用装饰器装饰对应视图函数即可

# 引入装饰器
from flask_teach.decorators import decorator_login
# 首页视图
@test_blue.route('/index')
@decorator_login
def index():
    return render_template('test/index.html', name=session.get('name'))

结果

先注释装饰器再访问首页
在这里插入图片描述
使用装饰器之后再访问首页
在这里插入图片描述
登录之后才能访问
在这里插入图片描述
大功告成!!!有什么问题欢迎在评论区留言。

下一篇:flask使用redis

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask框架可以与AJAX(异步JavaScript与XML)一起使用,以实现前端与后端的异步通信。在Flask使用AJAX可以通过发送HTTP请求来获取或提交数据,而无需刷新整个页面。 要在Flask使用AJAX,你可以按照以下步骤进行操作: 1. 在前端页面中引入jQuery库,以便使用其提供的AJAX方法。 2. 在前端页面中编写JavaScript代码,使用$.ajax()方法发送HTTP请求。你可以指定请求的类型(GET或POST)、URL和数据等参数。 3. 在Flask后端中定义相应的路由,用于处理AJAX请求。你可以使用Flask提供的装饰器(如@app.route)来定义路由,并编写相应的视图函数来处理请求。 4. 在视图函数中,你可以通过request对象获取前端发送的数据,并根据需要进行处理。然后,你可以使用Flask提供的方法(如jsonify)将处理结果返回给前端。 需要注意的是,Flask使用AJAX时,服务端往往并没有进行模板渲染,或者仅仅进行了部分渲染,这可能导致flash消息失效。因此,你可能需要手动实现自己的消息闪现,参照官方flash消息的实现方式。 总结起来,Flask使用AJAX的步骤包括引入jQuery库、编写前端JavaScript代码发送HTTP请求、在Flask后端定义路由和视图函数来处理请求,并在视图函数中返回处理结果给前端。 #### 引用[.reference_title] - *1* [flask ajax请求后flash方法(消息闪现)无效问题的解决方法](https://blog.csdn.net/weixin_39533052/article/details/119440267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [FLask框架AJAX操作](https://blog.csdn.net/weixin_52185313/article/details/122509405)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值