一, 业务流程分析
1, 功能
1, 新闻详情
2, 加载评论功能
3, 添加评论功能
1, 业务流程分析
业务流程:
1, 判断前端传递新闻 ID 是否为空, 是否为整数, 是否存在
二, 接口设计
1, 接口说明:
类目 说明
请求方式 GET
路径 /news/<int:news_id>
参数格式 url 路径参数
2, 参数说明
参数名 类型 是否必须 描述
news_id 整数 是 新闻 ID
3, 返回结果:
html 页面, 直接通过模版渲染的方式实现
三, 加载新闻评论
1. 接口设计
新闻详情页, 直接通过渲染获得
2. 接口说明
类目 说明
请求方式 GET
路径 /news/<int:news_id>
参数格式 url 路径参数
3, 参数说明
参数名 类型 是否必须 描述
news_id get 是
4, 返回结果:
HTML 页面, 直接通过模版渲染的方式实现
news/view.py 文件
- class NewsDetailView(View):
- """
- 新闻详情视图
- url: '/news/<int:news_id>/'
- """
- def get(self, request, news_id):
- #1, 校验是否存在
- # 2, 获取数据
- news = News.objects.select_related('tag', 'author').only('title','content','update_time','tag__name','author__username').filter(is_delete=False, id=news_id).first()
- news = News.objects.get(pk=news_id)
- if news:
- # 3, 展示
- return render(request,'news/news_detail.html',context={'news': news})
- else:
- return HttpResponseNotFound('<h1>Page not found</h1>')
三, 加载新闻评论
1, 接口设计
新闻详情页, 直接渲染新闻评论
2, 后端代码
模型代码
- # 本项目设计二级评论
- parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True)
模型修改一定要数据库迁移
- python manage.py makemigrations
- python manage.py migrate
四, 添加新闻评论功能
1. 业务流程分析
业务处理流程
1. 判断用户是否登录
2. 判断前端传的新闻 ID 是否为空, 是否为整数, 是否存在
3. 判断评论内容是否为空
4. 判断是否有父评论, 父评论 id 是否与新闻 id 匹配
5. 保持新闻评论
2. 接口说明
类目 说明
请求方式 POST
路径 /news/<int:news_id>/comment/
参数格式 url 路径参数, 表单参数
3, 参数说明
参数名 类型 是否必须 描述
news_id 整数 是 新闻 ID
content 字符串 是 新闻评论内容
parent_id 整数 是 父评论 id
注意: post 请求需要携带 csrftonke
4, 返回结果:
- JSON
- {
- "errno": "0",
- "errmsg":"""data": {
- "news_id": 1170,
- "content_id": 3569,
- "content": "评论比较中肯.",
- "author": "admin",
- "update_time": "2019 年 08 月 19 日 16:00",
- "parent": {
- "news_id": 1170,
- "content_id": 893,
- "content": "行文思路简单肤浅, 文章结构平面呆板.",
- "author": "xinlan",
- "update_time": "2018 年 12 月 21 日 11:17",
- "parent": null
- }
- }
- }
新闻详情页
来源: http://www.bubuko.com/infodetail-3163603.html