前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目阶段之flask(三)

项目阶段之flask(三)

作者头像
小闫同学啊
发布2019-07-18 12:51:37
4270
发布2019-07-18 12:51:37
举报
文章被收录于专栏:小闫笔记小闫笔记

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.使用登录装饰器封装用户数据

#定义登陆装饰器,封装用户的登陆数据
def user_login_data(view_func):
    @wraps(view_func)
    def wrapper(*args,**kwargs):
        # 1.从session中取出用户的user_id
        user_id = session.get("user_id")

        # 2通过user_id取出用户对象
        user = None
        if user_id:
            try:
                from info.models import User
                user = User.query.get(user_id)
            except Exception as e:
                current_app.logger.error(e)

        #3.将user数据封装到g对象
        g.user = user

        return view_func(*args,**kwargs)
    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前端和后端进行交互,数据

优质文章推荐:

公众号使用指南

redis操作命令总结

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

Flask框架重点知识总结回顾

项目重点知识点详解

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.分页切换调试
  • 2.新闻蓝图创建
  • 3.新闻详情页数据展示
  • 4.基类base模板抽取
  • 5.语法扫盲,g对象
  • 小问题
  • 6.评论输入框的展示
  • 7.收藏&取消收藏按钮展示
  • 8.新闻收藏&取消收藏
  • 9.使用登录装饰器封装用户数据
  • 10.评论后端实现
  • 11.重点知识点图解
    • 11.1前后端与前后端不分离的区别
      • 11.2json和js对象的区别
        • 11.3图片验证码
          • 11.4短信验证码
            • 11.5前端和后端进行交互,数据
            相关产品与服务
            云数据库 Redis
            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档