Skip to content

Commit 6f74859

Browse files
committed
将部分配置转移成配置表形式 close liangliangyy#101
1 parent d3d3f8f commit 6f74859

19 files changed

+198
-120
lines changed

DjangoBlog/admin_site.py

+2
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def has_permission(self, request):
5050
admin_site.register(Tag, TagAdmin)
5151
admin_site.register(Links, LinksAdmin)
5252
admin_site.register(SideBar, SideBarAdmin)
53+
admin_site.register(BlogSettings, BlogSettingsAdmin)
5354

5455
admin_site.register(commands, CommandsAdmin)
5556

@@ -58,5 +59,6 @@ def has_permission(self, request):
5859
admin_site.register(Comment, CommentAdmin)
5960

6061
admin_site.register(OAuthUser, OAuthUserAdmin)
62+
admin_site.register(OAuthConfig, OAuthConfigAdmin)
6163

6264
admin_site.register(OwnTrackLog, OwnTrackLogsAdmin)

DjangoBlog/settings.py

+1-42
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'
2828

2929
# ALLOWED_HOSTS = []
30-
ALLOWED_HOSTS = ['www.lylinux.net', '127.0.0.1', 'example.com']
30+
ALLOWED_HOSTS = ['*', 'www.lylinux.net', '127.0.0.1', 'example.com']
3131
# Application definition
3232

3333
INSTALLED_APPS = [
@@ -162,23 +162,11 @@
162162
TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
163163
DATE_TIME_FORMAT = '%Y-%m-%d'
164164

165-
SITE_NAME = '且听风吟'
166-
SITE_URL = 'http://www.lylinux.net'
167-
SITE_DESCRIPTION = '大巧无工,重剑无锋.'
168-
SITE_SEO_DESCRIPTION = '小站主要用来分享和记录学习经验,教程,记录个人生活的点滴以及一些随笔.'
169-
SITE_SEO_KEYWORDS = 'linux,apache,mysql,服务器,ubuntu,shell,web,csharp,.net,asp,mac,swift,python,django'
170-
ARTICLE_SUB_LENGTH = 300
171-
SHOW_GOOGLE_ADSENSE = False
172165
# bootstrap颜色样式
173166
BOOTSTRAP_COLOR_TYPES = [
174167
'default', 'primary', 'success', 'info', 'warning', 'danger'
175168
]
176169

177-
# 侧边栏文章数目
178-
SIDEBAR_ARTICLE_COUNT = 10
179-
# 侧边栏评论数目
180-
SIDEBAR_COMMENT_COUNT = 5
181-
182170
# 分页
183171
PAGINATE_BY = 10
184172
# http缓存时间
@@ -197,35 +185,6 @@
197185
'LOCATION': 'unique-snowflake',
198186
}
199187
}
200-
# CACHE_MIDDLEWARE_SECONDS = 60 * 60 * 10
201-
# CACHE_MIDDLEWARE_KEY_PREFIX = "djangoblog"
202-
# CACHE_MIDDLEWARE_ALIAS = 'default'
203-
204-
# SESSION_ENGINE = "django.contrib.sessions.backends.cache"
205-
# SESSION_CACHE_ALIAS = 'default'
206-
207-
OAHUTH = {
208-
'sina': {
209-
'appkey': os.environ.get('SINA_APP_KEY'),
210-
'appsecret': os.environ.get('SINA_APP_SECRET'),
211-
'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=weibo'
212-
},
213-
'google': {
214-
'appkey': os.environ.get('GOOGLE_APP_KEY'),
215-
'appsecret': os.environ.get('GOOGLE_APP_SECRET'),
216-
'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=google'
217-
},
218-
'github': {
219-
'appkey': os.environ.get('GITHUB_APP_KEY'),
220-
'appsecret': os.environ.get('GITHUB_APP_SECRET'),
221-
'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=github'
222-
},
223-
'facebook': {
224-
'appkey': os.environ.get('FACEBOOK_APP_KEY'),
225-
'appsecret': os.environ.get('FACEBOOK_APP_SECRET'),
226-
'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=facebook'
227-
}
228-
}
229188

230189
SITE_ID = 1
231190
BAIDU_NOTIFY_URL = "http://data.zz.baidu.com/urls?site=https://www.lylinux.net&token=1uAOGrMsUm5syDGn"

DjangoBlog/utils.py

+25
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,28 @@ def parse_dict_to_url(dict):
156156
url = '&'.join(['{}={}'.format(quote(k, safe='/'), quote(v, safe='/'))
157157
for k, v in dict.items()])
158158
return url
159+
160+
161+
def get_blog_setting():
162+
value = cache.get('get_blog_setting')
163+
if value:
164+
logger.info('get cache get_blog_setting')
165+
return value
166+
else:
167+
from blog.models import BlogSettings
168+
if not BlogSettings.objects.count():
169+
setting = BlogSettings()
170+
setting.sitename = 'DjangoBlog'
171+
setting.site_description = '基于Django的博客系统'
172+
setting.site_seo_description = '基于Django的博客系统'
173+
setting.site_keywords = 'Django,Python'
174+
setting.article_sub_length = 300
175+
setting.sidebar_article_count = 10
176+
setting.sidebar_comment_count = 5
177+
setting.show_google_adsense = False
178+
setting.open_site_comment = True
179+
setting.save()
180+
value = BlogSettings.objects.first()
181+
logger.info('set cache get_blog_setting')
182+
cache.set('get_blog_setting', value)
183+
return value

blog/admin.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
21
from django.contrib import admin
32
# Register your models here.
4-
from .models import Article, Category, Tag, Links, SideBar
3+
from .models import Article, Category, Tag, Links, SideBar, BlogSettings
54
from pagedown.widgets import AdminPagedownWidget
65
from django import forms
76
from django.contrib.auth import get_user_model
87
from django.utils.translation import ugettext_lazy as _
98

109

11-
12-
1310
class ArticleListFilter(admin.SimpleListFilter):
1411
title = _("作者")
1512
parameter_name = 'author'
@@ -105,4 +102,5 @@ class SideBarAdmin(admin.ModelAdmin):
105102
exclude = ('last_mod_time', 'created_time')
106103

107104

108-
105+
class BlogSettingsAdmin(admin.ModelAdmin):
106+
pass

blog/context_processors.py

+12-10
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
@file: context_processors.py
1313
@time: 2016/11/6 下午4:23
1414
"""
15-
from .models import Category, Article, Tag
15+
from .models import Category, Article, Tag, BlogSettings
1616
from django.conf import settings
1717
from comments.models import Comment
18-
from DjangoBlog.utils import logger, cache
18+
from DjangoBlog.utils import logger, cache, get_blog_setting
1919

2020

2121
def seo_processor(requests):
@@ -26,18 +26,20 @@ def seo_processor(requests):
2626
return value
2727
else:
2828
logger.info('set processor cache.')
29+
setting = get_blog_setting()
2930
value = {
30-
'SITE_NAME': settings.SITE_NAME,
31-
'SHOW_GOOGLE_ADSENSE': settings.SHOW_GOOGLE_ADSENSE,
32-
'SITE_SEO_DESCRIPTION': settings.SITE_SEO_DESCRIPTION,
33-
'SITE_DESCRIPTION': settings.SITE_DESCRIPTION,
34-
'SITE_KEYWORDS': settings.SITE_SEO_KEYWORDS,
31+
'SITE_NAME': setting.sitename,
32+
'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense,
33+
'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes,
34+
'SITE_SEO_DESCRIPTION': setting.site_seo_description,
35+
'SITE_DESCRIPTION': setting.site_description,
36+
'SITE_KEYWORDS': setting.site_keywords,
3537
'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/',
36-
'ARTICLE_SUB_LENGTH': settings.ARTICLE_SUB_LENGTH,
38+
'ARTICLE_SUB_LENGTH': setting.article_sub_length,
3739
'nav_category_list': Category.objects.all(),
3840
'nav_pages': Article.objects.filter(type='p', status='p'),
39-
# 'MAX_COMMENTID': Comment.objects.latest().pk,
40-
# 'MAX_ARTICLEID': Article.objects.latest().pk
41+
'OPEN_SITE_COMMENT': setting.open_site_comment,
42+
4143
}
4244
cache.set(key, value, 60 * 60 * 10)
4345
return value

blog/models.py

+32
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from django.conf import settings
44
from uuslug import slugify
55

6+
from django.core.exceptions import ValidationError
7+
from django.utils.translation import gettext_lazy as _
68
from django.contrib.sites.models import Site
79
from DjangoBlog.utils import cache_decorator, logger, cache
810
from django.utils.functional import cached_property
@@ -229,3 +231,33 @@ class Meta:
229231

230232
def __str__(self):
231233
return self.name
234+
235+
236+
class BlogSettings(models.Model):
237+
'''站点设置 '''
238+
sitename = models.CharField("网站名称", max_length=200, null=False, blank=False, default='')
239+
site_description = models.TextField("网站描述", max_length=1000, null=False, blank=False, default='')
240+
site_seo_description = models.TextField("网站SEO描述", max_length=1000, null=False, blank=False, default='')
241+
site_keywords = models.TextField("网站关键字", max_length=1000, null=False, blank=False, default='')
242+
article_sub_length = models.IntegerField("文章摘要长度", default=300)
243+
sidebar_article_count = models.IntegerField("侧边栏文章数目", default=10)
244+
sidebar_comment_count = models.IntegerField("侧边栏评论数目", default=5)
245+
show_google_adsense = models.BooleanField('是否显示谷歌广告', default=False)
246+
google_adsense_codes = models.TextField('广告内容', max_length=2000, null=True)
247+
open_site_comment = models.BooleanField('是否打开网站评论功能', default=True)
248+
249+
class Meta:
250+
verbose_name = '网站配置'
251+
verbose_name_plural = verbose_name
252+
253+
def __str__(self):
254+
return self.sitename
255+
256+
def clean(self):
257+
if BlogSettings.objects.exclude(id=self.id).count():
258+
raise ValidationError(_('只能有一个配置'))
259+
260+
def save(self, *args, **kwargs):
261+
from DjangoBlog.utils import cache
262+
cache.clear()
263+
super().save(*args, **kwargs)

blog/templatetags/blog_tags.py

+14-8
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,16 @@ def load_sidebar(user):
123123
:return:
124124
"""
125125
logger.info('load sidebar')
126-
recent_articles = Article.objects.filter(status='p')[:settings.SIDEBAR_ARTICLE_COUNT]
126+
from DjangoBlog.utils import get_blog_setting
127+
blogsetting = get_blog_setting()
128+
recent_articles = Article.objects.filter(status='p')[:blogsetting.sidebar_article_count]
127129
sidebar_categorys = Category.objects.all()
128130
extra_sidebars = SideBar.objects.filter(is_enable=True).order_by('sequence')
129-
most_read_articles = Article.objects.filter(status='p').order_by('-views')[:settings.SIDEBAR_ARTICLE_COUNT]
131+
most_read_articles = Article.objects.filter(status='p').order_by('-views')[:blogsetting.sidebar_article_count]
130132
dates = Article.objects.datetimes('created_time', 'month', order='DESC')
131133
links = Links.objects.all()
132-
commment_list = Comment.objects.filter(is_enable=True).order_by('-id')[:settings.SIDEBAR_COMMENT_COUNT]
133-
show_adsense = settings.SHOW_GOOGLE_ADSENSE
134+
commment_list = Comment.objects.filter(is_enable=True).order_by('-id')[:blogsetting.sidebar_comment_count]
135+
# show_adsense = settings.SHOW_GOOGLE_ADSENSE
134136
# 标签云 计算字体大小
135137
# 根据总数计算出平均值 大小为 (数目/平均值)*步长
136138
increment = 5
@@ -150,7 +152,9 @@ def load_sidebar(user):
150152
'sidabar_links': links,
151153
'sidebar_comments': commment_list,
152154
'user': user,
153-
'show_adsense': show_adsense,
155+
'show_google_adsense': blogsetting.show_google_adsense,
156+
'google_adsense_codes': blogsetting.google_adsense_codes,
157+
'open_site_comment': blogsetting.open_site_comment,
154158
'sidebar_tags': sidebar_tags,
155159
'extra_sidebars': extra_sidebars
156160
}
@@ -232,10 +236,14 @@ def load_article_detail(article, isindex, user):
232236
:param isindex:是否列表页,若是列表页只显示摘要
233237
:return:
234238
"""
239+
from DjangoBlog.utils import get_blog_setting
240+
blogsetting = get_blog_setting()
241+
235242
return {
236243
'article': article,
237244
'isindex': isindex,
238-
'user': user
245+
'user': user,
246+
'open_site_comment': blogsetting.open_site_comment,
239247
}
240248

241249

@@ -275,5 +283,3 @@ def query(qs, **kwargs):
275283
{% endfor %}
276284
"""
277285
return qs.filter(**kwargs)
278-
279-

blog/tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def test_validate_feed(self):
151151

152152
def test_image(self):
153153
import requests
154-
rsp = requests.get('https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2909203028,3998034658&fm=96')
154+
rsp = requests.get('https://www.lylinux.net/static/blog/img/avatar.png')
155155
imagepath = os.path.join(settings.BASE_DIR, 'django.jpg')
156156
with open(imagepath, 'wb') as file:
157157
file.write(rsp.content)

oauth/admin.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
from django.contrib import admin
22
# Register your models here.
3-
from .models import OAuthUser
3+
from .models import OAuthUser, OAuthConfig
44

55

66
class OAuthUserAdmin(admin.ModelAdmin):
77
list_display = ('id', 'author', 'nikename', 'type', 'picture', 'email',)
88
list_display_links = ('id', 'nikename')
99
list_filter = ('author', 'type',)
10+
11+
12+
class OAuthConfigAdmin(admin.ModelAdmin):
13+
list_display = ('type', 'appkey', 'appsecret', 'is_enable')
14+
list_filter = ('type',)

oauth/models.py

+29
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
# Create your models here.
44
from django.conf import settings
55
from django.utils.timezone import now
6+
from django.core.exceptions import ValidationError
7+
from django.utils.translation import gettext_lazy as _
68

79

810
class OAuthUser(models.Model):
@@ -24,3 +26,30 @@ def __str__(self):
2426
class Meta:
2527
verbose_name = 'oauth用户'
2628
verbose_name_plural = verbose_name
29+
30+
31+
class OAuthConfig(models.Model):
32+
TYPE = (
33+
('weibo', '微博'),
34+
('google', '谷歌'),
35+
('github', 'GitHub'),
36+
('facebook', 'FaceBook'),
37+
)
38+
type = models.CharField('类型', max_length=10, choices=TYPE, default='a')
39+
appkey = models.CharField(max_length=200, verbose_name='AppKey')
40+
appsecret = models.CharField(max_length=200, verbose_name='AppSecret')
41+
callback_url = models.CharField(max_length=200, verbose_name='回调地址', blank=False, default='http://www.baidu.com')
42+
is_enable = models.BooleanField('是否显示', default=True, blank=False, null=False)
43+
created_time = models.DateTimeField('创建时间', default=now)
44+
last_mod_time = models.DateTimeField('修改时间', default=now)
45+
46+
def clean(self):
47+
if OAuthConfig.objects.filter(type=self.type).exclude(id=self.id).count():
48+
raise ValidationError(_(self.type + '已经存在'))
49+
50+
def __str__(self):
51+
return self.type
52+
53+
class Meta:
54+
verbose_name = 'oauth配置'
55+
verbose_name_plural = verbose_name

0 commit comments

Comments
 (0)