【问题记录】flask开发blog

这篇具有很好参考价值的文章主要介绍了【问题记录】flask开发blog。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【问题记录】flask开发blog


学习教程: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,就可以了。

11. flask中使用数据库的流程?

使用SQLAlchemyflask-migrate
1、建立模型,并在工厂函数中引入
2、配置环境变量(见第10点)
3、创建数据库

mysql> create database <数据库名> charset=utf8;

4、迁移数据库

flask db init # 仅在第一次迁移时使用
flask db migrate
flask db upgrade

感谢bug的一路陪伴,期待下次不要再见。文章来源地址https://www.toymoban.com/news/detail-439779.html

到了这里,关于【问题记录】flask开发blog的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flask框架小程序后端分离开发学习笔记《1》网络知识

    Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。 协议:http,https (https是加密的http) 主机:g.cn zhihu.com之类的网址 端口:HTTP协议默认是80,因此一般不用填写 路径下面的「/question/31838184」是路径 http://www.zhihu.com/question/31838184 http://www.zhihu.com:80/ 电脑通

    2024年01月17日
    浏览(51)
  • Python-web开发学习笔记(3):Flask Demo,一个网站开发小案例

    ☕️ 推荐关注我的另一个专栏系列:大道至简,该系列收录了许多优质的人工智能算法博文,包括机器学习和自然语言处理等,持续更新中,欢迎各位关注~   介绍完Python-web开发学习笔记(2)--- HTML基础_尚拙谨言的博客-CSDN博客,我们来搞一个简单的网站小案例,带大家更进

    2024年02月06日
    浏览(44)
  • 恒源云 & PyCharm!!!深度学习在恒源云上租服务器并进行远程连接超级详细教程!!!(个人学习记录)

    本人因为实验需要,经常在网上租服务。之前用过Autodl平台,也出了相关教程Autodl使用教程。因为Autodl上面的卡空闲的比较少,而且都比较贵,最近发现了恒源云这个新平台。感觉上面服务器的普遍比Autodl上的便宜(没有严格对比),但是恒源云也存在一个问题,就是租一个

    2024年04月22日
    浏览(56)
  • 移动开发学习教程大纲

    ##移动开发学习教程大纲 1.1 移动开发概述 移动开发的概念和发展历程 移动开发的发展趋势和前景 1.2 移动开发环境搭建 移动开发环境的搭建和配置 移动开发工具和框架的介绍 1.3 移动开发基础知识 移动开发中的HTML、CSS和JavaScript 移动端特有的布局和样式技巧 2.1 移动端开发

    2024年02月02日
    浏览(41)
  • 【MYSQL】MYSQL 的学习教程(十二)之 MySQL 啥时候用记录锁,啥时候用间隙锁

    在「读未提交」和「读已提交」隔离级别下,都只会使用 记录锁 ;而对于「可重复读」隔离级别来说,会使用 记录锁、间隙锁和 Next-Key 锁 那么 MySQL 啥时候会用记录锁,啥时候会用间隙锁,啥时候又会用 Next-Key 锁呢? 影响其使用哪种行级锁的因素有: 索引类型(聚簇索引

    2024年02月02日
    浏览(40)
  • Flask框架小程序后端分离开发学习笔记《2》构建基础的HTTP服务器

    Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。本节提供一个构建简单的本地服务器的代码,仔细看注释,学习每一步的流程,理解服务器接收请求,回复响应的基本原理。 代码效果,运行之后,在浏览器输入:localhost:2000 总结 1.导入socket库:这个库

    2024年01月18日
    浏览(44)
  • 学习笔记|计数器|Keil软件中 0xFD问题|I/O口配置|STC32G单片机视频开发教程(冲哥)|第十二集:计数器的作用和意义

    直流有刷的电机,后面两个一正一负的电接上,电机就可以转 到底是转子个几个圈呢? 我们就可以在背后加装这么一个码盘,我们假设这里是有60个这个光电的一个孔对吧 那我们转一圈是不是就可以一个轴上输出60个这样的脉冲,有遮挡就输出1,无遮挡输出0, 两路交替,如果说

    2024年02月09日
    浏览(48)
  • STM32入门教程课程简介(B站江科大自化协学习记录)

    STM32最小系统板+面包板硬件平台 STM32面包板入门套件 Windows电脑 万用表、示波器、镊子、剪刀等 Keil MDK 5.24.1 是一款嵌入式软件开发工具,它提供了一个完整的开发环境,包括编译器、调试器和仿真器。它支持各种微控制器,包括 ARM、Cortex-M、Cortex-R 和 8051 等。Keil MDK 是一款

    2023年04月08日
    浏览(72)
  • Flask框架小程序后端分离开发学习笔记《4》向服务器端发送模拟请求-爬虫

    Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。 下面代码,是一个比较老的版本了,可以借鉴一下。 最后尝试请求豆瓣的网页,并未得到,我怀疑是有反爬手段,我们的请求数据还有很多东西没加进去,所以看起来不像是浏览器发送的请求,后续会

    2024年01月20日
    浏览(53)
  • Flask框架小程序后端分离开发学习笔记《3》客户端向服务器端发送请求

    Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。 可以看到上述代码构建了一个HTTP请求,在发送之前需要将发送之前,使用http_request.encode(‘utf-8’)。 这是因为我们在这构建的请求是字符串文本,而电脑只认识二进制0和1,所以需要将其数据类型转换

    2024年01月22日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包