项目阶段之flask(三)

简介: 项目阶段之flask(三)

1.分页切换调试





2.新闻蓝图创建

目的:创建新闻蓝图对象管理新闻页面

操作流程:蓝图使用三部曲(创建蓝图对象,装饰视图函数,注册到app中)

因为这一部分是独立于首页和认证蓝图的,因此我们为其单独建立一个包news,实现高内聚,低耦合.

3.新闻详情页数据展示

将详情页面也在templates下的news中

然后我们在新闻包中添加一个专门处理新闻详情页面数据展示的视图函数

下面是接口文档:

请求路径 请求方式 请求参数 返回值
/news/<int:news_id> GET news_id detail.html页面, 用户data字典数据

操作流程:

1/根据新闻编号,查询新闻对象

2/如果新闻对象不存在,直接抛出异常abort,后面我们会统一处理这些异常

3/携带数据取渲染页面

4/在news/detail.html中我们利用小胡子语法填充数据,替换掉死数据


4.基类base模板抽取

templates文件夹下一共有两个文件,一个首页页面,一个详情页面,为了简化代码,是我们的代码更加灵活,我们使用继承.将公共的部分抽取出来,写死在基类中,然后每个页面不同的部分我们只需要利用{% block %}将其预留出来,供其他页面继承后进行单独的重写即可.继承的时候,我们可以将页面中所有的数据进行一个清空处理了,然后再开头写{% extends '父模板' %}然后哪些部分不一样,我们直接利用block进行重写即可.


首页:

1/重写title部分

2/重写script部分

3/重写header部分

4/重写新闻列表部分


新闻详情页面:1/重写title部分

2/重写script部分

3/重写正文的部分

4/重写作者部分

5/获取用户点击量最多的前六条新闻





5.语法扫盲,g对象

陌生语法两点补充:

1/python中的三元运算

"语句1" if 条件A else "语句2"

执行特点:如果条件A成立,那么返回语句1,否则返回语句2


2/使用g对象配合装饰器使用

装饰器作用:给已经存在的方法,添加额外的功能,而不应该改变原有函数的结构

解决办法:不改变原有函数的结构,functools.wraps可以解决该问题

在框架中,给视图函数加了自定义的装饰器之后,再用@app.route("/index")添加索引,绑定路径,如果不使用wraps修饰函数,那么报错,提示"你添加路径的视图函数已经被绑定了其他路径"

小问题

1/session在存储的时候是存到了redis服务器中,因为我们在设置配置参数的时候就制定了 存储的redis服务器.

2/小括号也有提高优先级的作用

3/我们在设置快速代码块的时候,如果想要出现红色框(就是输入完成后,光标直接定位到我们需要填参数的地方)只需要在模板中,想要插入的部分加$name$即可






6.评论输入框的展示

我们需要做一个判断,就是跟胡用户的登录状态显示不同的输入框,如果是登录了直接显示评论框,如果是没有登录,显示登录的提示框.






7.收藏&取消收藏按钮展示

1/在后端中,我们需要判断用户是否收藏过该新闻

2/用户需要登录,并且该新闻在用户收藏过的新闻列表中

3/然后将信息返回给前台,前台给收藏&取消收藏的按钮,添加属性,是显示还是不显示

style="display: {% if data.is_collected %} none {% else %} block {% endif %}"


8.新闻收藏&取消收藏

思路分析:

1/判断用户是否登录了

2/获取参数

3/参数校验,为空校验

4/操作类型校验

5/根据新闻的编号取出新闻对象

6/判断新闻对象是否存在

7/根据操作类型["collect","cancel_collect"]进行收藏或者取消收藏

8/返回响应

9/前台将新闻的id进行取出展示

接口文档:

请求路径 请求方式 请求参数 返回值
/news/news_collect POST news_id,action, g.user errno,errmsg



如果是不知道怎么打断点进行调试数据,那么按下面的规则来

前端中打断点,在两个地方:一个是在一个事件处,另一个是在回调函数处

后端中打断点是打在视图函数的第一行





9.使用登录装饰器封装用户数据

1#定义登陆装饰器,封装用户的登陆数据
 2def user_login_data(view_func):
 3    @wraps(view_func)
 4    def wrapper(*args,**kwargs):
 5        # 1.从session中取出用户的user_id
 6        user_id = session.get("user_id")
 7
 8        # 2通过user_id取出用户对象
 9        user = None
10        if user_id:
11            try:
12                from info.models import User
13                user = User.query.get(user_id)
14            except Exception as e:
15                current_app.logger.error(e)
16
17        #3.将user数据封装到g对象
18        g.user = user
19
20        return view_func(*args,**kwargs)
21    return wrapper


我们给需要取用户数据的视图函数都使用上面的装饰器即可@user_login_data






10.评论后端实现

操作思路:

1/判断用户是否登录

2/获取请求参数

3/校验参数,为空校验

4/根据新闻编号取出新闻对象,判断新闻是否存在

5/创建评论对象,设置其属性

6/保存评论对象到数据库中

7/返回响应,携带评论的数据

8/我们还需要将评论保存在数据库中,然后前台显示的时候,我们在后端要查询数据库,该新闻的所有评论

9/前台中,遍历所有的评论

接口文档:

请求路径 请求方式 请求参数 返回值
/news/news_comment POST news_id,comment,parent_id, g.user errno,errmsg,评论字典






11.重点知识点图解

11.1前后端与前后端不分离的区别

11.2json和js对象的区别

11.3图片验证码

11.4短信验证码

11.5前端和后端进行交互,数据

相关文章
|
7月前
|
缓存 前端开发 JavaScript
flask各种版本的项目,终端命令运行方式的实现
flask各种版本的项目,终端命令运行方式的实现
313 4
|
7月前
|
数据可视化 API 开发者
通俗易懂:一步步教你 Flask 项目自动生成 API 文档
Flasgger,作为一款强大的 Flask 扩展,自动从 Flask 应用中提取并生成 OpenAPI 规范文档,配备 SwaggerUI,为开发者提供了一条快捷通道,让 API 的文档编制和交互式测试变得简单易行。Flasgger 的设计原则是简化开发流程,通过与 Flask 框架的无缝整合,让开发者可以更专注于应用逻辑的构建。
|
前端开发 JavaScript Python
flask 项目目录结构
flask 项目目录结构
172 0
|
4月前
|
Linux Python
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
|
5月前
|
安全 前端开发 API
震惊!掌握Django/Flask后,我竟然轻松征服了所有Web项目难题!
【7月更文挑战第15天】Python Web开发中,Django以其全面功能见长,如ORM、模板引擎,助你驾驭复杂需求;Flask则以轻量灵活取胜,适合快速迭代。两者结合使用,无论是数据库操作、用户认证还是API开发,都能让你应对Web挑战游刃有余。掌握这两者,Web项目难题变得易如反掌!
80 10
|
6月前
|
数据处理 Python
Flask 项目工程目录层级划分
本文介绍了如何将 Flask 项目工程目录层级按照主题分类划分,主要包括模型层、视图层、表单层、模板文件和静态文件。通过合理地组织项目文件,可以提高项目的可读性、可维护性和可扩展性。
96 5
|
7月前
|
前端开发 JavaScript 数据库
Flask狼书笔记 | 09_图片社交网站 - 大型项目的架构与需求(2)
9.8 收藏图片 前面已经学习过如何使用关联表来表示多对多关系,缺点是只能表示关系,不能存储数据(如我还想记录下收藏图片的时间戳)。这种情况下,我们可以使用关联模型来表示多对多关系。 在关联模型中,我们将Photo模型与User模型的多对多关系,分离成了User模型和Collect模型的一对多关系,和Photo模型与Collect模型的一对多关系。
149 0
|
6月前
|
前端开发 索引 Python
【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str
【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str
|
7月前
|
开发者 索引 Python
Flask环境搭建与项目初始化
【4月更文挑战第15天】本文指导如何搭建Flask开发环境并初始化项目。首先确保安装Python,然后通过pip安装Flask。创建名为`myflaskapp`的项目目录,包含`app.py`入口文件。在`app.py`中初始化Flask应用,定义路由和视图函数。运行`python app.py`启动开发服务器,访问`http://127.0.0.1:5000/`查看结果。完成基本设置后,可按需求扩展应用功能。
|
7月前
|
Python
通过命令行的方式快速创建一个flask项目
通过命令行的方式快速创建一个flask项目
203 0