Django博客搭建_新闻模块2_新闻列表

Blog项目——新闻模块

一、新闻列表页功能

1. 分析

业务处理流程:

  • 判断前端传的标签分类id是否为空,是否为整数、是否超过范围
  • 判断前端传的当前文章页数是否为空,是否为整数、是否超过范围

请求方法GET

url定义/news/

请求参数:url路径参数

参数 类型 是否必传 描述
tag_id 整形 标签分类ID
page 整型 页码

我们要实现的是当页面往下滑的时候,自动请求后台进行第二页第三页的展示,而不出现页码框,同样的,我们先再script文件中导入tb_news.sql,然后把数据导入(文件github已上传)。

2. 流程

  1. 首先,用户打开首页,通过js往后台发送数据包含(tag_id和page)
  2. 后台接收数据,将所有的文章进行获取,之后在进行分页操操作
  3. 将得到的数据进行序列化,然后返回给前台
  4. 前台展示数据
  5. 如果用户页面往下移动,则请求page+1,显示页面

3. 代码

3-1 url
# -*- coding: utf-8 -*-
# @Author  : summer
from django.urls import path
from . import views

app_name = "news"

urlpatterns = [
	path("", views.index, name="index"),
	path("news/", views.NewsListView.as_view(), name="news_list")
]
3-2 后端代码

news/views.py

class NewsListView(View):
	def get(self, request):
		# 获取tag参数
		try:
			tag_id = int(request.GET.get("tag_id", 0))
		except Exception as e:
			logger.error("标签错误{}".format(e))
			tag_id = 0

		# 获取page参数
		try:
			page = int(request.GET.get("page", 1))
		except Exception as e:
			logger.error("页面错误{}".format(e))
			page = 1

		# 操作数据库
		news_list = models.News.objects.select_related("tag", "author").only("id", "title", "image_url", "digest", "update_time", "tag__name", "author__username").filter(is_delete=False)  # select_related关联查询
        # 进行二次筛选
		news = news_list.filter(is_delete=False, tag_id=tag_id) or news_list.filter(is_delete=False)

		# 分页  需要两个参数:一个待分页对象和一页的数量
		page_nt = Paginator(news, 4)  # 使用django自带的分页器

		# 更具前端获取的page返回当前页,注意获取的是queryset对象
		try:
			news_info = page_nt.page(page)
		except Exception as e:
			logger.error("给定的页码错误{}".format(e))
			news_info = page_nt.page(page_nt.num_pages)

		# 序列化输出
		news_info_list = []
		for n in news_info:
			news_info_list.append({
   
				"id": n.id,
				"title": n.title,
				"image_url": n.image_url,
				"digest": n.digest,
				"author": n.author.username,
				"tag_name": n.tag.name,
				"update_time": n.update_time
			})
		data = {
   
			"news": news_info_list,
			"total_page": page_nt.num_pages,
		}

		return to_json_data(data=data)

我们可以先使用url直接获取页面查看下:127.0.0.1:news/?page=1&tag_id=1

{"errno": "0", "errmsg": "", "data": {"news": [{"id": 301, "title": "python\u57fa\u7840\u4e4b\u5220\u9664\u6587\u4ef6\u53ca\u5220\u9664\u76ee\u5f55\u7684\u65b9\u6cd5", "image_url": "/media/jichujiaochen.jpeg", "digest": "\u4e0b\u9762\u6765\u770b\u4e00\u4e0bpython\u91cc\u9762\u662f\u5982\u4f55\u5220\u9664\u4e00\u4e2a\u6587\u4ef6\u53ca\u6587\u4ef6\u5939\u7684~~\u9996\u5148\u5f15\u5165OS\u6a21\u5757import os\u5220\u9664\u6587\u4ef6\uff1aos remove()\u5220\u9664\u7a7a\u76ee\u5f55\uff1aos rmdir()\u9012\u5f52\u5220\u9664\u7a7a   ", "author": "summer", "tag_name": "\u8fd0\u7ef4\u5de5\u7a0b\u5e08", "update_time": "2018-12-17T14:48:51.041Z"}, {"id": 300, "title": "python\u57fa\u7840\u4e4b\u83b7\u53d6\u7248\u672c\u4fe1\u606f", "image_url": "/media/jichujiaochen.jpeg", "digest": "\u5728\u5de5\u4f5c\u4e2d\u7ecf\u5e38\u4f1a\u9700\u8981\u786e\u5b9a\u4f7f\u7528\u7684py\u7684\u7248\u672c\u4fe1\u606f\uff0c\u4ee5\u4fbf\u9002\u914d\u66f4\u591a\u7684\u7cfb\u7edf\uff0c\u8fbe\u5230\u66f4\u5927\u7684\u517c\u5bb9\u6027\u3002\u4e00\u822c\u5173\u4e8epython\u7684\u4fe1\u606f\u548c\u53c2\u6570\u90fd\u8981\u8c03\u7528sys\u6a21\u5757\uff0c\u5173\u4e8e\u64cd...", "author": "summer", "tag_name": "\u8fd0\u7ef4\u5de5\u7a0b\u5e08", "update_time": "2018-12-17T14:48:50.803Z"}, {"id": 299, "title": "python\u57fa\u7840\u4e4b\u6587\u4ef6\u64cd\u4f5c", "image_url": "/media/jichujiaochen.jpeg", "digest": "\u4e00\uff1a\u77e5\u8bc6\u70b9\u5bf9\u6587\u4ef6\u7684\u8bbf\u95ee\u65b9\u5f0f\u4e00\u822c\u6709\u4e09\u79cd\u6a21\u5f0f\uff1a\u8bfb\u6a21\u5f0f\uff08'r'\uff09\u3001\u5199\u6a21\u5f0f\uff08'w'\uff09\u6216\u8ffd\u52a0\u6a21\u5f0f\uff08'a'\uff09. \u53e6\u5916\u4e24\u79cd\u53ef\u6df7\u5408\u4f7f...", "author": "summer", "tag_name": "\u8fd0\u7ef4\u5de5\u7a0b\u5e08", "update_time": "2018-12-17T14:48:50.701Z"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值