【问题记录】flask开发blog

在这里插入图片描述

文章目录

  • 小知识点
  • 问题
    • 1. 文章标签显示错误
    • 2. 文章状态无法回显(open)
    • 3. 用户管理页面,图标无法显示
    • 4. BuildError
    • 5. 用户管理添加用户,使用重复的用户名会报错(open)
    • 6. 添加用户,不上传头像会报错(open)
    • 7. 部分标签删除时报错:OperationalError (open)
    • 8. 使用命令运行时报错:ModuleNotFoundError (open)
    • 9. 在管理后台删除自己时报错:AttributeError
    • 10. 在set设置环境变量时没有效果


学习教程:Flask从零博客开发实战-b站

小知识点

  1. host=0.0.0.0表示可以在所有端口上
  2. 工厂函数:不直接实例化Flask类,而是在一个函数内创建它,应用程序的配置在函数内部进行。

问题

1. 文章标签显示错误

在“文章管理”界面,标签显示出来是: <Tag tag1> <Tag tag2>,但我其实只想要显示它的名称。Tag的模型如下:

class Tag(BaseModel):
    '''文章标签'''
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), nullable=False, unique=True)

    def __repr__(self) -> str:
        return '<Tag %s>' % self.name

再html中的显示方法如下

<td>{{ post.tags | join(',') }}</td>

想要正确显示为tag1 tag2,有两种修改方法:

1、修改Tag模型的__repr__方法

def __repr__(self) -> str:
        return '%s' % self.name

2、修改html中的显示相关代码

<td>
	{% for tag in post.tags %}
		{{ tag.name }}
	{% endfor %)
</td>

通过这次问题,我也加深了对应flask的jinjia2模板引擎的理解。

2. 文章状态无法回显(open)

问题描述:文章状态(has_type)无法正确回显,始终锁定发布(show)状态

3. 用户管理页面,图标无法显示

问题描述:我在Templarian/MaterialDesign-Webfont下载了文件materialdesignicons.min.css,但开发文档中使用那些图标仍然无法显示,例如,我引入文件并使用“打开的锁”图标:

<link rel="stylesheet" href="{{ url_for('blog.static', filename='css/materialdesignicons.min.css') }}">
<i class="mdi mdi-lock-open-variant-outline"></i>

图标只会显示一个空心的矩形框。

于是我改用了直接从Google CDN提供的地址引入,并使用图标:

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<i class="material-icons">lock_open</i>

然后就可以显示了。我并没有多少前端相关的知识,摸石头过河可真折磨人。

4. BuildError

错误信息

werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'admin.user_add'. Did you mean 'admin.user' instead?

发现蓝图掉了一个@,很低级,但代价很大的错误。错误示例:

# 用户 --> 添加用户
bp.route('/user/add', methods=['GET', 'POST'])
@login_required
def user_add():
    return 'hello'

5. 用户管理添加用户,使用重复的用户名会报错(open)

IntegrityError
sqlalchemy.exc.IntegrityError: (MySQLdb.IntegrityError) (1062, "Duplicate entry 'abcd' for key 'user.username'")
[SQL: INSERT INTO user (username, password, avatar, is_super_user, is_active, is_staff, add_date, pub_date) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)]
[parameters: ('abcd', 'pbkdf2:sha256:260000$3mziwoJuQ4bmCI4h$cd753b17e6daaf3719ef49bfe6b4ecfb067e8a769d321d8046979913855f373c', 'avatar/c2377e45fe0847e5af561960b4c360cd.png', 0, 1, 0, datetime.datetime(2023, 3, 6, 13, 21, 27, 696086), datetime.datetime(2023, 3, 6, 13, 2

6. 添加用户,不上传头像会报错(open)

AttributeError
AttributeError: 'NoneType' object has no attribute 'filename'

7. 部分标签删除时报错:OperationalError (open)

OperationalError
sqlalchemy.exc.OperationalError: (MySQLdb.OperationalError) (1048, "Column 'category_id' cannot be null")
[SQL: UPDATE post SET category_id=%s, pub_date=%s WHERE post.id = %s]
[parameters: (None, datetime.datetime(2023, 3, 7, 12, 42, 28, 110165), 5)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

8. 使用命令运行时报错:ModuleNotFoundError (open)

(flask_blog) PS D:\code_all\code_python\Web开发基础\flask_blog> py manage.py
Traceback (most recent call last):
  File "manage.py", line 1, in <module>
    from RealProject import create_app
  File "D:\code_all\code_python\Web开发基础\flask_blog\RealProject\__init__.py", line 5, in <module>
    from flask_sqlalchemy import SQLAlchemy
ModuleNotFoundError: No module named 'flask_sqlalchemy'

9. 在管理后台删除自己时报错:AttributeError

AttributeError: 'NoneType' object has no attribute 'is_super_user'

而且网页刷新、返回或者重启后台程序也没用,会卡在这个报错这里。

发现问题出在”获取用户信息“这里,user_id还在,使用print在后台可以打印出

user_id: 7

但删除后数据库中已经没有这个用户了,g.user是None,然后再调用g.user的属性时,比如g.user.is_super_user,就报错了。

# 获取用户信息
@bp.before_app_request
def load_logged_in_user():
    # 每个请求之前都回去session中查看user_id来获取用户

    # 注册用户即非管理员用户允许登录后查看的url
    urls = ['/auth/']

    user_id = session.get('user_id')
    if user_id is None:
        g.user = None
    else:
        g.user = User.query.get(int(user_id))
        print("user_id: ", user_id)
        print("g.user: ", g.user)

        # 权限判断 --> 没太看懂这一块的逻辑?
        if g.user.is_super_user and g.user.is_active:
            g.user.has_perm = 1
        elif not g.user.is_super_user and g.user.is_active and not g.user.is_staff and request.path in urls:
            g.user.has_perm = 1
        else:
            g.user.has_perm = 0

解决方案:在代码load_logged_in_user()中插入user_id = None,重启后台,然后删掉这一句再重启即可。

10. 在set设置环境变量时没有效果

set FLASK_APP=RealProject
set FLASK_ENV=development
echo %FLASK_APP%

我起初在vscode的终端进行操作,后来换到了windows自带的cmd,就可以了。


感谢bug的一路陪伴,期待下次不要再见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/17289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA springboot创业实践学分管理系统idea开发mysql数据库web结构计算机java编程MVC

一、源码特点 idea springboot创业实践学分管理系统是一套完善的web设计系统mysql数据库MVC模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式 开发。 JAVA springboot创业实践学分管理系统ide…

Ubuntu搜狗输入法安装指南

Ubuntu搜狗输入法安装指南 Ubuntu搜狗输入法安装指南搜狗输入法已支持Ubuntu1604、1804、1910、2004、2010Ubuntu20.04及以上安装搜狗输入法步骤 Ubuntu搜狗输入法安装指南 下载地址&#xff1a;https://shurufa.sogou.com/ 计算为amd64的选择x86_64&#xff0c;以下教程来源…

2023Java商城毕业设计(附源码和数据库文件下载链接)Spring Boot + mysql + maven + mybatis-plus

2023Java商城毕业设计Spring Boot mysql maven mybatis-plus 用户注册用户登录修改密码商品列表&#xff08;分类模糊查询&#xff09;个人信息用户信息修改订单信息添加至购物车商品列表商铺详情商品详情商铺列表 资源目录如下&#xff1a;&#xff08;源码sql文件&#xf…

Linux入门2(常用命令)

Linux入门2 Linux常用命令快捷键基础命令文件查看命令文件编辑命令进程管理命令用户管理命令 Linux常用命令 快捷键 Ctrl Alt T打开终端 Ctrl shift 加号 终端字体放大 ctrl 减号 终端字体缩小 基础命令 sudo su 进入管理员目录 exit 返回到用户目录 ls 当前目录下的文…

Illustrator如何使用基础功能?

文章目录 0.引言1.菜单栏2.工具箱 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对Illustrator进行了学习&#xff0c;本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对软件界面基本功能进行阐述。    1…

K8s 安全是云安全的未来

导语 到 2025 年&#xff0c;保护 Kubernetes (K8s) 将被认为是云安全最重要的方面。 在最成功的组织中&#xff0c;CTO 和 CISO 已经意识到 Kubernetes 安全的重要性。 但是&#xff0c;虽然 Kubernetes 已经占 CTO 云支出的很大一部分&#xff0c;但 CISO 仍然有所落后。 大…

Android Studio开发图书管理系统APP

Android Studio开发项目图书管理系统项目视频展示&#xff1a; 点击进入图书管理系统项目视频 引 言 现在是一个信息高度发达的时代&#xff0c;伴随着科技的进步&#xff0c;文化的汲取&#xff0c;人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴…

asp.net基于web的学生选课成绩管理系统86程序

系统使用Visual studio.net2010作为系统开发环境&#xff0c;并采用ASP.NET技术&#xff0c;使用C#语言&#xff0c;以SQL Server为后台数据库。 本系统主要包含了“登录模块”、“系统用户管理模块”、“课程信息管理模块”、“教师信息管理模块”、“班级信息管理模块”、“…

Lattics ——一款简单易用、好看强大的知识管理工具

如何选择一款适合自己的知识管理工具&#xff1f; 对于很多用户而言&#xff0c;在追求效率的路上&#xff0c;经常需要一款适合自己的知识管理工具。然而&#xff0c;随着工具市场的发展&#xff0c;各种新兴工具层出不穷。在传统领域&#xff0c;有印象笔记、Onenote 为代表…

【笔试强训选择题】Day7.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

如何充分利用实时聊天系统?

随着商业和电子商务领域经历快速的数字革命&#xff0c;必须迅速适应的一个因素是我们与客户的互动方式。几年前&#xff0c;电子邮件和电话还是主要的客户联系方式。如今&#xff0c;客户期望更好的服务和更即时的沟通。实时聊天支持系统可以解决此问题&#xff0c;如SaleSmar…

IntelliNode:Node.js大模型访问统一接口库【Gen AI】

使用最新的 AI 模型更新你的应用程序可能具有挑战性&#xff0c;因为它涉及了解不同 AI 模型的复杂性并管理许多依赖项。 IntelliNode 是一个开源库&#xff0c;旨在通过提供统一且易于使用的界面来解决集成 AI 模型的挑战。 这使开发人员能够快速构建 AI 原型并使用高级 AI 功…

CompletableFuture

线程基础知识复习 大神&#xff1a;Doug Lea java.util.concurrent java.util.concurrent.aomic Java.util.concurrent.locks 硬件 摩尔定律&#xff1a; 它是由英特尔创始人之一 Gordon Moore(戈登摩尔)提出来的。其内容&#xff1a; 当价格不变是&#xff0c;集成电路…

python相对路径与绝对路径

9.1 Python 绝对路径与相对路径 - 知乎 (zhihu.com) 目录 1. 绝对路径 1.1 概念 1.2 用绝对路径打开文件 1.2 相对路径 1.3 python路径表示的斜杠问题 1. 绝对路径 1.1 概念 绝对路径 指完整的描述文件位置的路径。绝对路径就是文件或文件夹在硬盘上的完整路径。 在 Win…

Java 基础入门篇(二)—— Java 基础语法

文章目录 一、注释二、字面量三、变量3.1 变量概述3.2 变量在计算机中的底层原理 四、数据类型五、关键字、标志符六、类型转换6.1 自动类型转换6.2 表达式的自动类型转换6.3 强制类型转换 七、运算符7.1 基本算数运算符7.2 符号做连接符7.3 自增自减运算符7.4 赋值运算符7.5 …

基于simulink采用 QSHB 和 HBPS 算法的混合 MIMO 波束成形仿真

一、前言 本例展示了多输入多输出 &#xff08;MIMO&#xff09; 无线通信系统的 Simulink 模型。无线系统使用混合波束成形技术来提高系统吞吐量。 二、介绍 5G和其他现代无线通信系统广泛使用MIMO波束成形技术进行信噪比&#xff08;SNR&#xff09;增强和空间复用&#xff0…

Netty(2)

Netty 文章目录 Netty4 Netty 模型4.1 Netty 模型介绍4.2 Netty demo4.3 Netty 异步模型4.3.1 基本介绍4.3.2 异步模型4.3.3 Future-Listener 机制4.4 Netty 任务队列 task 4 Netty 模型 4.1 Netty 模型介绍 Netty 线程模式&#xff1a;Netty 主要基于主从 Reactor 多线程模型…

开放式基金净值估算数据 API 数据接口

开放式基金净值估算数据 API 数据接口 全量基金数据&#xff0c;实时数据&#xff0c;所有基金数据。 1. 产品功能 返回实时开放式基金净值估值可定义所有基金估值数据&#xff1b;多个基金属性值返回&#xff1b;多维指标&#xff0c;一次查询毫秒级返回&#xff1b;数据持续…

全球5G市场最新进展及未来展望

从智慧医疗到万物互联&#xff0c;从无人驾驶到关乎我国未来发展的“新基建”&#xff0c;自2019年全球5G商用启动后&#xff0c;5G就步入了发展“快车道”;2022年继续保持快速稳定的增长态势&#xff0c;在网络建设、人口覆盖、终端形态等方面发展势头强劲&#xff0c;在技术标…

【致敬未来的攻城狮计划】— 连续打卡第二十三天:RA2E1的存储器基础知识

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…