[Flask] Flask问题集(后端模板渲染项目)
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问题集(后端模板渲染项目)的更多相关文章
- 细说后端模板渲染、客户端渲染、node 中间层、服务器端渲染(ssr)
细说后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr) 前端与后端渲染方式的发展大致经历了这样几个阶段:后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr). 1. 后端 ...
- Python Web Flask源码解读(三)——模板渲染过程
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- Flask框架 请求与响应 & 模板语法
目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) F ...
- (4)Flask项目模板渲染初体验
一.准备静态资源 将项目使用到的静态资源拷贝到static目录 二.创建前台首页html 创建templates/home/home.html页面,内容包含导航和底部版权两部分,中间内容区域为模板标签 ...
- Flask(1):基本示例、配置文件、路由、请求和响应、模板渲染
Flask的特点: - pip install flask - 短小精悍.可扩展性强的 web框架 注意:上下文管理机制 - 依赖 wsgi:werkzeug Flask的简单示例: from fla ...
- Flask 的模板渲染
Flask 的模板渲染 渲染模板语言和django很像,都是用{{}},{%%} 注意点: 1 flask给模板传值,render_template("index.htm",use ...
- Flask -- 静态文件 和 模板渲染
静态文件 一般用于存放图片,样式文件(css, js等) 保存位置:包中或者文件所在目录创建一个 static 目录 访问:在应用中使用 /static/...即可访问 , 更好的方式是使用url_f ...
- flask框架下的jinja2模板引擎(1)(模板渲染)
#转载请留言联系 模板是什么? 在 flask 框架中,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.模板作用即是承担视图函 ...
- Flask模板渲染
目录 Flask模板渲染 Jinja2模板引擎简介 模板 Jinja2 模板变量 变量 控制结构 宏,类似Python代码中的函数 模板继承 包含(Include) 过滤器 链式调用 常见内建过滤器 ...
随机推荐
- python实现skywalking的trace模块过滤和报警
skywalking本身的报警功能,用起来视乎不是特别好用,目前想实现对skywalking的trace中的错误接口进行过滤并报警通知管理员和开发.所以自己就用python对skywalking做了二 ...
- java的bio和nio写入及读取txt文件
一.bio的写入及读取 1.采用bio之BufferedWriter 写入文件 public static void main(String[] args) throws IOException { ...
- C#生成pdf -- iText7 设置自定义字体和表格
itextsharp已经不再更新,由iText 7来替代 安装 nuget 安装 itext7 注册自定义字体 下载字体文件 .ttc或.ttf到项目目录,设置更新则拷贝到输出目录,这样构建的时候会把 ...
- 【antd】form表单默认值设置
问题: 在antd的form表单的api里面有个"initialValues"可以设置默认值.但是表单没有更新 <Form name="test" for ...
- Pytorch入门上 —— Dataset、Tensorboard、Transforms、Dataloader
本节内容参照小土堆的pytorch入门视频教程.学习时建议多读源码,通过源码中的注释可以快速弄清楚类或函数的作用以及输入输出类型. Dataset 借用Dataset可以快速访问深度学习需要的数据,例 ...
- 十年后回到百年前?(Excel技巧集团)
在单元格里输入日期,有时可以偷懒,比如明年的日期可以输入至少一位的年+横杠(或斜杠)+至少一位的月+横杠(或斜杠)+至少一位的日,也就是"21-1-1",单元格里就会自动显示&qu ...
- 第四届“传智杯”全国大学生IT技能大赛题解
目录 A B C D E F G 今年题目难度普遍偏低.只有 D,F 还好. A 按题目给的公式计算即可.注意应在最后的答案中去掉小数部分. B 按照题意模拟即可.注意答案要与 \(0\) 取 \(\ ...
- Linux下c++之常见错误代码errno(退而结网法)
1.关于 还在到处找 errno对应的含义? 自己动手,很方便可找到其明确的含义 2. 动手 2.1 创建 c++源文件,输入下面的代码: #pragma once #include <iost ...
- 【LeetCode】LCP 06. 拿硬币
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换 日期 题目地址:https://leetcode ...
- 【LeetCode】616. Add Bold Tag in String 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...