V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
landsljk
V2EX  ›  Python

Django 开发的内容订阅&个人博客网站已经正式上线,谈谈实际开发中所遇到的问题

  •  
  •   landsljk · 2016-07-30 08:53:36 +08:00 · 2045 次点击
    这是一个创建于 3020 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开发了两个月的 Django 站点正式上线了,看着网站从无到有,从前端到后台,从本地开发到环境部署,一点一滴的堆砌成型,着实带给我不小的乐趣。

    Django 站点介绍:

    开发环境:阿里云服务器 centos6.5  + Nginx1.7 
    
    版本: Django1.8 + Python3.4
    
    这是一个集合订阅内容&个人博客的 Django 项目。
    
    目前项目集成:
    
    | - 1.订阅功能:自动订阅虎嗅、人人都是产品经理、果壳网等 60 多个 IT 资讯网站内容,每 4 小时自动更新推送至网站首页。
    
    | - 2.个人博客:个人博客功能,包含博客分类、推荐博客、阅读排行榜、热门标签板块。
    
    | - 3.评论功能:使用多说评论。
    

    http://img.blog.csdn.net/20160729181956795

    http://img.blog.csdn.net/20160729182054752

    http://img.blog.csdn.net/20160729182145202

    站点链接:http://www.landsblog.com

    说是经验谈,其实也只是开发后的一点小小总结,即是为了不让自己继续犯同样的错误,也是为了能给一起学习的伙伴提供些许参考,下面就我开发中遇到的一些问题做一个总结:

    1.明确站点主题

    这个可能是最简单,也可能是最容易被大家所忽视的问题。

    当我在刚刚制作 Django 网站的时候,只是单纯的打算做一个博客样式的网站:简单的博客列表,博客详情内容,时间归档,内容分类等等。代码写到一半,愈发觉得这样简单的博客没什么太大意义,毕竟一个月 100 多的服务器费用,索性开发一些实用的功能。

    笔者习惯一早起来浏览最新的资讯,苦恼的是每个 APP 都要浏览一遍,挑挑拣拣,这样花费不少时间。因此笔者希望可以在自己的网站中自动订阅最新的资讯,以及最新的技术。基于这点,笔者又重新开发了订阅功能,到目前为止,已经可以订阅 60 家媒体的最新资讯,并且每四小时自动更新。

    但是因为博客内容和订阅内容使用的是相同的框架,为了同步两者的不同,修修改改,到最后实在没办法,以至于所有代码推到重来。

    这件事给我的教训是:最好在网站的开发阶段就拟定好网站的主题,尤其是网站的功能,不然为了不同功能之间的嵌合,将会花更多的时间去修改

    2.优先设计数据库

    确定了 Django 站点的主题,接下来的步骤就是设计数据库,这一点要着重强调:数据库的设计要合理,不能想当然的设计,最好能够以表格的形式展现出来,避免以后遗忘,也避免内容的重复。

    当初在设计数据库的时候想着全面一些,就把能想到的内容一股脑的添加上去,比如好评次数、推荐次数、分享次数,光是这一项就有许多功能重复的地方:分享就代表着推荐,也就代表着好评。这样繁琐的数据库字段我到最后也没有用上,白白浪费了数据库空间,也使得数据库内容臃肿不堪。最后还是忍痛重新写了 models 。

    这件事给我的教训是:不要小看数据库的设计,合理的设计能够大大缩减开发周期,避免不必要的字段占据数据库的空间

    3.为文章设计合理的 slug

    通常在访问文章的时候,我们不会用带有中文字符的标题作为对象的主键,而是单独设计一个 slug 字段用于内容的访问,当文章少的时候还可以人为的编写 slug ,但当每天自动生成 90+的文章数,单凭一个人为每篇文章设计与文章标题相关的 slug ,并且保证它们不重复,就有点力不存心了。

    所以,合理的设计自动生成的 slug ,是非常有必要的。针对我的 Django 站点来说,因为订阅的文章是同一时间自动更新的,因此希望每一篇文章的 slug 都能够自带更新日期,便于我与文章的静态文件目录一一对应。另外一点,对于文章数量较多的情况,怎么能避免文章主键不会出现重复?对此我为每个文章定义了 8 位的字符映射码,有生之年是很难出现重复的。最后我采用了日期+随机码的方式作为 slug 字段的内容。

    这件事给我的教训是:看似有意义的设计其实并没有意义( slug 与文章标题相关),合理方便才是最好的

    4.不要到最后才将 Django 站点部署到开发环境中

    一般情况下,我们将 Django 站点在本地开发完成之后,才部署到正式的开发环境中。但是我建议在 Django 站点建立初期,便将其部署到正式环境中,因为正式环境和本地开发环境始终存在差异,如果一味以本地环境为基准来开发 Django 站点,到后面你会发现部署到正式开发环境的时候,会有很多配置问题让你感到头疼,而且也难以发现错误发生在哪里。

    因此,建议你每完成一个相对完整的应用的同时,便将其同步至正式开发环境中,测试其效果。

    5.善用 git 仓库

    在版本修改的过程当中,你会很容易忘记到底修改了哪些地方,尤其是隔几天之后继续开发,这种感觉尤为明显。因此,善用 git 进行分支管理,进度管理。不要偷懒,把每次提交的注释写的清楚完整一些,对后续的开发是很有帮助的。

    6.不要修改开发环境中 Python 默认版本,用 pyenv 代替

    说到环境布置,又让我想到一点,就是不要随便更改服务器的默认 python 版本,因为笔者用的是阿里云的 centos6.5 ,该环境自带的是 python2.6 版本,而 Django 开发的最低 python 版本是 2.7 ,我用的是 3.4 版本。最开始,我安装了 python3.4 版本,并将其设为默认,但是发现阿里云的 yum 命令是依赖默认的 python2.6 版本,遂又修改了 yum 的 python 依赖路径,本以为没有问题了,但在后面的开发环境中,仍然出现了很多关于 Pyhton 安装版本与自带默认版本之间不兼容的问题。

    比如: Nginx 的默认 python 版本始终为 2.6 ,不管我怎么修改,依然无法选择正确的 python 版本。最后,不得不重新将整个服务器环境重新建立一遍,用 pyenv+virtualenv 来控制全局的 python 版本,这次一切正常。不要尝试网上教程中的修改默认 pyhton 版本的方法,下场真的很凄惨......

    以上就是目前我能想到的 Django 项目开发中所能遇到的问题,如果大家感兴趣,可以访问我的站点:http://www.landsblog.com,欢迎大家在下面留言,如果有什么问题,也欢迎大家提出。

    7 条回复    2016-08-02 18:10:24 +08:00
    usufu
        1
    usufu  
       2016-07-30 09:11:09 +08:00 via iPhone
    不错啊 正好可以学习下 楼主榜样
    bdbai
        2
    bdbai  
       2016-07-30 12:07:35 +08:00 via iPhone   ❤️ 1
    第四点:你可以用 Docker 。
    julyclyde
        3
    julyclyde  
       2016-07-30 22:52:26 +08:00
    第六点…… yum 依赖 2.6 ,并不是“阿里云 yum ”依赖 2.6
    能做出这一点说明你对 python 是怎么加载 module 的根本不理解
    ice2016
        4
    ice2016  
       2016-08-01 10:53:08 +08:00
    楼主这个写的不错,赞一个
    iam36
        5
    iam36  
       2016-08-02 13:39:46 +08:00
    希望楼主能够开源,以供学习:)
    iam36
        6
    iam36  
       2016-08-02 13:45:19 +08:00
    看过更希望楼主开源;另外,这似乎不只是两个月的 DJANGO 能达到的程度 ,楼主能否介绍一下在建设此站点前后所具备的技能以及熟练程度,让新手能够充分了解到做如此一个站点所需具备的真实技能。
    landsljk
        7
    landsljk  
    OP
       2016-08-02 18:10:24 +08:00
    @iam36 嗯,说来惭愧,其实自己学的也很浅,所以也只能给出不太成熟的指导:
    |- 1.爬虫的相关知识应该懂些,因为需要抓取资讯站点的内容。这个不用太过深入,知道怎么用 urllib ( proxy ), re , BeautifulSoup , lxml 等,我还做了些爬虫,你可以看看: http://www.cnblogs.com/Lands-ljk/
    |- 2.前端的东西: HTML , CSS , JavaScript , Ajax 这些就不用说了,不需要做到熟练掌握,只需要能看懂能修改就可以,找一找有没有自己喜欢的模板,改成适合自己网站的样式即可。最好也学习一下响应式设计, bootstrap 学一下。
    |- 3.服务器端的知识需要掌握一些,基本的命令,怎么搭环境,配服务器数据库这些。后台的东西可以多学习一下,如果精力允许,再学一学如何优化服务器, Gzip 等,提高性能。
    |- 4.如果正式上线的话,再学一学 SEO 的知识,架设 Django 的时候,不单单是从功能性能的角度考虑,还要兼顾如何对搜索引擎友好。例如网站的二级页面单独设计 title , description 等,做好站内优化。

    目前能想到的就是这些,不过,为了你的技能发展考虑,应该偏重于其中的某一项,其他项为辅。比如说你想学习后台开发,就多掌握 Python 的相关知识,最好做到精通。其它比如前端设计什么的,个人感觉能看懂能修改,达到这个水平即可。

    不成熟的建议,希望可以帮到你。

    例外项目已经开源, https://github.com/NoharaHiroshi/LandsBlog ,里面有测试用的数据库。

    如果还有什么疑问,可以到 http://www.landsblog.com/aboutme/ 留言,虽然我可能也不清楚,但是还是很乐意与你一起交流解决。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1077 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:06 · PVG 03:06 · LAX 11:06 · JFK 14:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.