1.redirect和render_template的区别?

redirect:重定向,会改变url

render_template:模板渲染,用模板来渲染当前页,不会改变url

2.关于 'g' 对象踩的坑

【描述】

博客项目,在login请求中设置g对象,在register请求中取得g对象,取得None

@bp.route('/login',methods=('GET','POST'))
def login():
#...
g.myname = 'john' @bp.route('/register',methods=('GET','POST'))
def register():
#...
name = g.get('myname')
print(name) # None

【分析】

文档中说道:To share data that is valid for one request only from one function to another ...

注意是一次请求,一次!

要实现跨request需要用到session

3.从DB取出的博客文章显示最多100个字符,其后的省略,如何实现?

【描述】

最终需要的效果图:

我的数据库:

CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
); CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
title TEXT NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
);

【解决方案1】

1.写sql的时候这样写 :SUBSTR(p.body,1,100) as body

SELECT p.id , title, SUBSTR(body,1,100) as body,created,author_id,username
FROM post p JOIN user u ON p.author_id = u.id
ORDER BY created DESC

注意一定要定义别名 ... as body,不然会导致在html模板中取不到值

2.前端css代码

font-size:0.6em;
overflow:hidden;
white-space: nowrap;
text-overflow:ellipsis;

【解决方案2】

在模板中使用过滤器(truncatechars),如下将截断100位之后的字符串,并以...表示

<p class="list-group-item-text blog-index-textbody">{{ post['body']|truncatechars:100  }}</p>

4.按照flask官方文档,我在VScode的TERMINAL中运行失败,如何解决?

【描述】

【解决方案】

看了一下VScode的TERMINAL是powershell,CMD 和 powershell 的命令不一样

powershell

> $env:FLASK_APP = "myapp"
> $env:FLASK_ENV="development"
> flask run

CMD

> set FLASK_APP=myapp
> set FLASK_ENV=development
> flask run

【备注】

1.因为导出的环境变量问题,导致windows下初始化db失败(flask init-db),通过上述方案成功解决

2.windows下把这启动flask服务的命令写进bat文件,以后每次只需要运行这个bat文件就可以了,当然命令要用CMD的那个

运行方法: ./start.bat

5.从数据库中博客表(TABLE post)取出的时间(created)不对

【描述】

博客表:

CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
title TEXT NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
);

其中created字段时间比实际时间早了8小时左右

【解决方案】

网上查了一下是因为时区的关系

记得datetime外层一定要裹上括号

created TIMESTAMP NOT NULL DEFAULT (datetime('now','localtime')),

或者

created TIMESTAMP NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')),

参考:https://www.cnblogs.com/GDLMO/archive/2010/07/19/1780920.html

6.今天碰到操作sqlite的时候出现db locked的情况。

原因是我用了sqlite manager打开了数据库观察,导致删除文章失败。。。呕

7.从后台取到html的数据(博客内容body),反应到模板上显示出了源码,如何解决

【描述】

模板: <p class="list-group-item-text blog-index-textbody">{{ post['body'] }}</p>

显示如下:

【解决方案】

正则去掉标签

8.flask怎么实现点击链接后在新标签页打开?

9.B站发表评论的HTML代码,为什么没有用form?他用的是什么?

估计是ajax

10.用form提交表单后刷新页面,会提示“确认重新提交表单”的警告框,如何解决?

【解决方案】redirect

11.如何实现评论了之后不刷新页面,只刷新评论列表呢?(局部刷新)

【解决方案】ajax

12.一个html里面有多个form表单,如何区别这些表单呢?

【解决方案】

用隐藏输入框<input type="hidden" name="form1"/>

13.删除一篇博客文章后,怎么同时删除留言等信息呢?数据库该如何设计?

【方法一】

利用外键完整性约束,在外键加入ON DELETE CASCADE

DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;
DROP TABLE IF EXISTS comment;
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
); CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')),
title TEXT NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
); CREATE TABLE comment (
authorid INTEGER NOT NULL,
postid INTEGER NOT NULL,
userid INTEGER NOT NULL,
ctext TEXT NOT NULL,
ctime TIMESTAMP NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')),
enable_dis BOOLEAN NOT NULL,
reply_targetid INTEGER,
FOREIGN KEY (userid) REFERENCES user (id),
FOREIGN KEY (reply_targetid) REFERENCES user (id),
FOREIGN KEY (authorid) REFERENCES post (author_id),
FOREIGN KEY (postid) REFERENCES post (id) ON DELETE CASCADE
);

注意:sqlite需要手动开启外键完整性约束: sqlite> PRAGMA foreign_keys = ON;

参考:https://blog.csdn.net/qq_34082034/article/details/54927680

14.flask中一个简单的路由系统必须返回一个渲染页面或者重定向页面吗?如果我只是想进行逻辑处理呢?

【描述】

一个简单的路由:

@app.route('/hello')
def hello():
pass
return render_template('index.html')

前端传来一个form想由后端处理,只需要逻辑处理后update一下数据库就行,不用返回新页面,如何实现呢?

【解决方案】ajax

15.【踩坑】模板中注释的语句居然也会被debug检查

【描述】

flask会检查{{...}}里面的内容,而不管在模板中是否被注释。因为路由有所改动,导致报错。。

【解决方案】

删掉,原理请参考源码

16.jinja渲染模板html代码会产生大量空行(空格),如何解决?

在block中加入"-"符号。
例如:
------
{%- if test -%}
{%- endif -%}

[Flask] Flask问题集(后端模板渲染项目)的更多相关文章

  1. 细说后端模板渲染、客户端渲染、node 中间层、服务器端渲染(ssr)

    细说后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr) 前端与后端渲染方式的发展大致经历了这样几个阶段:后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr). 1. 后端 ...

  2. Python Web Flask源码解读(三)——模板渲染过程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  3. Flask框架 请求与响应 & 模板语法

    目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) F ...

  4. (4)Flask项目模板渲染初体验

    一.准备静态资源 将项目使用到的静态资源拷贝到static目录 二.创建前台首页html 创建templates/home/home.html页面,内容包含导航和底部版权两部分,中间内容区域为模板标签 ...

  5. Flask(1):基本示例、配置文件、路由、请求和响应、模板渲染

    Flask的特点: - pip install flask - 短小精悍.可扩展性强的 web框架 注意:上下文管理机制 - 依赖 wsgi:werkzeug Flask的简单示例: from fla ...

  6. Flask 的模板渲染

    Flask 的模板渲染 渲染模板语言和django很像,都是用{{}},{%%} 注意点: 1 flask给模板传值,render_template("index.htm",use ...

  7. Flask -- 静态文件 和 模板渲染

    静态文件 一般用于存放图片,样式文件(css, js等) 保存位置:包中或者文件所在目录创建一个 static 目录 访问:在应用中使用 /static/...即可访问 , 更好的方式是使用url_f ...

  8. flask框架下的jinja2模板引擎(1)(模板渲染)

    #转载请留言联系 模板是什么? 在 flask 框架中,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.模板作用即是承担视图函 ...

  9. Flask模板渲染

    目录 Flask模板渲染 Jinja2模板引擎简介 模板 Jinja2 模板变量 变量 控制结构 宏,类似Python代码中的函数 模板继承 包含(Include) 过滤器 链式调用 常见内建过滤器 ...

随机推荐

  1. Linux 目录结构及详细操作

    目录 Linux 目录结构及详细操作 目录结构 目录结构的特点 目录结构挂载 目录结构发展 关闭selinux(了解) 重要目录说明(etc目录说明) 1.网卡配置文件 2.解析配置文件 3.主机名称 ...

  2. Mybatis-plus报Invalid bound statement (not found)错误

    错误信息 org.springframework.security.authentication.InternalAuthenticationServiceException: Invalid bou ...

  3. TCP链接请求的10种状态

    一.状态显示 SYN_SENT:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,随即进入到了SYN_SENT状态,并等待服务端的发送三次握手中的 ...

  4. Django记录操作日志、LogEntry的使用

    LogEntry是在后台开发中经常用到的模块,它在admin是默认开启的. 可以使用LogEntry模块记录所有用户的操作记录.一方面可以用来监督,另一方面可以用来做回滚. 1. 使用LogEntry ...

  5. CF1025B Weakened Common Divisor 题解

    Content 定义 \(n\) 个数对 \((a_1,b_1),(a_2,b_2),(a_3,b_3),...,(a_n,b_n)\) 的 \(\text{WCD}\) 为能够整除每个数对中至少一个 ...

  6. .NET 6 优先队列 PriorityQueue 实现分析

    在最近发布的 .NET 6 中,包含了一个新的数据结构,优先队列 PriorityQueue, 实际上这个数据结构在隔壁 Java中已经存在了很多年了, 那优先队列是怎么实现的呢? 让我们来一探究竟吧 ...

  7. JAVA获取当前日期指定天数之后的日期

    /** * 获取day天之后的日期 * @param day 天数 * @return */ public static String getDate(int day){ Calendar calen ...

  8. 一种实用性较强的求IOU的算法(任意多边形之间的IOU)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  9. 【LeetCode】513. Find Bottom Left Tree Value 解题报告(Python & C++ & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS Date 题目地址:https:// ...

  10. 【LeetCode】911. Online Election 解题报告(Python)

    [LeetCode]911. Online Election 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ ...