diff --git a/DjangoBlog/settings.py b/DjangoBlog/settings.py index cb25d96..1ed9316 100644 --- a/DjangoBlog/settings.py +++ b/DjangoBlog/settings.py @@ -35,6 +35,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.sitemaps', 'pagedown', 'blog', 'accounts', @@ -60,8 +61,7 @@ ROOT_URLCONF = 'DjangoBlog.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'templates')] - , + 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ diff --git a/DjangoBlog/sitemap.py b/DjangoBlog/sitemap.py new file mode 100644 index 0000000..ae7d3db --- /dev/null +++ b/DjangoBlog/sitemap.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# encoding: utf-8 + + +""" +@version: ?? +@author: liangliangyy +@license: MIT Licence +@contact: liangliangyy@gmail.com +@site: https://www.lylinux.org/ +@software: PyCharm +@file: sitemap.py +@time: 2016/12/15 下午10:26 +""" + +from django.contrib.sitemaps import Sitemap +from blog.models import Article, Category, Tag +from accounts.models import BlogUser +from django.contrib.sitemaps import GenericSitemap +from django.core.urlresolvers import reverse + + +class StaticViewSitemap(Sitemap): + priority = 0.5 + changefreq = 'daily' + + def items(self): + return ['blog:index', ] + + def location(self, item): + return reverse(item) + + +class ArticleSiteMap(Sitemap): + changefreq = "monthly" + priority = "0.6" + + def items(self): + return Article.objects.filter(status='p') + + def lastmod(self, obj): + return obj.last_mod_time + + +class CategorySiteMap(Sitemap): + changefreq = "Weekly" + priority = "0.6" + + def items(self): + return Category.objects.all() + + def lastmod(self, obj): + return obj.last_mod_time + + +class TagSiteMap(Sitemap): + changefreq = "Weekly" + priority = "0.3" + + def items(self): + return Tag.objects.all() + + def lastmod(self, obj): + return obj.last_mod_time + + +class UserSiteMap(Sitemap): + changefreq = "Weekly" + priority = "0.3" + + def items(self): + return BlogUser.objects.all() + + def lastmod(self, obj): + return obj.date_joined diff --git a/DjangoBlog/urls.py b/DjangoBlog/urls.py index 623518e..bf0b54b 100644 --- a/DjangoBlog/urls.py +++ b/DjangoBlog/urls.py @@ -15,6 +15,17 @@ Including another URLconf """ from django.conf.urls import url, include from django.contrib import admin +from django.contrib.sitemaps.views import sitemap +from DjangoBlog.sitemap import StaticViewSitemap, ArticleSiteMap, CategorySiteMap, TagSiteMap, UserSiteMap + +sitemaps = { + + 'blog': ArticleSiteMap, + 'Category': CategorySiteMap, + 'Tag': TagSiteMap, + 'User': UserSiteMap, + 'static': StaticViewSitemap +} urlpatterns = [ url(r'^admin/', admin.site.urls), @@ -22,5 +33,7 @@ urlpatterns = [ url(r'', include('comments.urls', namespace='comment', app_name='comments')), url(r'', include('accounts.urls', namespace='account', app_name='accounts')), - url(r'', include('oauth.urls', namespace='oauth', app_name='oauth')) + url(r'', include('oauth.urls', namespace='oauth', app_name='oauth')), + url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, + name='django.contrib.sitemaps.views.sitemap') ] diff --git a/blog/admin.py b/blog/admin.py index 76ecff4..7fe03c4 100644 --- a/blog/admin.py +++ b/blog/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin # Register your models here. -from .models import Article, Category, Tag, Links +from .models import Article, Category, Tag, Links, BlogPage from pagedown.widgets import AdminPagedownWidget from django import forms @@ -19,6 +19,7 @@ class ArticlelAdmin(admin.ModelAdmin): admin.site.register(Article, ArticlelAdmin) +admin.site.register(BlogPage, ArticlelAdmin) admin.site.register(Category) admin.site.register(Tag) admin.site.register(Links) diff --git a/blog/models.py b/blog/models.py index 3d7f719..f2992f5 100644 --- a/blog/models.py +++ b/blog/models.py @@ -31,6 +31,7 @@ class Article(models.Model): tags = models.ManyToManyField('Tag', verbose_name='标签集合', blank=True) slug = models.SlugField(default='no-slug', max_length=60, blank=True) + wordpress_id = models.IntegerField() def __str__(self): return self.title @@ -79,12 +80,73 @@ class Article(models.Model): parent_comments = comments.filter(parent_comment=None) +class BlogPage(models.Model): + """文章""" + STATUS_CHOICES = ( + ('d', '草稿'), + ('p', '发表'), + ) + COMMENT_STATUS = ( + ('o', '打开'), + ('c', '关闭'), + ) + title = models.CharField('标题', max_length=200) + 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="不指定发布时间则视为草稿,可以指定未来时间,到时将自动发布。") + status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES, default='o') + comment_status = models.CharField('评论状态', max_length=1, choices=COMMENT_STATUS) + # summary = models.CharField('摘要', max_length=200, blank=True, help_text="可选,若为空将摘取正文的前300个字符。") + views = models.PositiveIntegerField('浏览量', default=0) + + author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE) + slug = models.SlugField(default='no-slug', max_length=60, blank=True) + + class Meta: + ordering = ['-pub_time'] + verbose_name = "页面" + verbose_name_plural = verbose_name + + def __str__(self): + return self.title + + def get_absolute_url(self): + + return reverse('blog:pagedetail', kwargs= + { + 'page_id': self.id, + 'year': self.created_time.year, + 'month': self.created_time.month, + 'day': self.created_time.day, + 'slug': self.slug + }) + + def save(self, *args, **kwargs): + # self.summary = self.summary or self.body[:settings.ARTICLE_SUB_LENGTH] + 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) + + super().save(*args, **kwargs) + + def viewed(self): + self.views += 1 + self.save(update_fields=['views']) + + def comment_list(self): + comments = self.comment_set.all() + parent_comments = comments.filter(parent_comment=None) + + class Category(models.Model): """文章分类""" name = models.CharField('分类名', max_length=30) created_time = models.DateTimeField('创建时间', auto_now_add=True) last_mod_time = models.DateTimeField('修改时间', auto_now=True) parent_category = models.ForeignKey('self', verbose_name="父级分类", blank=True, null=True) + wordpress_category_id = models.IntegerField() class Meta: ordering = ['name'] @@ -103,6 +165,7 @@ class Tag(models.Model): name = models.CharField('标签名', max_length=30) created_time = models.DateTimeField('创建时间', auto_now_add=True) last_mod_time = models.DateTimeField('修改时间', auto_now=True) + wordpress_tag_id = models.IntegerField() def __str__(self): return self.name diff --git a/blog/urls.py b/blog/urls.py index d1f00ae..145a5b3 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -25,8 +25,12 @@ urlpatterns = [ url(r'(?P\d+)/(?P\d+)/(?P\d+)/(?P\d+)-(?P\S+).html$', views.ArticleDetailView.as_view(), name='detail'), - url(r'^category/(?P\S+)$', views.CategoryDetailView.as_view(), name='category_detail'), - url(r'^author/(?P\w+)$', views.AuthorDetailView.as_view(), name='author_detail'), - url(r'^tags/(?P\w+)$', views.TagDetailView.as_view(), name='tag_detail'), + url(r'(?P\d+)/(?P\d+)/(?P\d+)/(?P\d+)-(?P\S+).html$', + views.ArticleDetailView.as_view(), + name='pagedetail'), + url(r'^category/(?P\S+).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'(?P\w+).html$', views.handle_wordpress_post), url(r'^test$', views.test) ] diff --git a/blog/views.py b/blog/views.py index 3e35e1c..73b121a 100644 --- a/blog/views.py +++ b/blog/views.py @@ -12,6 +12,9 @@ from django.core.exceptions import ObjectDoesNotExist from comments.forms import CommentForm from django.conf import settings from django import forms +from blog.wordpress_helper import wordpress_helper +from django import http +from django.http import HttpResponse class ArticleListView(ListView): @@ -102,12 +105,20 @@ class CategoryDetailView(ArticleListView): def get_queryset(self): categoryname = self.kwargs['category_name'] + + try: + categoryname = categoryname.split('/')[-1] + except: + pass article_list = Article.objects.filter(category__name=categoryname, status='p') return article_list def get_context_data(self, **kwargs): categoryname = self.kwargs['category_name'] - + try: + categoryname = categoryname.split('/')[-1] + except: + pass kwargs['page_type'] = CategoryDetailView.page_type kwargs['tag_name'] = categoryname return super(CategoryDetailView, self).get_context_data(**kwargs) @@ -158,7 +169,28 @@ class TagDetailView(ArticleListView): def test(requests): post = Article.objects.all() + import re for p in post: - # p.views += 1 - #p.summary = p.body[:settings.ARTICLE_SUB_LENGTH] + p.body = re.sub('\[code lang="\w+"\]', "'''", p.body) + p.body = re.sub('\[/code\]', "'''", p.body) p.save() + + +def handle_wordpress_post(request, wordpress_slug): + """ + wordpress文章301永久重定向 + :param request: + :param wordpress_slug: + :return: + """ + helper = wordpress_helper() + postid = helper.get_postid_by_postname(wordpress_slug) + print(postid) + if postid != 0: + try: + article = Article.objects.get(wordpress_id=postid) + url = article.get_absolute_url() + return http.HttpResponsePermanentRedirect(url) + except ObjectDoesNotExist: + return HttpResponse(status=404) + return HttpResponse(status=404) diff --git a/templates/base.html b/templates/base.html index 63cdfc2..26c5a1b 100644 --- a/templates/base.html +++ b/templates/base.html @@ -32,7 +32,7 @@ type='text/css' media='all'/> - + {% comment %}{% endcomment %} @@ -65,7 +65,7 @@ {% include 'footer.html' %} - +{% comment %}
@@ -74,8 +74,8 @@ var wpAutoTopSpeed = 1; - - +{% endcomment %} +{% comment %}{% endcomment %} diff --git a/templates/blog/tags/article_meta_info.html b/templates/blog/tags/article_meta_info.html index 8fa8424..1367bde 100644 --- a/templates/blog/tags/article_meta_info.html +++ b/templates/blog/tags/article_meta_info.html @@ -11,7 +11,7 @@ 被贴了 {% for t in article.tags.all %} - + {% if t != article.tags.all.last %} , {% endif %} @@ -20,7 +20,7 @@ 标签。 {% endif %} 作者是逝去日子的博客  |  - + SiteMap  |  - + Baidu SiteMap |  Hosting On