社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

Django个人博客正式上线,自动推送60+IT站点最新资讯

蘭兹 • 8 年前 • 3397 次点击  

Django站点开发经验谈


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

Django站点介绍:

开发环境:阿里云服务器centos6.5  + Nginx1.7

版本: Django1.8 + Python3.4

这是一个集合订阅内容&个人博客的Django项目。

目前项目集成:

| - 1.订阅功能:自动订阅虎嗅、人人都是产品经理、果壳网等60多个IT资讯网站内容,每4小时自动更新推送至网站首页。

| - 2.个人博客:个人博客功能,包含博客分类、推荐博客、阅读排行榜、热门标签板块。

| - 3.评论功能:使用多说评论。

站点链接: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,欢迎大家在下面留言,如果有什么问题,也欢迎大家提出。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1618
 
3397 次点击  
文章 [ 2 ]  |  最新文章 8 年前
喔喔喔
Reply   •   1 楼
喔喔喔    8 年前

网站不错

道非道
Reply   •   2 楼
道非道    8 年前

不错,很好的文章!