基于django的个人博客网站建立(七)

前言

网站效果可点击这里访问


这次在原来的基础上添加或修改一些小功能

具体内容

1.代码高亮

在原来的blog-details.html页面添加下面的代码:


  1. <link href="http://cdn.bootcss.com/highlight.js/9.12.0/styles/googlecode.min.css" rel="stylesheet">
  2. <script src="http://cdn.bootcss.com/highlight.js/8.0/highlight.min.js"></script>
  3. <script>hljs.initHighlightingOnLoad();</script>

它会自动高亮由markdown转换成的代码部分,即


  1. <pre><code></code></pre>

2.统计文章阅读数量

通过在用户浏览器上存储唯一id来保证识别用户

每篇文章每个浏览器只能够每天一次增加浏览数目

首先先为article表添加浏览数目字段


  1. class Article(models.Model):
  2. title = models.CharField(max_length=128)
  3. markdownContent = models.TextField(default='')
  4. htmlContent = models.TextField()
  5. read_num = models.IntegerField(default=0)
  6. creationTime = models.DateTimeField(auto_now_add=True)

然后通过中间件的方式来为用户浏览器设置唯一id


  1. from django.utils.deprecation import MiddlewareMixin
  2. import uuid
  3. class UserIdMiddleware(MiddlewareMixin):
  4. def process_request(self, request):
  5. try:
  6. uid = request.COOKIES['uid']
  7. except KeyError:
  8. uid = uuid.uuid4().hex
  9. request.uid = uid
  10. def process_response(self, request, response):
  11. response.set_cookie('uid',request.uid,max_age=60*60*24*365*10,httponly=True)
  12. return response

并在setting中把中间件加入

接下来修改视图函数,为了方便将原来的视图函数改成了CBV


  1. class Blog_details(View):
  2. def get(self,request,*args,**kwargs):
  3. all_type = models.ArticleType.objects.all()
  4. article_id = request.GET.get('article_id')
  5. if self.is_increase():
  6. models.Article.objects.filter(id=article_id).update(read_num=F('read_num') + 1)
  7. else:
  8. pass
  9. article_obj = models.Article.objects.filter(id=article_id).first()
  10. return render(request, 'show/blog-details.html', {'article_obj': article_obj, 'all_type': all_type})
  11. def is_increase(self):
  12. increase = False
  13. uid = self.request.uid
  14. read_id =uid+self.request.path+str(date.today())
  15. if not cache.get(read_id):
  16. increase = True
  17. cache.set(read_id,1,24*60*60)
  18. return increase

最后在页面一并将浏览数目显示即可

3.添加sitemap

在blog下建立sitemap.py


  1. from django.contrib.sitemaps import Sitemap
  2. from django.urls import reverse
  3. from backend import models
  4. class ArticleSitemap(Sitemap):
  5. changefreq = 'always'
  6. priority = 1.0
  7. protocol = 'http'
  8. def items(self):
  9. return models.Article.objects.all()
  10. def lastmod(self,obj):
  11. return obj.creationTime
  12. def location(self,obj):
  13. return 'blog-details/?article_id='+str(obj.id)

在temlpates下编写sitemap.xml


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  3. {% spaceless %}
  4. {% for url in urlset %}
  5. <url>
  6. <loc>
  7. {{ url.location }}
  8. </loc>
  9. <lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>
  10. <changefreq>{{ url.changefreq }}</changefreq>
  11. <priority>{{ url.priority }}</priority>
  12. </url>
  13. {% endfor %}
  14. {% endspaceless %}
  15. </urlset>

添加url


  1. from django.contrib.sitemaps import views as sitemap_views
  2. from blog.sitemap import ArticleSitemap
  3. urlpatterns = [
  4. path('admin/', admin.site.urls),
  5. path('',views.index),
  6. path('index/',views.index),
  7. path('backend/',include('backend.urls')),
  8. path('blog-details/',views.Blog_details.as_view(),name="blog-details"),
  9. path('saysomethingtome/', views.saysomethingtome),
  10. path('article_comment/',views.article_comment),
  11. path('category/',views.category),
  12. path('category/details/', views.category_details),
  13. path('record/', views.record),
  14. path('about/', views.about),
  15. path('sitemap.xml/',sitemap_views.sitemap,{'sitemaps':{'article':ArticleSitemap}})
  16. ]

之后访问127.0.0.1:8000/sitemap.xml 就可以得到

基于django的个人博客网站建立(七)的更多相关文章

  1. 基于django的个人博客网站建立(三)

    基于django的个人博客网站建立(三) 前言 网站效果可点击这里访问 今天主要完成的是文章在页面的显示以及评论,留言 具体内容 首先我希望主页面是显示我的所有文章,于是在主页面的视图函数中返回了所有 ...

  2. 基于django的个人博客网站建立(二)

    基于django的个人博客网站建立(二) 前言 网站效果可点击这里访问 今天主要完成后台管理员登录的状态以及关于文章在后台的处理 具体内容 首先接上一次内容,昨天只是完成了一个登录的跳转,其他信息并没 ...

  3. 基于django的个人博客网站建立(一)

    基于django的个人博客网站建立(一) 前言 网站效果可点击这里访问 之前基于hexo和github page搭建过一个博客网页,后来由于换了个系统,感觉弄的有点麻烦也就没有再去管它了,最近偶然从网 ...

  4. 基于django的个人博客网站建立(六)

    基于django的个人博客网站建立(六) 前言 今天主要完成的是项目在腾讯云服务器上ubuntu16.04+django+mysql+uwsig+nginx的部署过程网站效果可点击这里访问 主要内容 ...

  5. 基于django的个人博客网站建立(五)

    基于django的个人博客网站建立(五) 前言 网站效果可点击这里访问 之前鸽了两天,今天继续再写点 主要内容 今天加了个展示照片的功能,就叫他生活记录吧 先建表 class Record(model ...

  6. 基于django的个人博客网站建立(四)

    基于django的个人博客网站建立(四) 前言 网站效果可点击这里访问 今天主要添加了留言与评论在后台的管理和主页文章的分页显示,文章类别的具体展示以及之前预留链接的补充 主要内容 其实今天的内容和前 ...

  7. 基于docker搭建wordpress博客网站平台

    WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPre ...

  8. 【docker构建】基于docker构建wordpress博客网站平台

    WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPre ...

  9. 从零搭建基于golang的个人博客网站

    原文链接 : http://www.bugclosed.com/post/14 从零搭建个人博客网站需要包括云服务器(虚拟主机),域名,程序环境,博客程序等方面.本博客 就是通过这几个环节建立起来的, ...

随机推荐

  1. Python3 网络编程和并发编程总结

    目录 网络编程 开发架构 OSI七层模型 socket subprocess 粘包问题 socketserver TCP UDP 并发编程 多道技术 并发和并行 进程 僵尸进程和孤儿进程 守护进程 互 ...

  2. 【全栈修炼】OAuth2 修炼宝典

    一.OAuth 概念 开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. -- 维基百 ...

  3. Cloudflare Workers 部署跨域代理服务

    项目源码:https://github.com/netnr/workers 发布链接:https://cors.zme.ink 使用文档:https://developers.cloudflare.c ...

  4. synchronized和volatile区别

    不同一: synchronized可以修饰方法, volatile只能修饰变量 不同二: synchronized是同步的 volatile修饰的变量具有可见性.

  5. skipping archived logs of thread 1 from sequence 29 to 46; already backed up

    问题描述:删除归档的备份,在进行归档的重新备份,提示:skipping archived logs of thread 1 from sequence 29 to 46; already backed ...

  6. CCF-CSP题解 201612-3 权限查询

    一共有三层信息,三层信息的依赖关系是: \[用户user->角色role->权限authority\] 先存储\(authority\)信息,\(role\)直接存储\(authority ...

  7. 脚本批量执行Redis命令

    1.将命令写在文件中 数据量比较大的话,建议用程序去生成文件.例如: List<String> planIdList = planDao.findAll().parallelStream( ...

  8. python获取淘宝登入cookies

    重点:去新浪微博登入接口登入 一.代码 # coding=utf-8 import requests from selenium.webdriver.common.by import By from ...

  9. Python 使用中出现错误:ImportError: No module named _sqlite3

    解决办法: 1.先安装sqlite3    从sqlite官网:https://www.sqlite.org/download.html 上下载linux环境下的安装包:sqlite-autoconf ...

  10. 服务器(VPS)被墙怎么办?

    比如开发接口用的临时服务器被墙,就可以使用以下方法之一. 方法一(推荐) 为你的服务器分配一个浮动IP 等于给你的 droplet 增加一个新的 ip,我们以后访问这个新的ip就ok了. 直到下一次被 ...