travis_settings.py 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. """
  2. Django settings for website project.
  3. Generated by 'django-admin startproject' using Django 1.10.2.
  4. For more information on this file, see
  5. https://docs.djangoproject.com/en/1.10/topics/settings/
  6. For the full list of settings and their values, see
  7. https://docs.djangoproject.com/en/1.10/ref/settings/
  8. """
  9. import sys
  10. import os
  11. # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
  12. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  13. sys.path.insert(0, os.path.join(BASE_DIR, '.'))
  14. # Quick-start development settings - unsuitable for production
  15. # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
  16. # SECURITY WARNING: keep the secret key used in production secret!
  17. SECRET_KEY = '&3g0bdza#c%dm1lf%5gi&0-*53p3t0m*hmcvo29cn^$ji7je(c'
  18. # SECURITY WARNING: don't run with debug turned on in production!
  19. DEBUG = True
  20. # DEBUG = False
  21. TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'
  22. # ALLOWED_HOSTS = []
  23. ALLOWED_HOSTS = ['www.lylinux.net', '127.0.0.1', 'example.com']
  24. # Application definition
  25. INSTALLED_APPS = [
  26. 'django.contrib.admin',
  27. 'django.contrib.auth',
  28. 'django.contrib.contenttypes',
  29. 'django.contrib.sessions',
  30. 'django.contrib.messages',
  31. 'django.contrib.staticfiles',
  32. 'django.contrib.sites',
  33. 'django.contrib.sitemaps',
  34. 'pagedown',
  35. 'haystack',
  36. 'blog',
  37. 'accounts',
  38. 'comments',
  39. 'oauth',
  40. 'servermanager',
  41. 'owntracks',
  42. 'compressor'
  43. ]
  44. MIDDLEWARE = [
  45. 'django.middleware.security.SecurityMiddleware',
  46. 'django.contrib.sessions.middleware.SessionMiddleware',
  47. 'django.middleware.gzip.GZipMiddleware',
  48. # 'django.middleware.cache.UpdateCacheMiddleware',
  49. 'django.middleware.common.CommonMiddleware',
  50. # 'django.middleware.cache.FetchFromCacheMiddleware',
  51. 'django.middleware.csrf.CsrfViewMiddleware',
  52. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  53. 'django.contrib.messages.middleware.MessageMiddleware',
  54. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  55. 'django.middleware.http.ConditionalGetMiddleware',
  56. # 'blog.middleware.OnlineMiddleware'
  57. ]
  58. ROOT_URLCONF = 'website.urls'
  59. TEMPLATES = [
  60. {
  61. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  62. 'DIRS': [os.path.join(BASE_DIR, 'templates')],
  63. 'APP_DIRS': True,
  64. 'OPTIONS': {
  65. 'context_processors': [
  66. 'django.template.context_processors.debug',
  67. 'django.template.context_processors.request',
  68. 'django.contrib.auth.context_processors.auth',
  69. 'django.contrib.messages.context_processors.messages',
  70. 'blog.context_processors.seo_processor'
  71. ],
  72. },
  73. },
  74. ]
  75. WSGI_APPLICATION = 'website.wsgi.application'
  76. # Database
  77. # https://docs.djangoproject.com/en/1.10/ref/settings/#databases
  78. DATABASES = {
  79. 'default': {
  80. 'ENGINE': 'django.db.backends.mysql',
  81. 'NAME': 'website',
  82. 'USER': 'travis',
  83. 'PASSWORD': '',
  84. 'HOST': '127.0.0.1',
  85. # 'HOST': '192.168.1.120',
  86. # 'USER': 'root',
  87. # 'PASSWORD': 'root',
  88. 'PORT': 3306,
  89. }
  90. }
  91. # Password validation
  92. # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
  93. AUTH_PASSWORD_VALIDATORS = [
  94. {
  95. 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
  96. },
  97. {
  98. 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
  99. },
  100. {
  101. 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
  102. },
  103. {
  104. 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
  105. },
  106. ]
  107. # Internationalization
  108. # https://docs.djangoproject.com/en/1.10/topics/i18n/
  109. LANGUAGE_CODE = 'zh-hans'
  110. TIME_ZONE = 'Asia/Shanghai'
  111. USE_I18N = True
  112. USE_L10N = True
  113. USE_TZ = True
  114. # Static files (CSS, JavaScript, Images)
  115. # https://docs.djangoproject.com/en/1.10/howto/static-files/
  116. SITE_ROOT = os.path.dirname(os.path.abspath(__file__))
  117. SITE_ROOT = os.path.abspath(os.path.join(SITE_ROOT, '../'))
  118. HAYSTACK_CONNECTIONS = {
  119. 'default': {
  120. 'ENGINE': 'website.whoosh_cn_backend.WhooshEngine',
  121. 'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
  122. },
  123. }
  124. # 自动更新搜索索引
  125. HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
  126. # 允许使用用户名或密码登录
  127. AUTHENTICATION_BACKENDS = ['accounts.user_login_backend.EmailOrUsernameModelBackend']
  128. STATIC_ROOT = os.path.join(SITE_ROOT, 'collectedstatic')
  129. STATIC_URL = '/static/'
  130. STATICFILES = os.path.join(BASE_DIR, 'static')
  131. AUTH_USER_MODEL = 'accounts.BlogUser'
  132. LOGIN_URL = '/login/'
  133. TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
  134. DATE_TIME_FORMAT = '%Y-%m-%d'
  135. SITE_NAME = '且听风吟'
  136. SITE_URL = 'http://www.lylinux.net'
  137. SITE_DESCRIPTION = '大巧无工,重剑无锋.'
  138. SITE_SEO_DESCRIPTION = '小站主要用来分享和记录学习经验,教程,记录个人生活的点滴以及一些随笔.欢迎大家访问小站'
  139. SITE_SEO_KEYWORDS = 'linux,apache,mysql,服务器,ubuntu,shell,web,csharp,.net,asp,mac,swift'
  140. ARTICLE_SUB_LENGTH = 300
  141. SHOW_GOOGLE_ADSENSE = False
  142. # bootstrap颜色样式
  143. BOOTSTRAP_COLOR_TYPES = [
  144. 'default', 'primary', 'success', 'info', 'warning', 'danger'
  145. ]
  146. # 侧边栏文章数目
  147. SIDEBAR_ARTICLE_COUNT = 10
  148. # 侧边栏评论数目
  149. SIDEBAR_COMMENT_COUNT = 5
  150. # 分页
  151. PAGINATE_BY = 10
  152. # http缓存时间
  153. CACHE_CONTROL_MAX_AGE = 2592000
  154. # cache setting
  155. CACHES = {
  156. 'default': {
  157. 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
  158. 'LOCATION': 'django_cache',
  159. }
  160. }
  161. CACHE_MIDDLEWARE_SECONDS = 60 * 60 * 10
  162. CACHE_MIDDLEWARE_KEY_PREFIX = "website"
  163. CACHE_MIDDLEWARE_ALIAS = 'default'
  164. # SESSION_ENGINE = "django.contrib.sessions.backends.cache"
  165. # SESSION_CACHE_ALIAS = 'default'
  166. OAHUTH = {
  167. 'sina': {
  168. 'appkey': '3161614143',
  169. 'appsecret': 'ee17c099317f872eeddb25204ea46721',
  170. 'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=weibo'
  171. },
  172. 'google': {
  173. 'appkey': 'googleappkey',
  174. 'appsecret': 'googleappsecret',
  175. 'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=google'
  176. },
  177. 'github': {
  178. 'appkey': 'githubappkey',
  179. 'appsecret': 'githubappsecret',
  180. 'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=github'
  181. },
  182. 'facebook': {
  183. 'appkey': 'facebookappkey',
  184. 'appsecret': 'facebookappsecret',
  185. 'callbackurl': 'http://www.lylinux.net/oauth/authorize?type=facebook'
  186. }
  187. }
  188. SITE_ID = 1
  189. BAIDU_NOTIFY_URL = "http://data.zz.baidu.com/urls?site=https://www.lylinux.net&token=1uAOGrMsUm5syDGn&type=original"
  190. # Emial:
  191. EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
  192. EMAIL_USE_TLS = True
  193. # EMAIL_USE_SSL = True
  194. EMAIL_HOST = 'smtp.exmail.qq.com'
  195. EMAIL_PORT = 587
  196. EMAIL_HOST_USER = os.environ.get('DJANGO_EMAIL_USER')
  197. EMAIL_HOST_PASSWORD = os.environ.get('DJANGO_EMAIL_PASSWORD')
  198. DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
  199. SERVER_EMAIL = os.environ.get('DJANGO_EMAIL_USER')
  200. # 设置debug=false 未处理异常邮件通知
  201. ADMINS = [('liangliang', 'liangliangyy@gmail.com')]
  202. # 微信管理员密码(两次md5获得)
  203. WXADMIN = '995F03AC401D6CABABAEF756FC4D43C7'
  204. LOGGING = {
  205. 'version': 1,
  206. 'disable_existing_loggers': False,
  207. 'formatters': {
  208. 'verbose': {
  209. 'format': '[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s',
  210. },
  211. 'simple': {
  212. 'format': '%(levelname)s %(asctime)s %(message)s'
  213. },
  214. },
  215. 'filters': {
  216. 'require_debug_false': {
  217. '()': 'django.utils.log.RequireDebugFalse',
  218. },
  219. 'require_debug_true': {
  220. '()': 'django.utils.log.RequireDebugTrue',
  221. },
  222. },
  223. 'handlers': {
  224. 'log_file': {
  225. 'level': 'INFO',
  226. 'class': 'logging.handlers.RotatingFileHandler',
  227. 'filename': 'website.log',
  228. 'maxBytes': 16777216, # 16 MB
  229. 'formatter': 'verbose'
  230. },
  231. 'console': {
  232. 'level': 'DEBUG',
  233. 'filters': ['require_debug_true'],
  234. 'class': 'logging.StreamHandler',
  235. 'formatter': 'simple'
  236. },
  237. 'null': {
  238. 'class': 'logging.NullHandler',
  239. },
  240. 'mail_admins': {
  241. 'level': 'ERROR',
  242. 'filters': ['require_debug_false'],
  243. 'class': 'django.utils.log.AdminEmailHandler'
  244. }
  245. },
  246. 'loggers': {
  247. 'website': {
  248. 'handlers': ['log_file', 'console'],
  249. 'level': 'INFO',
  250. 'propagate': True,
  251. },
  252. 'django.request': {
  253. 'handlers': ['mail_admins'],
  254. 'level': 'ERROR',
  255. 'propagate': False,
  256. },
  257. }
  258. }
  259. STATICFILES_FINDERS = (
  260. 'django.contrib.staticfiles.finders.FileSystemFinder',
  261. 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
  262. # other
  263. 'compressor.finders.CompressorFinder',
  264. )
  265. COMPRESS_ENABLED = True
  266. # COMPRESS_OFFLINE = True
  267. COMPRESS_CSS_FILTERS = [
  268. # creates absolute urls from relative ones
  269. 'compressor.filters.css_default.CssAbsoluteFilter',
  270. # css minimizer
  271. 'compressor.filters.cssmin.CSSMinFilter'
  272. ]
  273. COMPRESS_JS_FILTERS = [
  274. 'compressor.filters.jsmin.JSMinFilter'
  275. ]