【问题记录】flask开发blog

news/2024/10/30 9:34:16/

在这里插入图片描述

文章目录

  • 小知识点
  • 问题
    • 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_appFile "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来获取用户# 注册用户即非管理员用户允许登录后查看的urlurls = ['/auth/']user_id = session.get('user_id')if user_id is None:g.user = Noneelse: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 = 1elif 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 = 1else: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的一路陪伴,期待下次不要再见。


http://www.ppmy.cn/news/84207.html

相关文章

水处理计算常用表格大全

第二章 设计方案城市污水处理厂的设计规模与进入处理厂的污水水质和水量有关&#xff0c;污水的水质和水量可以通过设计任务书的原始资料计算。2.1 厂址选择在污水处理厂设计中&#xff0c;选定厂址是一个重要的环节&#xff0c;处理广的位置对周围环境卫生、基建投资及运行管理…

当互联网的红利不再,更多人开始寻找新的发展方式和方法

当互联网的红利不再&#xff0c;玩家们开始寻找新的发展方式和方法。无论是头部的玩家&#xff0c;还是新入局的玩家&#xff0c;几乎都是如此。   在这个过程中&#xff0c;有人将目光聚焦在了新技术的身上&#xff0c;有人将目光聚焦在了新模式的身上&#xff0c;有人则是将…

Py06·爬虫

Py06爬虫 pyhon3爬虫filddler抓包工具robots.txt 文件Sitemap.xml 文件反爬虫爬虫测试 pyhon3爬虫 1.缺点&#xff1a;解释性语言&#xff1b;执行效率低 2.优点&#xff1a;网络接口简单医用&#xff1a;系统自带urllib&#xff0c;第三方requets都很简单数据解析容易&#x…

使用RSD从DEM数据创建用户高程数据层

李国春 SRTM90和Aster DEM的V2/V3是比较常用的免费共享高程数据。用户下载好以后应用到自己的项目时&#xff0c;经常会需要进行拼接合成和投影重采样等。RSD提供了一种创建自己项目的高程数据的方法。 一. 高程图像生成方法 在自己的项目中&#xff0c;选择图1的菜单。 图1…

项目压测相关

几个重要指标的关系 QPS 并发数/平均响应时间 并发数 QPS*平均响应时间 也就是说&#xff0c;并发连接数代表服务器抗压能力&#xff0c;接收连接的能力。qps代表在相同的并发数下&#xff0c;服务器处理的速度&#xff0c;响应时间越短&#xff0c;那么qps就越大。 不是说并发…

结构体总结

目录 1.普通结构体 2.定义结构体并同时建立变量 3.匿名结构体 4.typedef重命名 5.typedef省略结构体名字 6.结构体数组 7.结构体指针 8.结构体嵌套 9.结构体链表&#xff08;头插法&#xff09; 10.结构体中的函数指针 11.结构体的构造函数和初始化列表 1.普通结构体 stru…

小白入门SRC漏洞挖掘的正确姿势

前言 有不少阅读过我文章的伙伴都知道&#xff0c;我从事网络安全行业已经好几年&#xff0c;积累了丰富的经验和技能。在这段时间里&#xff0c;我参与了多个实际项目的规划和实施&#xff0c;成功防范了各种网络攻击和漏洞利用&#xff0c;提高了安全防护水平。 也有很多小…

Linux:Firewalld防火墙

Linux&#xff1a;Firewalld防火墙 一、Firewanlld防火墙概述二、Firewalld和Iptables的关系三、Firewalld网络区域3.1 Firewalld 区域的概念&#xff1a;3.2 firewalld防火墙预定义了9个区域3.3 firewalld数据处理流程 四、Firewalld防火墙的配置方法五、Firewalld-config图形…