一、功能需求分析

1.功能

  1. 新闻详情

  2. 加载评论功能

  3. 添加评论功能

二、新闻详情页

1.业务流程分析

业务流程:

  1. 判断前端传递新闻id是否为空,是否为整数,是否存在

2.接口设计

  1. 接口说明:

类目 说明
请求方法 GET
url定义 /news/<int:news_id>/
参数格式 url路径参数
  1. 参数说明:

参数名 类型 是否必须 描述
news_id 整数 新闻id
  1. 返回结果:

    html页面,直接通过模板渲染的方式实现

3.后端代码

视图

  1. # 在news/views.py中定义如下视图
  2. class NewDetailView(View):
  3. def get(self, request, news_id):
  4. news = News.objects.select_related('tag', 'author').only(
  5. 'title', 'content', 'update_time', 'tag__name', 'author__username').filter(
  6. is_delete=False, id=news_id).first()
  7. if news:
  8. return render(request, 'news/news_detail.html', context={
  9. 'news': news,
  10. })
  11. else:
  12. return HttpResponseNotFound('<h1>Page not found</h1>')
  13. # 快捷方式
  14. # 1. 去数据库获取新闻数据
  15. # news_queryset = News.objects.select_related('tag', 'author').only('title', 'content', 'update_time', 'tag__name', 'author__username')
  16. # news = get_object_or_404(news_queryset, is_delete=False, id=news_id)
  17.  
  18. # 2. 返回渲染页面
  19. # return render(request, 'news/news_detail.html', context={'news': news})

路由

  1. # 在news/urls.py中定义如下路由
  2.  
  3. urlpatterns = [
  4. #....
  5. path('news/<int:news_id>/', views.NewDetailView.as_view(), name='news_detail')
  6. ]

4.前端代码

html

  1. <!-- templates/news/news_detail.html -->
  2. {% extends 'base/base.html' %}
  3. {% load static %}
  4. {% block title %}文章详情{% endblock %}
  5. {% block link %}
  6. <link rel="stylesheet" href="{% static 'css/news/news-detail.css' %}">
  7. {% endblock %}
  8.  
  9. {% block main_contain %}
  10. <!-- news-contain start -->
  11. <div class="news-contain">
  12. <h1 class="news-title">{{ news.title }}</h1>
  13. <div class="news-info">
  14. <div class="news-info-left">
  15. <span class="news-author">{{ news.author.username }}</span>
  16. <span class="news-pub-time">{{ news.update_time }}</span>
  17. <span class="news-type">{{ news.tag.name }}</span>
  18. </div>
  19. </div>
  20. <article class="news-content">
  21. {{ news.content|safe }}
  22. </article>
  23. <div class="comment-contain">
  24. <div class="comment-pub clearfix">
  25. <div class="new-comment">
  26. 文章评论(<span class="comment-count">0</span>)
  27. </div>
  28. <div class="comment-control please-login-comment" style="display:none;">
  29. <input type="text" placeholder="请登录后参加评论">
  30. </div>
  31. <div class="comment-control logged-comment">
  32. <input type="text" placeholder="请填写评论">
  33. </div>
  34. <button class="comment-btn">发表评论</button>
  35. </div>
  36. <ul class="comment-list">
  37. <li class="comment-item">
  38. <div class="comment-info clearfix">
  39. <img src="../images/avatar.jpeg" alt="avatar" class="comment-avatar">
  40. <span class="comment-user">评论人</span>
  41. <span class="comment-pub-time">1小时前</span>
  42. </div>
  43. <div class="comment-content">这是一条评论</div>
  44. </li>
  45. <li class="comment-item">
  46. <div class="comment-info clearfix">
  47. <img src="../images/avatar.jpeg" alt="avatar" class="comment-avatar">
  48. <span class="comment-user">评论人</span>
  49. <span class="comment-pub-time">1小时前</span>
  50. </div>
  51. <div class="comment-content">这是一条评论</div>
  52. </li>
  53. </ul>
  54. </div>
  55.  
  56. </div>
  57. <!-- news-contain end -->
  58. {% endblock %}
  59. {% block script %}
  60. {% endblock %}

css

  1. /* 为文章内容添加样式 */
  2. /* 在static/css/news/news-detail.css文件中需要添加如下内容:*/
  3.  
  4. .news-content p {
  5. font-size: 16px;
  6. line-height: 26px;
  7. text-align: justify;
  8. word-wrap: break-word;
  9. padding: 3px 0
  10. }

三、加载新闻评论

1.接口设计

新闻详情页,直接渲染新闻评论

2.后端代码

模型代码

  1. # 本项目设计二级评论,修改Comments模型,添加一个parent字段
  2. parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True)

修改模型后一定要及时迁移

导入数据,文件见我的文件中的sql数据包.rar

  1. # 导入测试数据tb_comments_20181222.sql
  2. # 一定要保证tb_users中有id为1,,3的三个用户,不然导入测试数据会报错
  3. mysql -u用户名 -p -D 数据库名< tb_comments_20181222.sql

注意: 如果你想删除有外键关联的表是不能在navicat中用查询-新建查询的命令truncate table_name 来删除表中所有数据的,只能重新弄过

视图代码

  1. # 修改news/views.py中的NewsDetailView视图
  2. class NewDetailView(View):
  3. def get(self, request, news_id):
  4. news = News.objects.select_related('tag', 'author').only(
  5. 'title', 'content', 'update_time', 'tag__name', 'author__username').filter(
  6. is_delete=False, id=news_id).first()
  7. if news:
  8. comments = Comments.objects.select_related('author', 'parent').only(
  9. 'content', 'author__username', 'update_time', 'parent__author__username', 'parent__content',
  10. 'parent__update_time').filter(is_delete=False, news_id=news_id)
  11. return render(request, 'news/news_detail.html', context={
  12. 'news': news,
  13. 'comments': comments
  14. })
  15. else:
  16. return HttpResponseNotFound('<h1>Page not found</h1>')

3.前端代码

css

  1. /* 在static/css/news/news-detail.css中添加如下代码: */
  2. .comment-list .comment-item {
  3. /*把这条样式注释掉*/
  4. /*border-bottom: 1px solid #ddd;*/
  5. margin-bottom: 30px;
  6. }
  7. /* ========= 为父评论添加样式 start============ */
  8. .left_float{
  9. float:left;
  10. }
  11.  
  12. .right_float{
  13. float:right;
  14. }
  15.  
  16. .parent_comment_text{
  17. width:698px;
  18. padding:8px;
  19. background: #f4facf;
  20. margin:10px 0 0 60px;
  21. }
  22.  
  23. .comment_time{
  24. font-size:12px;
  25. color:#999;
  26. margin:10px 0 0 60px;
  27. }
  28.  
  29. .parent_comment_text .parent_username{
  30. font-size:12px;
  31. color:#000;
  32. display:inline-block;
  33. }
  34. .parent_comment_text .comment_time{
  35. display: inline-block;
  36. float:right;
  37. }
  38.  
  39. .parent_comment_text .parent_content_text{
  40. color:#666;
  41. font-size:14px;
  42. margin-top: 20px;
  43. }
  44.  
  45. .reply_a_tag{
  46. font-size:12px;
  47. color:#999;
  48. text-indent:20px;
  49. margin:10px 0 0 20px;
  50. background:url('/static/images/content_icon.png') left center no-repeat;
  51. }
  52.  
  53. .reply_form{
  54. width:718px;
  55. overflow:hidden;
  56. margin:10px 0 0 60px;
  57. display:none;
  58. }
  59.  
  60. .reply_input{
  61. float:left;
  62. width:692px;
  63. height:30px;
  64. border-radius:4px;
  65. padding:10px;
  66. outline:none;
  67. border:1px solid #2185ed;
  68. }
  69.  
  70. .reply_btn,.reply_cancel{
  71. width:40px;
  72. height:23px;
  73. background:#76b6f4;
  74. border:0px;
  75. border-radius:2px;
  76. color:#fff;
  77. margin:10px 5px 0 10px;
  78. cursor:pointer;
  79. }
  80.  
  81. .reply_cancel{
  82. background:#fff;
  83. color: #909090;
  84. }
  85. /* ========= 为父评论添加样式 end============ */

将content_icon.png图片放到static/images/中

html

  1. <!-- 在templates/news/news_detail.html文件中class="comment-contain"里面加入如下代码: -->
  2. <div class="comment-contain">
  3. <div class="comment-pub clearfix">
  4. <div class="new-comment">
  5. 文章评论(<span class="comment-count">0</span>)
  6. </div>
  7. <div class="comment-control please-login-comment" style="display:none;">
  8. <input type="text" placeholder="请登录后参加评论">
  9. </div>
  10. <div class="comment-control logged-comment">
  11. <input type="text" placeholder="请填写评论">
  12. </div>
  13. <button class="comment-btn">发表评论</button>
  14. </div>
  15. <ul class="comment-list">
  16. {% for comment in comments %}
  17. <li class="comment-item">
  18. <div class="comment-info clearfix">
  19. <img src="/static/images/avatar.jpeg" alt="avatar" class="comment-avatar">
  20. <span class="comment-user">{{ comment.author.username }}</span>
  21. <span class="comment-pub-time">{{ comment.update_time }}</span>
  22. </div>
  23. <div class="comment-content">{{ comment.content }}</div>
  24.  
  25. {% if comment.parent %}
  26. <div class="parent_comment_text">
  27. <div class="parent_username">{{ comment.parent.author }}</div>
  28. <div class="comment_time">{{ comment.parent.update_time }}</div>
  29.  
  30. <div class="parent_content_text">
  31. {{ comment.parent.content }}
  32. </div>
  33.  
  34. </div>
  35. {% endif %}
  36.  
  37. <a href="javascript:void(0);" class="reply_a_tag right_float">回复</a>
  38. <form class="reply_form left_float" comment-id="{{ comment.id }}"
  39. news-id="{{ comment.news_id }}">
  40. <textarea class="reply_input"></textarea>
  41. <input type="button" value="回复" class="reply_btn right_float">
  42. <input type="reset" name="" value="取消" class="reply_cancel right_float">
  43. </form>
  44.  
  45. </li>
  46. {% endfor comments %}
  47.  
  48. </ul>
  49. </div>

js代码

  1. // 在static/js/news/news_detail.js中加入如下代码:
  2.  
  3. $(function () {
  4. $('.comment-list').delegate('a,input', 'click', function () {
  5. //获取回复按钮的class属性
  6. let sClassValue = $(this).prop('class');
  7. // 如果点击的是回复按钮,就显示输入框
  8. if (sClassValue.indexOf('reply_a_tag') >= 0) {
  9. $(this).next().toggle();
  10. }
  11. // 如果点击的是取消按钮,就隐藏输入框
  12. if (sClassValue.indexOf('reply_cancel') >= 0) {
  13. $(this).parent().toggle();
  14. }
  15.  
  16. if (sClassValue.indexOf('reply_btn') >= 0) {
  17. // 评论
  18. }
  19. });
  20.  
  21. });

四、添加新闻评论功能

1.业务流程分析

业务处理流程:

  1. 判断用户是否登录

  2. 判断前端传的新闻id是否为空,是否我整数,是否存在

  3. 判断评论内容是否为空

  4. 判断是否有父评论,父评论id是否与新闻id匹配

  5. 保存新闻评论

2.接口设计

  1. 接口说明:

类目 说明
请求方法 POST
url定义 /news/<int:news_id>/comment/
参数格式 url路径参数,表单参数
  1. 参数说明:

参数名 类型 是否必须 描述
news_id 整数 新闻id
content 字符串 新闻评论内容
parent_id 整数 父评论id

注意:post请求需要携带csrftoken

  1. 返回结果:

    1. {
    2. "errno": "",
    3. "errmsg": "",
    4. "data": {
    5. "news_id": ,
    6. "content_id": ,
    7. "content": "评论比较中肯。",
    8. "author": "admin",
    9. "update_time": "2019年08月19日 16:00",
    10. "parent": {
    11. "news_id": ,
    12. "content_id": ,
    13. "content": "行文思路简单肤浅,文章结构平面呆板。",
    14. "author": "xinlan",
    15. "update_time": "2018年12月21日 11:17",
    16. "parent": null
    17. }
    18. }
    19. }

3.后端代码

视图代码

  1. # 在news/views.py中编写如下视图
  2. class NewsCommentView(View):
  3. """
  4. 添加评论视图
  5. url: /news/<int:news_id>/comment/
  6. """
  7. def post(self, request, news_id):
  8. # 是否登录
  9. if not request.user.is_authenticated:
  10. return json_response(errno=Code.SESSIONERR, errmsg=error_map[Code.SESSIONERR])
  11. # 新闻是否存在
  12. if not News.objects.only('id').filter(is_delete=False, id=news_id).exists():
  13. return json_response(errno=Code.PARAMERR, errmsg='新闻不存在!')
  14.  
  15. content = request.POST.get('content')
  16. # 内容是否为空
  17. if not content:
  18. return json_response(errno=Code.PARAMERR, errmsg='评论内容不能为空!')
  19.  
  20. # 父id是否正常
  21. parent_id = request.POST.get('parent_id')
  22. if parent_id:
  23. try:
  24. parent_id = int(parent_id)
  25. if not Comments.objects.only('id').filter(is_delete=False, id=parent_id, news_id=news_id).exists():
  26. return json_response(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
  27. except Exception as e:
  28. logger.info('前端传递过来的parent_id异常\n{}'.format(e))
  29. return json_response(errno=Code.PARAMERR, errmsg='未知异常')
  30.  
  31. # 保存到数据库
  32. new_comment = Comments()
  33. new_comment.content = content
  34. new_comment.news_id = news_id
  35. new_comment.author = request.user
  36. new_comment.parent_id = parent_id if parent_id else None
  37. new_comment.save()
  38.  
  39. return json_response(data=new_comment.to_dict_data())

序列化comment对象(也就是在上面代码的结尾处用到的方法to_dict_data的书写), 这里我们只实现了2层评论关系,无法多个嵌套

  1. # 在news/models.py的Comment模型中添加如下方法,用来序列化
  2. def to_dict_data(self):
  3. comment_dict = {
  4. 'news_id': self.news_id,
  5. 'content_id': self.id,
  6. 'content': self.content,
  7. 'author': self.author.username,
  8. 'update_time': self.update_time.astimezone().strftime('%Y年%m月%d日 %H:%M'),
  9. 'parent': self.parent.to_dict_data() if self.parent else None
  10. }
  11. return comment_dict

路由

  1. # 在news/urls.py中添加如下路由
  2. path('news/<int:news_id>/comment/', views.NewsCommentView.as_view(), name='news_comment'),

4.前端代码

html

  1. <!-- 修改templates/news/news_detail.html中评论部分代码如下 -->
  2. <!-- news comment start -->
  3. <div class="comment-contain">
  4. <div class="comment-pub clearfix">
  5. <div class="new-comment">
  6. 文章评论(<span class="comment-count">0</span>)
  7. </div>
  8. {% if user.is_authenticated %}
  9.  
  10. <div class="comment-control logged-comment" news-id="{{ news.id }}">
  11. <input type="text" placeholder="请填写评论">
  12. </div>
  13. {% else %}
  14. <div class="comment-control please-login-comment">
  15. <input type="text" placeholder="请登录后参加评论" readonly>
  16. </div>
  17. {% endif %}
  18. <button class="comment-btn">发表评论</button>
  19. {% csrf_token %}
  20. </div>
  21.  
  22. <!-- news comment end -->

js代码

  1. // 修改static/js/news/news_detail.js中的代码如下
  2. // 修改static/js/news/news_detail.js中的代码如下
  3. $(function () {
  4. // 对评论进行评论
  5. $('.comment-list').delegate('a,input', 'click', function () {
  6. //获取回复按钮的class属性
  7. let sClassValue = $(this).prop('class');
  8. // 如果点击的是回复按钮,就显示输入框
  9. if (sClassValue.indexOf('reply_a_tag') >= 0) {
  10. $(this).next().toggle();
  11. }
  12. // 如果点击的是取消按钮,就隐藏输入框
  13. if (sClassValue.indexOf('reply_cancel') >= 0) {
  14. $(this).parent().toggle();
  15. }
  16.  
  17. if (sClassValue.indexOf('reply_btn') >= 0) {
  18. // 评论
  19. let $this = $(this);
  20. let news_id = $this.parent().attr('news-id');
  21. let parent_id = $this.parent().attr('comment-id');
  22. let content = $this.prev().val();
  23. if (!content) {
  24. message.showError('请输入评论内容!');
  25. return
  26. }
  27. $
  28. .ajax({
  29. url: '/news/' + news_id + '/comment/',
  30. type: 'POST',
  31. data: {
  32. content: content,
  33. parent_id: parent_id
  34. },
  35. dataType: "json"
  36. })
  37.  
  38. .done((res) => {
  39. if (res.errno === '0') {
  40. let comment = res.data;
  41. let html_comment = `<li class="comment-item">
  42. <div class="comment-info clearfix">
  43. <img src="/static/images/avatar.jpeg" alt="avatar" class="comment-avatar">
  44. <span class="comment-user">${comment.author}</span>
  45. </div>
  46. <div class="comment-content">${comment.content}</div>
  47.  
  48. <div class="parent_comment_text">
  49. <div class="parent_username">${comment.parent.author}</div>
  50. <div class="comment_time">${comment.parent.update_time}</div>
  51. <div class="parent_content_text">
  52. ${comment.parent.content}
  53. </div>
  54. </div>
  55.  
  56. <div class="comment_time left_float">${comment.update_time}</div>
  57. <a href="javascript:;" class="reply_a_tag right_float">回复</a>
  58. <form class="reply_form left_float" comment-id="${comment.content_id}" news-id="${comment.news_id}">
  59. <textarea class="reply_input"></textarea>
  60. <input type="button" value="回复" class="reply_btn right_float">
  61. <input type="reset" name="" value="取消" class="reply_cancel right_float">
  62. </form>
  63.  
  64. </li>`;
  65. message.showSuccess('评论成功!');
  66. setTimeout(() => {
  67. $('.comment-list').prepend(html_comment);
  68. }, 800);
  69.  
  70. $this.prev().val(''); // 清空输入框
  71. $this.parent().hide(); // 关闭评论框
  72. } else if (res.errno === '4101') {
  73. // 用户未登录
  74. message.showError(res.errmsg);
  75. setTimeout(() => {
  76. window.location.href = '/user/login/'
  77. }, 800)
  78. } else {
  79. // 失败
  80. message.showError(res.errmsg)
  81. }
  82. })
  83. .fail(() => {
  84. message.showError('服务器超时,请重试')
  85. })
  86. }
  87. });
  88. // 对新闻评论
  89. let $newsComment = $('.logged-comment input'); // 新闻评论框
  90. let $sendComment = $('.comment-pub .comment-btn'); // 新闻评论按钮
  91.  
  92. $sendComment.click(function () {
  93.  
  94. let $this = $(this);
  95. if ($this.prev().hasClass('please-login-comment')) {
  96. message.showError('未登录,请登录后再评论!');
  97. setTimeout(() => {
  98. window.location.href = '/user/login/'
  99. }, 800);
  100. return
  101. }
  102. let news_id = $this.prev().attr('news-id');
  103. let content = $newsComment.val();
  104. if (!content) {
  105. message.showError('请输入评论内容!');
  106. return
  107. }
  108. $
  109. .ajax({
  110. url: '/news/' + news_id + '/comment/',
  111. type: 'POST',
  112. data: {
  113. content: content
  114. },
  115. dataType: 'json'
  116. })
  117. .done((res) => {
  118. if (res.errno === '0') {
  119. let comment = res.data;
  120. let html_comment = `<li class="comment-item">
  121. <div class="comment-info clearfix">
  122. <img src="/static/images/avatar.jpeg" alt="avatar" class="comment-avatar">
  123. <span class="comment-user">${comment.author}</span>
  124. <span class="comment-pub-time">${ comment.update_time }</span>
  125. </div>
  126. <div class="comment-content">${comment.content}</div>
  127.  
  128. <a href="javascript:;" class="reply_a_tag right_float">回复</a>
  129. <form class="reply_form left_float" comment-id="${comment.content_id}" news-id="${comment.news_id}">
  130. <textarea class="reply_input"></textarea>
  131. <input type="button" value="回复" class="reply_btn right_float">
  132. <input type="reset" name="" value="取消" class="reply_cancel right_float">
  133. </form>
  134.  
  135. </li>`;
  136. message.showSuccess('评论成功!');
  137. setTimeout(() => {
  138. $(".comment-list").prepend(html_comment);
  139. }, 800);
  140.  
  141. // 清空
  142. $newsComment.val('');
  143.  
  144. } else if (res.errno === '4101') {
  145. // 用户未登录
  146. message.showError(res.errmsg);
  147. setTimeout(() => {
  148. window.location.href = '/user/login/'
  149. }, 800)
  150.  
  151. } else {
  152. message.showError(res.errmsg);
  153. }
  154. })
  155.  
  156. .fail(() => {
  157. message.showError('服务器超时,请重试!');
  158. })
  159.  
  160. })
  161.  
  162. });

Django项目: 6.新闻详情页的更多相关文章

  1. [ionic开源项目教程] - 第10讲 新闻详情页的用户体验优化

    目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项 ...

  2. [ionic开源项目教程] - 第9讲 新闻详情页的实现

    目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项 ...

  3. react-native 项目实战 -- 新闻客户端(7) -- 新闻详情页

    http://c.3g.163.com/nc/article/BUH64L0J00031H2L/full.html 观察这个地址,BUH64L0J00031H2L 就是每条新闻数据里的postid.  ...

  4. phpcms新闻详情页上一篇下一篇的实现

    在新闻详情页(show.html或show_*.html) 只需要添加类似如下代码即可: <div>上一篇:<a href="{$previous_page[url]}&q ...

  5. Python爬虫:新浪新闻详情页的数据抓取(函数版)

    上一篇文章<Python爬虫:抓取新浪新闻数据>详细解说了如何抓取新浪新闻详情页的相关数据,但代码的构建不利于后续扩展,每次抓取新的详情页时都需要重新写一遍,因此,我们需要将其整理成函数, ...

  6. Django项目: 5.新闻主页

    一.功能需求分析 1.功能 轮播图 推荐文章列表 文章标签导航 文章列表 分页 二.模型设计 根据功能分析,我们需要如下表 1.表和字段分析 文章分类表 文章表 文章评论表 推荐文章表 轮播图表 2. ...

  7. node——由新闻列表跳转到新闻详情页

    当我们在浏览新闻列表页面的时候,想要看感兴趣的新闻内容,需要到详情页面去查看内容. 在之前写好了新闻列表页面,现在需要做列表页面到详情页面的跳转,需要考虑一下问题 1.点击新闻列表某一项跳转到详情页面 ...

  8. 潭州课堂25班:Ph201805201 django 项目 第二十三课 文章主页 轮播图前端实现 热门新闻推荐实现 详情页实现 (课堂笔记)

    前台代码 // 在static/js/news/index.js文件中 $(function () { // 新闻列表功能 let $newsLi = $(".news-nav ul li& ...

  9. android124 zhihuibeijing 新闻中心-新闻 -北京页签 下拉刷新

    缓存工具类:以url为key,json数据为value, package com.itheima.zhbj52.utils; import com.itheima.zhbj52.global.Glob ...

随机推荐

  1. Laravel依赖

    首先有个接口 interface Visit { public function go (); } 然后有三个类Leg,Car,Train class Leg implements Visit { p ...

  2. JS if 判断

    if条件判断 1.语法结构——只判断true,不判断false if(条件判断:结果只有两个true或false) { 条件为true,将执行该代码: } 说明:   if是系统关键字,必须全小写. ...

  3. java读取字符串,生成txt文件

    /** * 读取字符串,生成txt 文件 已解决未设置编码时,在项目中直接打开文件,中文乱码问题 * WriteText.writeToText(musicInfo,fileName)直接调用 * * ...

  4. 《我是一只IT小小鸟》读书笔记 PB16110698 第四周(~3.29)

    <我是一只IT小小鸟>读书笔记 本周在邓老师的推荐下,我阅读了<我是一只IT小小鸟>,这本书由21位初入职场的IT人的传记组成,记录了他们成长道路上的酸甜苦辣.书中一段段鲜活生 ...

  5. Luogu P4180 【模板】严格次小生成树[BJWC2010]

    P4180 [模板]严格次小生成树[BJWC2010] 题意 题目描述 小\(C\)最近学了很多最小生成树的算法,\(Prim\)算法.\(Kurskal\)算法.消圈算法等等.正当小\(C\)洋洋得 ...

  6. openSUSE 安装LAMP记录

    按照 openSUSE SDB:LAMP setup安装好了LAMP.运行的大多数命令都是来自与openSUSE SDB:LAMP setup中. 本页面描述如何安装LAMP,这是 Linux Apa ...

  7. html-from提交表单

    使用form创建的仅仅是一个空白的表单, 我们还需要向form中添加不同的表单项 <!DOCTYPE html> <html> <head> <meta ch ...

  8. day3-编码、文件、集合、函数、递归

    学习内容: 1. 文件编码 2. 文件 3. 集合 4.函数 5.递归 6.匿名函数 1. 文件编码: 常见的字符串编码有:ASCII 扩展的ASCII Unicode GBK GB2312 GB18 ...

  9. 洛谷 2197 nim游戏

    题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取.每次只能从一堆里 ...

  10. springboot与分布式(zookeeper+dubbo)

    docker安装zookeeper命令: docker pull zookeeper:3.4.14 docker启动zookeeper命令: docker run --name zk01 -p 218 ...