部分功能优化,修复文章内页上篇下篇未显示bug

sh_branch
车亮亮 9 years ago
parent 3115f0ab83
commit f80faa3672

@ -51,9 +51,9 @@ MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.gzip.GZipMiddleware',
# 'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.cache.FetchFromCacheMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',

@ -64,7 +64,6 @@ class LoginView(FormView):
if form.is_valid():
from DjangoBlog.utils import cache
cache.clear()
# login(self.request, form.get_user())
auth.login(self.request, form.get_user())
return HttpResponseRedirect('/')

@ -36,8 +36,8 @@ def seo_processor(requests):
'ARTICLE_SUB_LENGTH': settings.ARTICLE_SUB_LENGTH,
'nav_category_list': Category.objects.all(),
'nav_pages': Article.objects.filter(type='p', status='p'),
'MAX_COMMENTID': Comment.objects.latest().pk,
'MAX_ARTICLEID': Article.objects.latest().pk
# 'MAX_COMMENTID': Comment.objects.latest().pk,
# 'MAX_ARTICLEID': Article.objects.latest().pk
}
cache.set(key, value, 60 * 60 * 10)
return value

@ -9,7 +9,13 @@ from django.utils.functional import cached_property
class BaseModel(models.Model):
slug = models.SlugField(default='no-slug', max_length=60, blank=True)
def save(self, *args, **kwargs):
if not self.slug or self.slug == 'no-slug' or not self.id:
# Only set the slug when the object is created.
slug = self.title if 'title' in self.__dict__ else self.name
self.slug = slugify(slug)
super().save(*args, **kwargs)
if 'update_fields' in kwargs and len(kwargs['update_fields']) == 1 and kwargs['update_fields'][0] == 'views':
@ -48,8 +54,7 @@ class Article(BaseModel):
body = models.TextField('正文')
created_time = models.DateTimeField('创建时间', auto_now_add=True)
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
pub_time = models.DateTimeField('发布时间', blank=True, null=True,
help_text="不指定发布时间则视为草稿,可以指定未来时间,到时将自动发布。")
pub_time = models.DateTimeField('发布时间', blank=True, null=True)
status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES, default='p')
comment_status = models.CharField('评论状态', max_length=1, choices=COMMENT_STATUS, default='o')
type = models.CharField('类型', max_length=1, choices=TYPE, default='a')
@ -59,8 +64,6 @@ class Article(BaseModel):
category = models.ForeignKey('Category', verbose_name='分类', on_delete=models.CASCADE, blank=True, null=True)
tags = models.ManyToManyField('Tag', verbose_name='标签集合', blank=True)
slug = models.SlugField(default='no-slug', max_length=60, blank=True)
def __str__(self):
return self.title
@ -124,12 +127,12 @@ class Article(BaseModel):
@cached_property
def next_article(self):
# 下一篇
return Article.objects.filter(id__gt=self.id, status=0).order_by('id').first()
return Article.objects.filter(id__gt=self.id, status='p').order_by('id').first()
@cached_property
def prev_article(self):
# 前一篇
return Article.objects.filter(id__lt=self.id, status=0).first()
return Article.objects.filter(id__lt=self.id, status='p').first()
'''
@ -209,7 +212,7 @@ class Category(BaseModel):
verbose_name_plural = verbose_name
def get_absolute_url(self):
return reverse('blog:category_detail', kwargs={'category_name': self.name})
return reverse('blog:category_detail', kwargs={'category_name': self.slug})
def __str__(self):
return self.name
@ -225,7 +228,7 @@ class Tag(BaseModel):
return self.name
def get_absolute_url(self):
return reverse('blog:tag_detail', kwargs={'tag_name': self.name})
return reverse('blog:tag_detail', kwargs={'tag_name': self.slug})
@cache_decorator(60 * 60 * 10)
def get_article_count(self):

@ -35,10 +35,12 @@ urlpatterns = [
views.ArticleDetailView.as_view(),
name='detail'),
url(r'^blogpage/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<page_id>\d+)-(?P<slug>\S+).html$',
url(r'^blogpage/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<page_id>\d+)-(?P<slug>[\w-]+).html$',
views.ArticleDetailView.as_view(),
name='pagedetail'),
url(r'^category/(?P<category_name>\S+).html$', views.CategoryDetailView.as_view(), name='category_detail'),
url(r'^category/(?P<category_name>[\w-]+).html$', views.CategoryDetailView.as_view(), name='category_detail'),
# url(r'^category/(?P<category_name>[\w-]+)/(?P<page>\d+).html$', views.CategoryDetailView.as_view(),
# name='category_detail'),
url(r'^author/(?P<author_name>\w+).html$', views.AuthorDetailView.as_view(), name='author_detail'),
url(r'^tag/(?P<tag_name>.+).html$', views.TagDetailView.as_view(), name='tag_detail'),
url(r'^upload', views.fileupload, name='upload'),

@ -45,7 +45,7 @@ class SeoProcessor():
pass
"""
"""
class CachedTemplateView(ListView):
@classonlymethod
def as_view(cls, **initkwargs):
@ -53,9 +53,10 @@ class CachedTemplateView(ListView):
view = super(CachedTemplateView, cls).as_view(**initkwargs)
return cache_page(60 * 60 * 10)(view)
"""
class ArticleListView(CachedTemplateView):
class ArticleListView(ListView):
# template_name属性用于指定使用哪个模板进行渲染
template_name = 'blog/article_index.html'
@ -67,25 +68,13 @@ class ArticleListView(CachedTemplateView):
paginate_by = settings.PAGINATE_BY
page_kwarg = 'page'
def get_cache_key(self):
raise NotImplementedError("implement this function")
def get_view_cache_key(self):
return self.request.get['pages']
class IndexView(ArticleListView):
def get_queryset(self):
"""
try:
# _auth_user_id
from DjangoBlog.utils import SessionStore
s = SessionStore(session_key='_auth_user_id')
print(s)
except:
pass
"""
article_list = Article.objects.filter(type='a', status='p')
# for article in article_list:
# article.body = article.body[0:settings.ARTICLE_SUB_LENGTH]
# # article.body = markdown2.markdown(article.body)
return article_list
@ -97,6 +86,7 @@ class ArticleDetailView(DetailView):
def get_object(self):
obj = super(ArticleDetailView, self).get_object()
obj.viewed()
# obj.body = markdown2.markdown(obj.body)
self.object = obj
@ -128,11 +118,13 @@ class ArticleDetailView(DetailView):
return super(ArticleDetailView, self).get_context_data(**kwargs)
"""
@classonlymethod
def as_view(cls, **initkwargs):
self = cls(**initkwargs)
keyperfix = "blogdetail"
return cache_page(60 * 60 * 10, key_prefix=keyperfix)(super(ArticleDetailView, cls).as_view(**initkwargs))
"""
"""
@ -159,20 +151,13 @@ class PageDetailView(ArticleDetailView):
class CategoryDetailView(ArticleListView):
# template_name = 'article_index.html'
# context_object_name = 'article_list'
# pk_url_kwarg = 'article_name'
page_type = "分类目录归档"
"""
def get_cache_key(self):
categoryname = self.kwargs['category_name']
return "category_list:{categoryname}".format(categoryname=categoryname)
"""
def get_queryset(self):
categoryname = self.kwargs['category_name']
slug = self.kwargs['category_name']
category = Category.objects.get(slug=slug)
categoryname = category.name
self.categoryname = categoryname
try:
categoryname = categoryname.split('/')[-1]
except:
@ -181,7 +166,10 @@ class CategoryDetailView(ArticleListView):
return article_list
def get_context_data(self, **kwargs):
categoryname = self.kwargs['category_name']
# slug = self.kwargs['category_name']
# category = Category.objects.get(slug=slug)
# categoryname = category.name
categoryname = self.categoryname
try:
categoryname = categoryname.split('/')[-1]
except:
@ -221,12 +209,16 @@ class TagDetailView(ArticleListView):
page_type = '分类标签归档'
def get_queryset(self):
tag_name = self.kwargs['tag_name']
slug = self.kwargs['category_name']
tag = Tag.objects.get(slug=slug)
tag_name = tag.name
self.name = tag_name
article_list = Article.objects.filter(tags__name=tag_name)
return article_list
def get_context_data(self, **kwargs):
tag_name = self.kwargs['tag_name']
# tag_name = self.kwargs['tag_name']
tag_name = self.name
kwargs['page_type'] = TagDetailView.page_type
kwargs['tag_name'] = tag_name
return super(TagDetailView, self).get_context_data(**kwargs)

@ -1,6 +1,5 @@
{% extends 'share_layout/base.html' %}
{% load blog_tags %}
{% block header %}
<title>{{ article.title }} | {{ SITE_DESCRIPTION }}</title>
<meta property="og:type" content="article"/>
@ -16,7 +15,6 @@
{% endfor %}
<meta property="og:site_name" content="{{ SITE_NAME }}"/>
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
@ -47,6 +45,7 @@
{% include 'comments/tags/post_comment.html' %}
{% endif %}
</div><!-- #primary -->
{% endblock %}

@ -1,5 +1,6 @@
{% extends 'share_layout/base.html' %}
{% load blog_tags %}
{% block header %}
{% if tag_name %}
<title>{{ page_type }}:{{ tag_name }} | {{ SITE_DESCRIPTION }}</title>
@ -17,6 +18,7 @@
<meta property="og:site_name" content="{{ SITE_NAME }}"/>
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
{% if page_type and tag_name %}
@ -48,6 +50,7 @@
{% endif %}
</div><!-- #content -->
</div><!-- #primary -->
{% endblock %}

@ -62,13 +62,15 @@
</header><!-- #masthead -->
<div id="main" class="wrapper">
{% block content %}
{% endblock %}
{% cache 36000 sidebar request.user.username MAX_COMMENTID MAX_ARTICLEID %}
{% cache 36000 sidebar request.user.username %}
{% block sidebar %}
{% endblock %}
{% endcache %}
</div><!-- #main .wrapper -->
{% include 'share_layout/footer.html' %}
</div><!-- #page -->

Loading…
Cancel
Save