0


【问题记录】flask开发blog

在这里插入图片描述

文章目录


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

小知识点

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

问题

1. 文章标签显示错误

在“文章管理”界面,标签显示出来是:

<Tag tag1> <Tag tag2>

,但我其实只想要显示它的名称。Tag的模型如下:

classTag(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

,但开发文档中使用那些图标仍然无法显示,例如,我引入文件并使用“打开的锁”图标:

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

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

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

<linkhref="https://fonts.googleapis.com/icon?family=Material+Icons"rel="stylesheet"><iclass="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
defuser_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",line1,in<module>
    from RealProject import create_app
  File "D:\code_all\code_python\Web开发基础\flask_blog\RealProject\__init__.py",line5,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
defload_logged_in_user():# 每个请求之前都回去session中查看user_id来获取用户# 注册用户即非管理员用户允许登录后查看的url
    urls =['/auth/']

    user_id = session.get('user_id')if user_id isNone:
        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 =1elifnot g.user.is_super_user and g.user.is_active andnot 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的一路陪伴,期待下次不要再见。

标签: flask bug python

本文转载自: https://blog.csdn.net/m0_63238256/article/details/130504658
版权归原作者 清风莫追 所有, 如有侵权,请联系我们删除。

“【问题记录】flask开发blog”的评论:

还没有评论