【问题记录】flask开发blog

news2024/10/5 23:26:34

在这里插入图片描述

文章目录

  • 小知识点
  • 问题
    • 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的一路陪伴,期待下次不要再见。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式 Template Method Pattern(Inheritance) vs Strategy Pattern(Delegation)

Template Method Pattern 和 Strategy Pattern 是两种常用的行为设计模式。他们分别用了继承inheritance和委托delegation两种不同的实现方法&#xff0c;因为上篇文章讲过了UML图&#xff0c;所以这篇顺便可以把两种不同模式的UML图都带出来一起说明。 Template Method Patte…

Mybatis的PageHepler用法

分页原理 分页在使用时的分类 物理分页: 在操作数据库中的表时,sql语句中使用了limit ?,?,此时sql语句返回的结果是分页结果 逻辑分页: 依赖程序的代码,其原理为:通过sql语句将数据库表中的所有数据都查询出,之后将数据保存在内存中,最终要显示的数据若涉及到分页,到内存中…

Java企业级信息系统开发01—采用spring配置文件管理bean

文章目录 一、Web开发技术二、spring框架&#xff08;一&#xff09;spring官网&#xff08;二&#xff09;spring框架优点&#xff08;三&#xff09;Spring框架核心概念1、IoC&#xff08;Inversion of Control&#xff09;和容器2、AOP&#xff08;Aspect-Oriented Programm…

Golang 包使用注意事项

1&#xff09;在给一个文件打包时&#xff0c;该包对应一个文件夹&#xff0c;比如这里的utils文件夹对应的包名就是utils&#xff0c;文件的包名通常和文件所在的文件夹名一致&#xff0c;一般为小写字母。 2&#xff09;当一个文件要使用其它包函数或变量时&#xff0c;需要…

【AI聊天 | GPT4教学】 —— 微软 New Bing GPT4 申请与使用保姆级教程(免魔法)

目录 认识 New Bing 1. 下载 Microsoft Edge 浏览器 2. 注册并登录 Microsoft 账号 3. 如何免科学上网使用 New Bing&#xff1f; 4. 加入 WaitList 候补名单 5. 使用 New Bing&#xff01; 6. 使用 Skype 免科学上网访问 New Bing&#xff01; 7. 在 Chrome 浏览器中使…

gpt人工智能详细介绍

chatgpt人工智能怎么下载 OpenAI ChatGPT不是一款普通的软件&#xff0c;它是由OpenAI开发的一款基于人工智能技术的自然语言生成器。因此&#xff0c;它并不需要像普通软件一样下载和安装在您的计算机上。 作为一个云端服务&#xff0c;OpenAI ChatGPT可以通过您的浏览器直接…

HBASE入门 基本shell命令(一)

一、登录连接shell $HBASE_HOME/bin/hbase shell二、基本命令 2.1help命令 help创建命名空间 create_namespace bigdata;查看命名空间 list_namespace命名空间default和habase是系统自带的 三、DDL 3.1创建表 create bigdata:student, {NAME > name, VERSIONS> 5}…

每日学术速递5.6

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.AG3D: Learning to Generate 3D Avatars from 2D Image Collections 标题&#xff1a;AG3D&#xff1a;学习从 2D 图像集合生成 3D 头像 作者&#xff1a;Zijian Dong, Xu Chen, …

Amper Music:AI创意音乐工具

【产品介绍】 Amper Music 是一家位于美国纽约的人工智能音乐技术公司&#xff0c;成立于2014年。 Amper Music是一个AI创意音乐工具&#xff0c;能让任何人为自己的内容制作原创音乐。无论你需要为视频、播客或互动内容配乐&#xff0c;Amper Music都能提供一个简单而强大的解…

【PHP在线定制商城网站源码V3.0】开源的DIY在线定制商城系统+在线礼品定制

源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/87637177 PHP在线定制商城网站源码&#xff0c;免费开源、免费下载。本商城基于mycncart开发。安装成功后即可浏览&#xff0c;你可以在后台->安装扩展功能上传安装插件&#xff0c;在代码调整中点击刷…

【边缘设备】yolov5训练与rknn模型导出并在RK3588部署(亲测有效)

保姆级教程&#xff0c;看这一篇就够用了 环境准备 将宿主机和开发板接入同一个局域网&#xff0c;方便开发。 宿主机 PC电脑&#xff0c;x86_64, 带显卡, 配置不表, 能训练和开发即可。系统&#xff1a; ubuntu 22.04 LTS 版本( ubuntu 18.04 LTS 以上)自带的远程软件&…

windeployqt工具打包C++ QT项目

目录 前言方法TIP 前言 使用VS编写好QT项目后&#xff0c;有时需要发送给他人进行测试。在此情况下&#xff0c;发送所有项目文件显然不可取&#xff0c;因为exe文件不能独立运行&#xff0c;故在测试前需要先配置项目环境&#xff0c;以确保运行所需的库文件能够完全。 因此&…

《操作系统》——计算机系统概述

前言&#xff1a; 在之前的【Linux】学习中&#xff0c;我们已经对常见指令已经开发工具等进行了详细的了解。紧接着&#xff0c;我们将要学习的便是关于【Linux进程】的基本知识。但是为了帮助大家更好的理解相关的知识概念&#xff0c;我先带领大家来学习关于《操作系统》这…

【SpringMVC】| 拦截器 | 跨域请求 | 原理详解 | 代码实操

目录 一. &#x1f981; 前言二. &#x1f981; 拦截器 & 跨域请求1. 拦截器Ⅰ. 拦截器和过滤器(Filter)的区别Ⅱ. 拦截器的使用步骤1. 创建SpringBoot项目&#xff0c;添加Spring Web依赖2. 创建控制器方法3. 创建拦截器类4. 编写JSP页面5. 配置Interceptor核心配置类6. 拦…

《理想国》读书感悟

第一卷 话题从年老谈到财富&#xff0c;引出了雪蒙拿的正义观&#xff1a;欠债还钱是正义&#xff0c;从而提出了“正义是什么”的探讨。 辩论中正义定义的演变&#xff1a; 实话实说欠债还债是正义&#xff08;商人的视角&#xff09;。报朋友以善&#xff0c;报敌人以恶是…

Springboot JSR303校验是怎么回事?

概述&#xff1a; 在做项目的过程中&#xff0c;除了要在前端进行数据校验外&#xff0c;服务端也必须做相应的校验&#xff0c;因为高手可绕过前端的校验&#xff0c;直接进入服务端调用相关的方法&#xff0c;进行资料的盗取或破坏。在前端如果使用VueElementUI的方式&#…

基于SpringBoot3从零配置SpringDoc

为了方便调试&#xff0c;更好的服务于前后端分离式的工作模式&#xff0c;我们给项目引入Swagger。 文章目录 1. SpringFox2. SpringDoc2.1 引入依赖2.2 配置文件2.3 语法2.4 使用示例Tag 用于标识controllerOperation 用于标识方法Schema 用于标识实体类和实体类的属性ApiRes…

Unity Nsight Graphcis 使用

前言 在渲染Profile中&#xff0c;大家经常喜欢使用Renderdoc软件, 之前我的一篇博客也介绍Renderdoc Profile渲染的流程 RenderDoc Debug UE4 Shader_ue4 debug shader_带帯大师兄的博客-CSDN博客 Renderdoc适合查看Draw哪一步出差了&#xff0c;导致效果不符合理想&#xf…

webpack : 无法加载文件 D:\...\node-v18.16.0-win-x64\webpack.ps1,因为在此系统上禁止运行脚本

用idea打开项目时&#xff0c;安装webpack打包的包之后&#xff0c;由于组策略问题拒绝执行脚本 解决方法 1、cmd打开命令行。输入&#xff1a;powershell 出现 PS 证明已经进入组策略模式 2、输入&#xff1a;get-executionpolicy&#xff0c;查看策略 ​ 输入&#xff1a…

浅谈线程池

浅谈线程池 1、线程池 1.1、线程池介绍 线程池是一种多线程处理形式&#xff0c;处理过程中将任务添加到队列&#xff0c;然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小&#xff0c;以默认的优先级运行&#xff0c;并处于多线程…