缓存优化

liangliangyy 9 years ago
parent b70f811d13
commit 00f995eb02

@ -17,7 +17,7 @@ from django.contrib.syndication.views import Feed
from blog.models import Article
from django.conf import settings
from django.utils.feedgenerator import Rss201rev2Feed
from DjangoBlog.common_markdown import common_markdown
from DjangoBlog.utils import common_markdown
from django.contrib.auth import get_user_model
from django.contrib.auth.models import User
from django.contrib.sites.models import Site

@ -5,20 +5,42 @@
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.org/
@software: PyCharm
@file: common_markdown.py
@time: 2017/1/14 上午2:30
@file: utils.py
@time: 2017/1/19 上午2:30
"""
from django.core.cache import cache
from hashlib import md5
import mistune
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import html
def cache_decorator(expiration=3 * 60):
def wrapper(func):
def news(*args, **kwargs):
unique_str = repr((func, args, kwargs))
m = md5(unique_str.encode('utf-8'))
key = m.hexdigest()
value = cache.get(key)
if value:
print('get key: ' + key)
return value
else:
print('set key:' + key)
value = func(*args, **kwargs)
cache.set(key, value, expiration)
return value
return news
return wrapper
def block_code(text, lang, inlinestyles=False, linenos=False):
if not lang:
text = text.strip()
@ -40,6 +62,9 @@ def block_code(text, lang, inlinestyles=False, linenos=False):
class BlogMarkDownRenderer(mistune.Renderer):
def image(self, src, title, text):
html = super.im
def block_code(self, text, lang):
# renderer has an options
inlinestyles = self.options.get('inlinestyles')

@ -14,17 +14,25 @@
"""
from .models import Category, Article, Tag
from django.conf import settings
from django.core.cache import cache
def seo_processor(requests):
return {
'SITE_NAME': settings.SITE_NAME,
'SHOW_GOOGLE_ADSENSE': settings.SHOW_GOOGLE_ADSENSE,
'SITE_SEO_DESCRIPTION': settings.SITE_SEO_DESCRIPTION,
'SITE_DESCRIPTION': settings.SITE_DESCRIPTION,
'SITE_KEYWORDS': settings.SITE_SEO_KEYWORDS,
'SITE_BASE_URL': 'http://' + requests.get_host() + '/',
'ARTICLE_SUB_LENGTH': settings.ARTICLE_SUB_LENGTH,
'nav_category_list': Category.objects.all(),
'nav_pages': Article.objects.filter(type='p', status='p')
}
key = 'seo_processor'
value = cache.get(key)
if value:
return value
else:
value = {
'SITE_NAME': settings.SITE_NAME,
'SHOW_GOOGLE_ADSENSE': settings.SHOW_GOOGLE_ADSENSE,
'SITE_SEO_DESCRIPTION': settings.SITE_SEO_DESCRIPTION,
'SITE_DESCRIPTION': settings.SITE_DESCRIPTION,
'SITE_KEYWORDS': settings.SITE_SEO_KEYWORDS,
'SITE_BASE_URL': 'https://' + requests.get_host() + '/',
'ARTICLE_SUB_LENGTH': settings.ARTICLE_SUB_LENGTH,
'nav_category_list': Category.objects.all(),
'nav_pages': Article.objects.filter(type='p', status='p')
}
cache.set(key, value, 60 * 60 * 10)
return value

@ -5,9 +5,32 @@ from django.conf import settings
from uuslug import slugify
from DjangoBlog.spider_notify import sipder_notify
from django.contrib.sites.models import Site
from DjangoBlog.utils import cache_decorator
from django.utils.functional import cached_property
class BaseModel(models.Model):
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if 'update_fields' in kwargs and len(kwargs['update_fields']) == 1 and kwargs['update_fields'][0] == 'views':
return
try:
notify = sipder_notify()
notify_url = self.get_full_url()
notify.baidu_notify(notify_url)
except Exception as ex:
print(ex)
def get_full_url(self):
site = Site.objects.get_current().domain
url = "https://{site}{path}".format(site=site, path=self.get_absolute_url())
return url
class Meta:
abstract = True
class Article(models.Model):
class Article(BaseModel):
"""文章"""
STATUS_CHOICES = (
('d', '草稿'),
@ -57,6 +80,7 @@ class Article(models.Model):
'slug': self.slug
})
@cache_decorator(60 * 60 * 10)
def get_category_tree(self):
names = []
@ -73,17 +97,20 @@ class Article(models.Model):
if not self.slug or self.slug == 'no-slug' or not self.id:
# Only set the slug when the object is created.
self.slug = slugify(self.title)
"""
try:
notify = sipder_notify()
notify.notify(self.get_full_url())
except Exception as e:
print(e)
"""
super().save(*args, **kwargs)
def viewed(self):
self.views += 1
self.save(update_fields=['views'])
@cache_decorator(60 * 60 * 10)
def comment_list(self):
comments = self.comment_set.all()
parent_comments = comments.filter(parent_comment=None)
@ -92,10 +119,15 @@ class Article(models.Model):
info = (self._meta.app_label, self._meta.model_name)
return reverse('admin:%s_%s_change' % info, args=(self.pk,))
def get_full_url(self):
site = Site.objects.get_current().domain
article_url = "https://{site}{path}".format(site=site, path=self.get_absolute_url())
return article_url
@cached_property
def next_article(self):
# 下一篇
return Article.objects.filter(id__gt=self.id, status=0).order_by('id').first()
@cached_property
def prev_article(self):
# 前一篇
return Article.objects.filter(id__lt=self.id, status=0).first()
'''
@ -162,7 +194,7 @@ class BlogPage(models.Model):
'''
class Category(models.Model):
class Category(BaseModel):
"""文章分类"""
name = models.CharField('分类名', max_length=30)
created_time = models.DateTimeField('创建时间', auto_now_add=True)
@ -180,16 +212,8 @@ class Category(models.Model):
def __str__(self):
return self.name
def save(self, *args, **kwargs):
try:
notify = sipder_notify()
notify.notify(self.get_absolute_url())
except Exception as e:
print(e)
super().save(*args, **kwargs)
class Tag(models.Model):
class Tag(BaseModel):
"""文章标签"""
name = models.CharField('标签名', max_length=30)
created_time = models.DateTimeField('创建时间', auto_now_add=True)
@ -201,6 +225,7 @@ class Tag(models.Model):
def get_absolute_url(self):
return reverse('blog:tag_detail', kwargs={'tag_name': self.name})
@cache_decorator(60 * 60 * 10)
def get_article_count(self):
return Article.objects.filter(tags__name=self.name).distinct().count()
@ -209,14 +234,6 @@ class Tag(models.Model):
verbose_name = "标签"
verbose_name_plural = verbose_name
def save(self, *args, **kwargs):
try:
notify = sipder_notify()
notify.notify(self.get_absolute_url())
except Exception as e:
print(e)
super().save(*args, **kwargs)
class Links(models.Model):
"""友情链接"""

@ -49,7 +49,7 @@ def datetimeformat(data):
@register.filter(is_safe=True)
@stringfilter
def custom_markdown(content):
from DjangoBlog.common_markdown import common_markdown
from DjangoBlog.utils import common_markdown
return mark_safe(common_markdown.get_markdown(content))

@ -74,17 +74,12 @@ class ArticleDetailView(DetailView):
obj = super(ArticleDetailView, self).get_object()
obj.viewed()
# obj.body = markdown2.markdown(obj.body)
self.object = obj
return obj
def get_context_data(self, **kwargs):
articleid = int(self.kwargs[self.pk_url_kwarg])
def get_article(id):
try:
return Article.objects.get(pk=id)
except ObjectDoesNotExist:
return None
comment_form = CommentForm()
u = self.request.user
@ -102,10 +97,9 @@ class ArticleDetailView(DetailView):
kwargs['form'] = comment_form
kwargs['article_comments'] = article_comments
kwargs['comment_count'] = len(article_comments) if article_comments else 0;
next_article = get_article(articleid + 1)
prev_article = get_article(articleid - 1)
kwargs['next_article'] = next_article
kwargs['prev_article'] = prev_article
kwargs['next_article'] = self.object.next_article
kwargs['prev_article'] = self.object.prev_article
return super(ArticleDetailView, self).get_context_data(**kwargs)

@ -23,17 +23,20 @@
标签
{% endif %}
{% endif %}
<span class="by-author">作者是<span class="author vcard"><a class="url fn n"
href="{{ article.author.get_absolute_url }}"
title="查看所有由{{ article.author.username }}发布的文章"
rel="author">
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<span class="by-author">作者是
<span class="author vcard">
<a class="url fn n" href="{{ article.author.get_absolute_url }}"
title="查看所有由{{ article.author.username }}发布的文章"
rel="author">
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<span itemprop="name">
<span itemprop="name" itemprop="publisher">
{{ article.author.username }}
</span></span>
</a></span>
{{ article.author.username }}
</span>
</span>
</a>
</span>
{% if user.is_authenticated %}
<a href="{{ article.get_admin_url }}">编辑</a>
{% endif %}

@ -1,4 +1,5 @@
{% load static %}
{% load cache %}
<!DOCTYPE html>
<!--[if IE 7]>
<html class="ie ie7" lang="zh-CN" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#">
@ -53,16 +54,20 @@
<h2 class="site-description">{{ SITE_DESCRIPTION }}</h2>
</hgroup>
{% cache 36000 sidebar %}
{% include 'share_layout/nav.html' %}
{% endcache %}
{% include 'share_layout/nav.html' %}
</header><!-- #masthead -->
<div id="main" class="wrapper">
{% block content %}
{% endblock %}
{% block sidebar %}
{% endblock %}
{% cache 36000 nav %}
{% block sidebar %}
{% endblock %}
{% endcache %}
</div><!-- #main .wrapper -->
{% include 'share_layout/footer.html' %}
</div><!-- #page -->

Loading…
Cancel
Save