标签归档:DPress

DPress更新Django 1.10支持

DPress 是我很早之前用Django写的一个博客系统。这个博客系统更接近于一个Django入门用的演示程序。管理后台直接使用Django的Admin加少量的定制。页面展示部分,Tag和翻页用的开源APP。系统后台部分的代码极少,主要工作都在前端。
系统开发的初期相关依赖库都只指定了所要求的最低版本,随着相关依赖库的升级,系统已经跑不起来了。
今天把项目重新梳理了一遍,让项目重新跑起来。主要做了下面的一些调整:

  • Django升级到1.10。
  • 原翻页APP似乎已经不再维护,进行了替换。
  • Markdown编辑组件直接使用现成的APP,进一步简化程序代码。
  • 相关的依赖库都明确指定了版本,以免再出现因相关库的升级导致系统跑不起来的情况。
  • 对项目的目录结构做了调整。除默认主题外,其他主题都以APP方式进行安装。
  • 很久没有用过SAE,不知道之前的SAE支持代码还能不能用,因此直接去掉了SAE相关支持。

调整好后并未进行严格的测试,如遇到什么问题,可以直接在GitHub上提交Issue。

DPress增加一款新主题moment

为DPress增加了一款极简的主题moment。该主题由 Hsiaoming Yang 设计,也是他个人博客所使用的主题。如果想预览这款主题的效果,可直接参考 Hsiaoming Yang 的博客

主题使用方式

创建文件setttings/pre.py,在文件里增加设置 SETTINGS = ‘theme_moment’ 。这款主题支持设置页面上下的导航菜单,具体设置参考 theme_moment.py 文件。页面的主导航菜单默认为博客分类,可将DPRESS_SHOW_CATEGORYS_NAV修改为False,禁用分类。

DPress部署到SAE

将DPress部署到SAE的简要说明。如果你在部署过程中有遇到什么问题,欢迎反馈。

  • 在SAE管理后台创建应用,开发语言选择python
  • 使用svn将应用代码更新到本地
  • 修改配置文件config.yaml
name: 你的应用名称
version: 1
libraries:
- name: django
  version: "1.4"
  • 将DPress sites目录下所有文件复制到SAE应用目录(如:dpress/1/)。
  • 在应用的根目录下创建目录libs(如:dpress/1/libs/)
  • 将virtualenv.bundle.zip复制到libs目录
  • 在服务管理中启用mysql数据库
  • 由于SAE上无法使用Django命令。需要在本地使用syncdb命令在本地mysql数据库中创建好DPress的初始数据,然后使用SAE的phpmyadmin将数据导入到SAE。
  • 在服务管理中创建Storage,并将Domain设置为base
  • 创建配置文件settings/local.py
# -*- coding: UTF-8 -*-
import sae.const
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': sae.const.MYSQL_DB,                      # Or path to database file if using sqlite3.
        'USER': sae.const.MYSQL_USER,                      # Not used with sqlite3.
        'PASSWORD': sae.const.MYSQL_PASS,                  # Not used with sqlite3.
        'HOST': sae.const.MYSQL_HOST,                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': sae.const.MYSQL_PORT,                      # Set to empty string for default. Not used with sqlite3.
    }
}
DEFAULT_FILE_STORAGE = 'saestorage.SaeStorage'
FILEBROWSER_DIRECTORY = ''
STATIC_URL = 'http://vicalloy.sinaapp.com/dpress/'#修改为你静态资源位置
DPRESS_TITLE = u'天地一沙鸥'
DPRESS_SUBTITLE = u'to be continue'
DPRESS_DESCN = ''
DISQUS_SHORTNAME = ''
GOOGLE_ANALYTICS_CODE = ''
#根据你的静态资源位置进行修改
EPIC_JS = 'http://vicalloy.sinaapp.com/dpress/dpress/epiceditor/js/epiceditor.min.js'
EPIC_BASEPATH = 'http://vicalloy.sinaapp.com/dpress/dpress/epiceditor'

  • 到这里服务已经可以跑起来了。由于没有对静态资源进行配置,将出现无法找到静态资源的情况。
  • 创建一个新的SAE应用,应用类型选择PHP,专门用于管理DPress的静态资源文件(如:dstatic.sinaapp.com)。
  • 在本地运行Django的collectestatic命令将DPress的静态资源收集到sites/collectedstatc/目录。
  • 将collectedstatc中的内容复制到新创建的站点
    • 如:static/dpress/。对应的STATIC_URL配置文件修改为 http://dstatic.sinaapp.com/static/dpress/

DPress配置、定制、模板创建指南

DPress项目地址: https://github.com/vicalloy/DPress
DPress是我用Django写的一个博客系统,支持使用MarkDown语法进行博客的书写。这里将就系统的配置,模板定制修改,以及如何创建自己的模板给个简要的指南。由于系统使用Django开发,使用者最好能有一定的Django基础。

使用Django的开发服务器将系统跑起来

  • clone DPress的代码库(git://github.com/vicalloy/DPress.git)
  • 运行scripts/create_env.py,该脚本将为你创建python虚拟环境,并自动安装相关依赖包。
  • 执行scripts/env.bat(. scripts/env.rc),进入刚创建的python虚拟环境。
  • %mg%($mg in linux) 是 “python manage.py ” 的快捷方式,用于方便的执行Django命令。
  • %mg% syncdb
  • %mg% migrate
  • %mg% runserver
  • DPress Admin http://127.0.0.1:8000/admin/
  • DPress http://127.0.0.1:8000/

配置

  • 复制 sites /settings/pre.samplepre.py 。修改其中的SETTINGS设置,确定使用哪个配置(默认可选production/dev)。
  • 复制 sites /settings/local.samplelocal.py 。并修改相关配置。
  • DISQUS_SHORTNAME以及GOOGLE_ANALYTICS_CODE这两个参数需要在正确设置后,DISQUS的评论功能以及GOOGLE ANALYTICS才可正常生效使用。

模板的配置与修改

  • DPress自带的模板在 sites/dpress/templates/ 目录。自定义模板放在 sites/templates/ 目录。系统将自动优先使用自定义模板目录的模板,实现对模板的重写。
  • dpress/include/footer.html 为页面的底部。可重写该文件,修改版权增加定义链接等。
  • dpress/include/sidebar.html 页面的侧边栏。重写该文件对侧边栏内容进行配置。
  • dpress/widgets/ 该目录为侧边栏小工具的模板。如果你需要创建自定义的侧边栏工具,请遵守约定将小工具模板放到该目录。
  • dpress自带的静态资源文件放在 sites /dpress/static/ 目录。自定义的静态资源文件放在 sites/static/ 目录。
  • 静态资源目录中 /dpress/themes/ 为主题目录。当前的默认主题为 default 。你可创建一个新文件夹用于存放你的新主题。
  • 重写 dpress/include/base_style.html 使用新主题的css文件。

“DPress”原地满血复活

GitHub地址: DPress(GitHub)
演示地址: DPress(SAE)

DPress 是我在2009用django写的一个博客系统。此后年久失修,已经跑不起来了。
这两天花了些时间将项目重新修整一下,现在项目又可以重新跑起来了。功能方面新版的DPress有了些变化。

  • 提供对 Markdown 的支持(也只支持Markdown)。
  • 使用 EpicEditor 实现Markdown的实时预览。
  • 使用 DISQUS 实现文章的评论功能。(注:既然已经有了这么好用的评论服务,为什么还要自己写代码呢)
  • 支持代码高亮度。相关的语法说明见:Fenced Code Blocks
  • 支持Tag
  • 支持RSS
  • 使用 Django FileBrowser 提供文件上传的支持。
  • 使用 flatpages 提供对About等自定义页面的管理。
  • 内置GOOGLE ANALYTICS的支持
  • 代码量非常的小
  • 模板和代码分离的比较清晰,要创建一套自己的模板会是一件比较容易的事。

已知bug:直接从网页复制文本时EpicEditor的编辑框内会自动的添加一些看不见的html标签,将导致文本显示不正常。需要粘贴文本时最好先将文本粘贴到写字板中,再重新复制粘贴。

DPress-Django开发的Blog

用Django做Blog实在是太过简单,所以在网上可以轻易的找到大量用django实现的Blog,DPress就是其中一个。

本想用这个项目做Django最佳实践的教程,不过发现自己实在是不擅长这个。此外该项目花费的时间比预期的要多出不少,以至到后期挺没耐心,功能方面也因此大幅缩水。

目前DPress的基础功能已经完成,文档方面我会在晚些时候补上。

有兴趣的朋友可以将代码下回来看看。如果要使用Django自己服务器启动起来非常容易。

  1. 使用SVN把代码下回来 http://dpress.googlecode.com/svn/trunk/
  2. 运行 \trunk\scripts\init.bat 完成一些必要的初始化(复制静态文件到相关目录)。
  3. 运行 \trunk\site\dpress\scripts\syncdb.bat 初始化数据库。
  4. 运行 \trunk\site\dpress\scripts\runserver.bat 启动服务。
  5. 访问 http://127.0.0.1:8000/admin/ 在管理后台添加日志。

DPress本着以最少的代价完成最多工作的原则,能不造轮子的地方就不造轮子。

  • Blog的编辑功能完全交给admin处理。
  • 使用filebrowser对admin扩展,实现对文件的管理。
  • 使用django-tinymce,实现html的可视化编辑。
  • 文章的Tag功能使用django-tagging实现。
  • comments功能使用django.contrib.comments。
  • Blog本身也大量“借鉴”了pinax的blog组件。
  • Blog支持使用书写格式有Markdown、Textile、普通文本,html(支持可视化编辑)、reStructuredText(当然,你需要安装有相关的库)。

对Blog应用来说,一般都会有较高的个性化要求。换肤基本上成了必备功能。很遗憾,这方面是django的软肋。换肤需要创建新的模板,并需要修改配置文件,指定使用新模板。好的方面是,DPress的模板在我优化过后,还是比较简单,改起来还算方便的。

虽然在开始DPress之前就计划的很好,本以为很容易就可以搞定,但事与愿违开发过程中遇中还是遇到了一些麻烦。

Pinax中的Blog组件使用threadedcomments来增加评论支持。在评论内容填写不完整时,会转到它自定义的页面。我认为这是一个挺不友好的设置,尝试修正无果。切换到django.contrib.comments后问题则更糟,不但评论出错会跳到自定义页面,即使评论成功了不会转到评论页面,而是给出一个评论成功的提示。最后没办法,还是自己将添加评论的代码给写了一遍。

此外在模板方面也折腾掉了大量的时间。模板的本身也是程序中重要的一环,但不少的可重用app都没有带任何模板,而且也缺乏模板方面的范例。在我看来,这也是django的第三方app普遍不太好用的重要原因之一。

下面上张图吧,模板的样式,是偷的朋友BLOG的(他也是偷别人的)。