项目阶段之flask(三)

1.分页切换调试

2.新闻蓝图创建

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

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

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

3.新闻详情页数据展示

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

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

下面是接口文档:

请求路径请求方式请求参数返回值
/news/<int:news_id>GETnews_iddetail.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_collectPOSTnews_id,action, g.usererrno,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_commentPOSTnews_id,comment,parent_id, g.usererrno,errmsg,评论字典

11.重点知识点图解

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

11.2json和js对象的区别

11.3图片验证码

11.4短信验证码

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

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值