基于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 从零搭建个人博客网站需要包括云服务器(虚拟主机),域名,程序环境,博客程序等方面.本博客 就是通过这几个环节建立起来的, ...
随机推荐
- GlusterFS缺陷
glusterfs缺陷 转自:http://www.liuwq.com/2017/04/20/glusterfs%E8%AF%A6%E8%A7%A3/ glusterfs 原理.优势.使用范围等 Gl ...
- 【JS】403- JavaScript 工具函数大全(新)
前言 一线大厂笔试题灵感来源 目录: 第一部分:数组 第二部分:函数 第三部分:字符串 第四部分:对象 第五部分:数字 第六部分:浏览器操作及其它 筛选自以下两篇文章: <127 Helpful ...
- H5 app在真机调试的时候正常,打包成app后报错
在自己的一个用h5开发的项目中, 环境 IDE HBuilderX 打包工具 Hbuilder线上打包 开发语言 JS 现象 从一个列表进入详细页之后一直转圈圈.因为是调用系统原生的等待组件,界面无法 ...
- WinForm 自定义控件 - RooF
由3个标签组成 直接代码 public partial class Roof : UserControl { public Roof() { InitializeComponent(); } priv ...
- Python异常体系结构图
- 计算密集型和 io 密集型项目的使用场景分析和代码演示
from threading import Thread from multiprocessing import Process import time 计算密集型 def work1(): res= ...
- SpringBoot初探JSP页面可能遇到的坑
第一个坑就是依赖没有配了 网上很多依赖的配置代码 在pom.xml文件的dependencies添加以下依赖 <!-- servlet依赖 --> <dependency> & ...
- YiluPHP是如何做到不用配置、不用注入就能直接使用所有的类?
使用过YiluPHP的人都会发现,不管是模型类还是逻辑类.辅助类还是工具类,使用所有类都不需要在配置文件中设置加载或注入,也不需要在页面中使用 include 或 require 或 use ,直接使 ...
- Python 库打包分发、setup.py 编写、混合 C 扩展打包的简易指南(转载)
转载自:http://blog.konghy.cn/2018/04/29/setup-dot-py/ Python 有非常丰富的第三方库可以使用,很多开发者会向 pypi 上提交自己的 Python ...
- [ASP.NET Core 3框架揭秘] 跨平台开发体验: Mac OS
除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux Distribution(RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE等)都提供 ...