码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Flask自定义装饰和g的使用


    1. 在commons.py文件中新增一个装饰器类: 注:一定要加入@wraps进行装饰否则,装饰器在给多个函数进行装饰时会报错
    1. from functools import wraps
    2. from flask import session, current_app, g
    3. # 定义登陆装饰器,封装用户的登陆数据
    4. def user_login_data(view_func):
    5. @wraps(view_func)
    6. def wrapper(*args, **kwargs):
    7. # 1,从sess1on中取出用户的user1d
    8. user_id = session.get("user_id")
    9. # 2通过user1d取出用户对象
    10. user = None
    11. if user_id:
    12. try:
    13. from info.models import User
    14. user = User.query.get(user_id)
    15. except Exception as e:
    16. current_app.logger.error(e)
    17. # 3.将u5er数据封装到g对象
    18. g.user = user
    19. return view_func(*args, **kwargs)
    20. return wrapper
    2.装饰器的使用
    1. from flask import current_app, jsonify, render_template, abort, session, g
    2. from . import news_blue
    3. from info import models
    4. from info.utils.response_code import RET
    5. from ...utils.commons import user_login_data
    6. @news_blue.route('/')
    7. ##########自定义装饰器#######################
    8. @user_login_data
    9. def news_detail(news_id):
    10. try:
    11. ############################原本的这里的功能被装饰器取代了#############
    12. # # 0,从session中获取到user_id,并根据user_id获取到用户信息
    13. # user_id = session.get('user_id')
    14. # user = models.User.query.get(user_id)
    15. # 1,根据新闻编号,查询新闻对象
    16. try:
    17. news = models.News.query.get(news_id)
    18. except Exception as e:
    19. current_app.logger.error(e)
    20. return jsonify(errno=RET.DBERR, errmsg="获取新闻失败")
    21. # 2. 如果新闻对象不存在直接抛出异常
    22. if not news:
    23. abort(404)
    24. # 获取前6条热点新闻
    25. click_news = models.News.query.order_by(models.News.clicks.desc()).limit(6)
    26. click_news_list = []
    27. for item in click_news:
    28. click_news_list.append(item.to_dict())
    29. # 2.携带数据,渲染页面
    30. data = {
    31. "news_info": news.to_dict(),
    32. #########这里的user直接从g中取出,如果使用装饰包裹时g中是没有user的#########
    33. "user_info": g.user.to_dict() if g.user else '',
    34. "news": click_news_list
    35. }
    36. except Exception as e:
    37. current_app.logger.error(e)
    38. return jsonify(errno=RET.UNKOWNERR, errmsg='未知错误!')
    39. return render_template("news/detail.html", data=data)

  • 相关阅读:
    前端面试前端性能优化篇
    Unrecognized option ‘stream_loop‘.(版本不匹配,利用make编译安装)
    跨域解决方案
    < 今日份知识点:浅述对 “ Vue 插槽 (slot) ” 的理解 以及 插槽的应用场景 >
    26 行为型模式-命令模式
    国外打工人分享如何如何通过销售excel电子表格赚到 28 万美元
    HTTP之Hop-by-hop首部
    超高并发下,Redis热点数据风险破解
    微软开源了一个 助力开发LLM 加持的应用的 工具包 semantic-kernel
    3年测试经验,面试27k自动化测试岗被diss,想给进阶自动化的人提个醒...
  • 原文地址:https://blog.csdn.net/qq_44906497/article/details/133907592
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号