From f80faa36724c509ba4ff12e16c7d9bfc9c56518e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=A6=E4=BA=AE=E4=BA=AE?= Date: Tue, 21 Feb 2017 23:16:26 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E5=88=86=E5=8A=9F=E8=83=BD=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=96=87=E7=AB=A0=E5=86=85?= =?UTF-8?q?=E9=A1=B5=E4=B8=8A=E7=AF=87=E4=B8=8B=E7=AF=87=E6=9C=AA=E6=98=BE?= =?UTF-8?q?=E7=A4=BAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DjangoBlog/settings.py | 4 +-- accounts/views.py | 1 - blog/context_processors.py | 4 +-- blog/models.py | 19 ++++++----- blog/urls.py | 6 ++-- blog/views.py | 52 +++++++++++++----------------- templates/blog/article_detail.html | 3 +- templates/blog/article_index.html | 3 ++ templates/share_layout/base.html | 4 ++- 9 files changed, 48 insertions(+), 48 deletions(-) diff --git a/DjangoBlog/settings.py b/DjangoBlog/settings.py index 68803f7..e520ed8 100644 --- a/DjangoBlog/settings.py +++ b/DjangoBlog/settings.py @@ -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', diff --git a/accounts/views.py b/accounts/views.py index 7312387..b958996 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -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('/') diff --git a/blog/context_processors.py b/blog/context_processors.py index 74fabc6..b576891 100644 --- a/blog/context_processors.py +++ b/blog/context_processors.py @@ -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 diff --git a/blog/models.py b/blog/models.py index f2f5ed2..d18035a 100644 --- a/blog/models.py +++ b/blog/models.py @@ -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): diff --git a/blog/urls.py b/blog/urls.py index 1bb0c31..500479b 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -35,10 +35,12 @@ urlpatterns = [ views.ArticleDetailView.as_view(), name='detail'), - url(r'^blogpage/(?P\d+)/(?P\d+)/(?P\d+)/(?P\d+)-(?P\S+).html$', + url(r'^blogpage/(?P\d+)/(?P\d+)/(?P\d+)/(?P\d+)-(?P[\w-]+).html$', views.ArticleDetailView.as_view(), name='pagedetail'), - url(r'^category/(?P\S+).html$', views.CategoryDetailView.as_view(), name='category_detail'), + url(r'^category/(?P[\w-]+).html$', views.CategoryDetailView.as_view(), name='category_detail'), + # url(r'^category/(?P[\w-]+)/(?P\d+).html$', views.CategoryDetailView.as_view(), + # name='category_detail'), url(r'^author/(?P\w+).html$', views.AuthorDetailView.as_view(), name='author_detail'), url(r'^tag/(?P.+).html$', views.TagDetailView.as_view(), name='tag_detail'), url(r'^upload', views.fileupload, name='upload'), diff --git a/blog/views.py b/blog/views.py index 8af6f5b..f753cef 100644 --- a/blog/views.py +++ b/blog/views.py @@ -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) diff --git a/templates/blog/article_detail.html b/templates/blog/article_detail.html index 68c70b2..cff921b 100755 --- a/templates/blog/article_detail.html +++ b/templates/blog/article_detail.html @@ -1,6 +1,5 @@ {% extends 'share_layout/base.html' %} {% load blog_tags %} - {% block header %} {{ article.title }} | {{ SITE_DESCRIPTION }} @@ -16,7 +15,6 @@ {% endfor %} {% endblock %} - {% block content %}
@@ -47,6 +45,7 @@ {% include 'comments/tags/post_comment.html' %} {% endif %}
+ {% endblock %} diff --git a/templates/blog/article_index.html b/templates/blog/article_index.html index e6e3c4e..f8d91b3 100644 --- a/templates/blog/article_index.html +++ b/templates/blog/article_index.html @@ -1,5 +1,6 @@ {% extends 'share_layout/base.html' %} {% load blog_tags %} + {% block header %} {% if tag_name %} {{ page_type }}:{{ tag_name }} | {{ SITE_DESCRIPTION }} @@ -17,6 +18,7 @@ {% endblock %} {% block content %} +
{% if page_type and tag_name %} @@ -48,6 +50,7 @@ {% endif %}
+ {% endblock %} diff --git a/templates/share_layout/base.html b/templates/share_layout/base.html index 5480514..7eff3d5 100644 --- a/templates/share_layout/base.html +++ b/templates/share_layout/base.html @@ -62,13 +62,15 @@
+ {% block content %} {% endblock %} - {% cache 36000 sidebar request.user.username MAX_COMMENTID MAX_ARTICLEID %} + {% cache 36000 sidebar request.user.username %} {% block sidebar %} {% endblock %} {% endcache %} +
{% include 'share_layout/footer.html' %}