基于django的个人博客网站建立(七)
基于django的个人博客网站建立(七)
前言
网站效果可点击这里访问
这次在原来的基础上添加或修改一些小功能
具体内容
1.代码高亮
在原来的blog-details.html页面添加下面的代码:
<link href="http://cdn.bootcss.com/highlight.js/9.12.0/styles/googlecode.min.css" rel="stylesheet">
<script src="http://cdn.bootcss.com/highlight.js/8.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
它会自动高亮由markdown转换成的代码部分,即
<pre><code></code></pre>
2.统计文章阅读数量
通过在用户浏览器上存储唯一id来保证识别用户
每篇文章每个浏览器只能够每天一次增加浏览数目
首先先为article表添加浏览数目字段
class Article(models.Model):
title = models.CharField(max_length=128)
markdownContent = models.TextField(default='')
htmlContent = models.TextField()
read_num = models.IntegerField(default=0)
creationTime = models.DateTimeField(auto_now_add=True)
然后通过中间件的方式来为用户浏览器设置唯一id
from django.utils.deprecation import MiddlewareMixin
import uuid
class UserIdMiddleware(MiddlewareMixin):
def process_request(self, request):
try:
uid = request.COOKIES['uid']
except KeyError:
uid = uuid.uuid4().hex
request.uid = uid
def process_response(self, request, response):
response.set_cookie('uid',request.uid,max_age=60*60*24*365*10,httponly=True)
return response
并在setting中把中间件加入
接下来修改视图函数,为了方便将原来的视图函数改成了CBV
class Blog_details(View):
def get(self,request,*args,**kwargs):
all_type = models.ArticleType.objects.all()
article_id = request.GET.get('article_id')
if self.is_increase():
models.Article.objects.filter(id=article_id).update(read_num=F('read_num') + 1)
else:
pass
article_obj = models.Article.objects.filter(id=article_id).first()
return render(request, 'show/blog-details.html', {'article_obj': article_obj, 'all_type': all_type})
def is_increase(self):
increase = False
uid = self.request.uid
read_id =uid+self.request.path+str(date.today())
if not cache.get(read_id):
increase = True
cache.set(read_id,1,24*60*60)
return increase
最后在页面一并将浏览数目显示即可
3.添加sitemap
在blog下建立sitemap.py
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from backend import models
class ArticleSitemap(Sitemap):
changefreq = 'always'
priority = 1.0
protocol = 'http'
def items(self):
return models.Article.objects.all()
def lastmod(self,obj):
return obj.creationTime
def location(self,obj):
return 'blog-details/?article_id='+str(obj.id)
在temlpates下编写sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% spaceless %}
{% for url in urlset %}
<url>
<loc>
{{ url.location }}
</loc>
<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>
<changefreq>{{ url.changefreq }}</changefreq>
<priority>{{ url.priority }}</priority>
</url>
{% endfor %}
{% endspaceless %}
</urlset>
添加url
from django.contrib.sitemaps import views as sitemap_views
from blog.sitemap import ArticleSitemap
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.index),
path('index/',views.index),
path('backend/',include('backend.urls')),
path('blog-details/',views.Blog_details.as_view(),name="blog-details"),
path('saysomethingtome/', views.saysomethingtome),
path('article_comment/',views.article_comment),
path('category/',views.category),
path('category/details/', views.category_details),
path('record/', views.record),
path('about/', views.about),
path('sitemap.xml/',sitemap_views.sitemap,{'sitemaps':{'article':ArticleSitemap}})
]
之后访问127.0.0.1:8000/sitemap.xml 就可以得到

基于django的个人博客网站建立(七)的更多相关文章
- 基于django的个人博客网站建立(三)
基于django的个人博客网站建立(三) 前言 网站效果可点击这里访问 今天主要完成的是文章在页面的显示以及评论,留言 具体内容 首先我希望主页面是显示我的所有文章,于是在主页面的视图函数中返回了所有 ...
- 基于django的个人博客网站建立(二)
基于django的个人博客网站建立(二) 前言 网站效果可点击这里访问 今天主要完成后台管理员登录的状态以及关于文章在后台的处理 具体内容 首先接上一次内容,昨天只是完成了一个登录的跳转,其他信息并没 ...
- 基于django的个人博客网站建立(一)
基于django的个人博客网站建立(一) 前言 网站效果可点击这里访问 之前基于hexo和github page搭建过一个博客网页,后来由于换了个系统,感觉弄的有点麻烦也就没有再去管它了,最近偶然从网 ...
- 基于django的个人博客网站建立(六)
基于django的个人博客网站建立(六) 前言 今天主要完成的是项目在腾讯云服务器上ubuntu16.04+django+mysql+uwsig+nginx的部署过程网站效果可点击这里访问 主要内容 ...
- 基于django的个人博客网站建立(五)
基于django的个人博客网站建立(五) 前言 网站效果可点击这里访问 之前鸽了两天,今天继续再写点 主要内容 今天加了个展示照片的功能,就叫他生活记录吧 先建表 class Record(model ...
- 基于django的个人博客网站建立(四)
基于django的个人博客网站建立(四) 前言 网站效果可点击这里访问 今天主要添加了留言与评论在后台的管理和主页文章的分页显示,文章类别的具体展示以及之前预留链接的补充 主要内容 其实今天的内容和前 ...
- 基于docker搭建wordpress博客网站平台
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPre ...
- 【docker构建】基于docker构建wordpress博客网站平台
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPre ...
- 从零搭建基于golang的个人博客网站
原文链接 : http://www.bugclosed.com/post/14 从零搭建个人博客网站需要包括云服务器(虚拟主机),域名,程序环境,博客程序等方面.本博客 就是通过这几个环节建立起来的, ...
随机推荐
- MySQL InnoDB 存储引擎原理浅析
注:本文主要基于MySQL 5.6以后版本编写,多数知识来着书籍<MySQL技术内幕++InnoDB存储引擎>,本文章仅记录个人认为比较重要的部分,有兴趣的可以花点时间读原书. 一.MyS ...
- Linux搭建Java环境(JDK+Tomcat+MySQL)
目录 一.项目环境: 二.安装JDK1.8 三.安装Tomcat8.5 四.安装MySQL数据库 五.配置JAVA项目 一.项目环境: 开发环境 生产环境 测试环境 硬件环境: web服务器:cpu: ...
- JAVA中SPI机制
之前研究dubbo的时候就很好奇,里面各种扩展机制,期间也看过很多关于SPI的机制,今日有缘再度看到有文章总结,故记录一下, 首先了解一下 JAVA中SPI简单的用法 可参考这篇文章,https:// ...
- 这道Java基础题真的有坑!我求求你,认真思考后再回答。
本文目录 一.题是什么题? 二.阿里Java开发规范. 2.1 正例代码. 2.2 反例代码. 三.层层揭秘,为什么发生异常了呢? 3.1 第一层:异常信息解读. 3.2 第二层:抛出异常的条件解读. ...
- python学习-文件创建读取
# 文件创建 # 读写# 文件存在?不存在?在操作系统上# 读 read r 写 write w# 打开一个文件# fs = open("xiaojian.txt",encodin ...
- 中国剩余定理(CRT)及其拓展(ExCRT)
中国剩余定理 CRT 推导 给定\(n\)个同余方程 \[ \left\{ \begin{aligned} x &\equiv a_1 \pmod{m_1} \\ x &\equiv ...
- Typroa 常用快捷键
Typora 常用快捷键 文件操作 Ctrl + N :新建文件 Ctrl + shift + N :新建窗口 Ctrl + O :打开 Ctrl + P : 快速打开(快速打开之前编辑过的历史文件) ...
- IT兄弟连 HTML5教程 响应式网站的内容设计
基于响应式开发网站,除了页面的布局是我们设计的重点,网站中显示的图片和文字也是我们不能轻视的内容. 1 响应式图片显示内容设计 真正具有响应性的Web设计是完全调整网站以满足访问者的设备.我们需要在 ...
- 3. abp依赖注入的分析.md
abp依赖注入的原理剖析 请先移步参考 [Abp vNext 源码分析] - 3. 依赖注入与拦截器 本文此篇文章的补充和完善. abp的依赖注入最后是通过IConventionalRegister接 ...
- XAF Architecture XAF架构
Applications built with the eXpressApp Framework are comprised of several functional blocks. The dia ...