基于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 从零搭建个人博客网站需要包括云服务器(虚拟主机),域名,程序环境,博客程序等方面.本博客 就是通过这几个环节建立起来的, ...
随机推荐
- BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: ...
- 深入理解 Java 反射和动态代理
- 【JS】394- 简明 JavaScript 函数式编程-入门篇
转载自公众号"程序员成长指北" 写在开头 本文较长,总共分为三大部分:(对于函数式编程以及其优点有一定理解的童鞋,可以直接从 第二部分 开始阅读) 第一部分:首先会通过实际代码介绍 ...
- 02 | Java内存模型:看Java如何解决可见性和有序性问题
什么是 Java 内存模型? 导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性. 有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性能可就堪忧了. 合理 ...
- docker安装与配置
Docker与虚拟化技术的区别 虚拟机分配多少宿主机就减少多少资源,比如VMware1分配了2Gb内存,如果运行5Gb的应用程序会造成内存溢出,vmware2分配了2Gb内存,如果运行2Gb的应用程序 ...
- LVS+Keepalived-DR模式
Environment:4台CentOS机器 两台LVS 两台web服务器 LVS主备的操作,都需要安装ipvsadm和keepalived yum -y install ipvsadm keepal ...
- luogu1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
推荐博客:模拟退火总结(模拟退火)by FlashHu.模拟退火的原理,差不多就是不断地由现有的值不断地试探,不断地转到更优的值,并在一定概率下转到较差的值. 题目传送门:luogu1337 [JSO ...
- 判断机器CPU的大小端模式并将数据转换成小端形式
首先看一下概念 Little-Endian 就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端 Big-Endian 就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端. 第一 ...
- C++ lambda expression
Emerged since c++11, lambda expression/function is an unnamed function object capable of capturing v ...
- Android 基于ksoap2的webservice请求的学习
[学习阶段] WebService网络请求? 其实我也是第一次遇到,之所以有这个需要是因为一些与 ERP 相关的业务,需要用到这样的一个请求方式. 开始学习WebService ①当然是百度搜索,这里 ...