Django实际站点项目开发经验谈
开发了两个月的Django站点正式上线了,看着网站从无到有,从前端到后台,从本地开发到环境部署,一点一滴的堆砌成型,着实带给我不小的乐趣。
Django站点介绍:
开发环境:阿里云服务器centos6.5 + Nginx1.7
版本: Django1.8 + Python3.4
这是一个集合订阅内容&个人博客的Django项目。
目前项目集成:
| - 1.订阅功能:自动订阅虎嗅、人人都是产品经理、果壳网等60多个IT资讯网站内容,每4小时自动更新推送至网站首页。
| - 2.个人博客:个人博客功能,包含博客分类、推荐博客、阅读排行榜、热门标签板块。
| - 3.评论功能:使用多说评论。
说是经验谈,其实也只是开发后的一点小小总结,即是为了不让自己继续犯同样的错误,也是为了能给一起学习的伙伴提供些许参考,下面就我开发中遇到的一些问题做一个总结:
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,欢迎大家在下面留言,如果有什么问题,也欢迎大家提出。
Django实际站点项目开发经验谈的更多相关文章
- Django学习day14BBS项目开发1.0
每日测验 """ 1.简述auth模块功能 2.简述项目开发流程 3.简述bbs表设计 """ 内容回顾 auth模块 "&quo ...
- Django学习day15BBS项目开发4.0(完结)
每日测验 """ 今日考题: 1.简述自定义标签,过滤器,inclusion_tag的方法,并简要说一说三者的特点及响应流程 2.简述个人侧边栏展示及筛选业务逻辑 3.简 ...
- Django学习day15BBS项目开发2.0
每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...
- Django学习day15BBS项目开发3.0
每日测验 """ 今日考题 1.django admin作用及用法 2.media配置如何实现,基于该配置能够做到什么以及需要注意什么 3.阐述博客园为何支持用户自定义个 ...
- Django SNS 微博项目开发
1.功能需求 一个人可以follow很多人 一个用户如果发了新weibo会自动推送所有关注他的人 可以搜索.关注其它用户 可以分类关注 用户可以发weibo, 转发.收藏.@其它人 发微博时可选择公开 ...
- PyCharm Django项目开发的调试方法
下面介绍两种PyCharm Django项目开发的调试方法: 方法一: 1. 使用PyCharm 自带的django项目Debug工具, 当然前提条件是django项目环境已经搭建好了. 2. 在代码 ...
- Django (九) 项目开发流程&项目架构
项目开发流程&项目架构 1. 软件开发的一般流程 1. 需求分析及确认: 由需求分析工程师与客户确认甚至挖掘需求.输出需求说明文档. 2. 概要设计及详细设计: 开发对需求进行概要设计,包 ...
- Django学习笔记(19)——BBS+Blog项目开发(3)细节知识点补充
本文将BBS+Blog项目开发中所需要的细节知识点进行补充,其中内容包括KindEditor编辑器的使用,BeautifulSoup 模块及其防XSS攻击,Django中admin管理工具的使用,me ...
- Django项目开发,XSS攻击,图片防盗链,图片验证码,kindeditor编辑器
目录 一.Django项目开发 1. 项目开发流程 2. auth模块的补充 (1)django的admin可视化管理页面 (2)将admin可视化管理页面的模型表显示成中文 (3)auth模块的用户 ...
随机推荐
- cxf构建webservice的两种方式
一.简介 对于基于soap传输协议的webservice有两种开发模式,代码优先和契约优先的模式.代码优先的模式是通过编写服务器端的代码,使用代码生成wsdl:契约优先模式首先编写wsdl,再通过ws ...
- Spring 下载与安装以及spring 3.2.9 jar包详解
一.Spring简介 Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更“高大上”的maven方式来管理所依赖的jar包,但是完全没想到中国的国情,在 ...
- poj 2195 KM算法
题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...
- vim自定义配色方案,图文并茂
1.先上图 下面是tcpdump的源码.颜色根据自己的喜好配置,我比较喜欢亮的颜色,看的清楚! 2.下载辅助配置文件 ...
- centos7下docker 部署javaweb
LXC linux container 百度百科:http://baike.baidu.com/link?url=w_Xy56MN9infb0hfYObib4PlXm-PW02hzTlCLLb1W2d ...
- python Basic usage
__author__ = 'student' l=[] l=list('yaoxiaohua') print l print l[0:2] l=list('abc') print l*3 l.appe ...
- 深度优先搜索 codevs 1064 虫食算
codevs 1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 所 ...
- pixel art之 hqx 算法
在去年的时候,偶然看到hqx算法. 一个高质量的插值放大算法. 与双线性插值等插值算法相比,这个算法放大后对人眼保护相对比较好. 没有双线性插值看起来模糊,固然,也抽空把算法简单优化了一下. 官网及代 ...
- [3d跑酷] Xcode5 打包 发布配置
主题 Unity导出Xcode项目,使用Xocde打包ipa并提交到AppStore xcode发布配置 1.设置发布相关参数,比如 包名,版本,证书,ios设备版本 2.设置体系结构,支持的平台(I ...
- 纯CSS3实现兔斯基简单害羞表情
前言 很不巧前天突然就感冒了,都怪自己吃太多饼干导致上火了.整个人都无精打采.本来想多做几个兔斯基表情的,但身体发热很难受.所以就只完成一个简单点的表情耍一耍. 正文 先看一下这个简单到不能再简单的小 ...