本系列博客将带大家从0开始做一个简单的博客管理系统。完整代码在github上。本项目将用django4.2版本和python3.11版本带大家实现完整开发过程。
在学习django过程中,绝大部分的教学和讲解采用的都是老版本的django(1.x,2.x, 3.2)和python(3.6),目前最新django版本为5.1,python版本也到了3.12了。对于django版本而言,1.x 和2.x 都已经太旧了,3.x版本也有一些第三方插件不支持(有写插件只支持4.2及以上版本),所以这里干脆用4.2版本进行讲解(旧版本只要不涉及第三方插件也可以正常使用运行)。python也是有些第三方插件不支持3.8以前的版本,这里用3.8之后的版本都可以。
网上绝大部分django讲解都是要收费的,视频讲解也都是录播课,听完后自己也是一知半解。之后自己再花钱买课学习,再阅读相关书籍并上手操作,总算是把django入了门。写本系列博客也是看网上没有相关完整的项目实战博客,那就自己搞一个,分享一下自己的学习经历、学习过程中遇到的问题和解决方案,降低学习Django时的心智负担,主要针对想学习Django但又无从下手,或者看了很久文档能完成新手教程,但想自己开发一套系统时却无从开始的人,也希望本系列博客能帮助到大家更好的学习django。
凡事都得有个来由,做软件开发也一样,总得有一个需求过来,启动一个项目,或者推动整个项目进行下一步迭代。这个需求可能是根据用户反馈增加的,可能是老板提出来的,也可能是产品经理提出来的,但是无论是什么样的需求,重要程度如何,最终到开发人员这里都需要转化为功能点——可以被量化的功能点。因为产品经理或者老板需要知道,这个需求多久能够开发完成,多久能够上线让大家使用。
因此,就有了软件工程中的几个步骤------需求分析、软件设计和软件测试等。对于开发人员来说,需要对需求进行评审,这是为了避免产品经理提出无法实现的需求,最终导致需求被迫变更或者项目“流产”。
在需求评审之后,开发人员把需求转换为系统的功能点,然后评估开发时长。最终需要评估出来一个可把控的开发周期给产品经理或者项目经理,同时也给开发团队定下截止时间,避免出现无效的开发行为,比如某开发同学觉得时间还长,就开始在一些小的问题上死磕,力求得到一个完美的答案等。
需求文档是产品经理跟开发人员交流的必不可少的东西,很多东西如果不落实到文档上,出了问题很难追溯。尤其是对于企业中长期开发的项目来说,一个项目可能由无数个开发人员参与,所谓“铁打的项目,流水的开发”,文档是新人在接手项目时必须阅读的。另外,交流基本靠吼的方式也很容易丢失信息,还会出现开发后期不知道需求是谁提出的这种尴尬的问题。所以,无论是什么需求,无论是需求变更还是追加,都应尽量落实到文档上。
接下来,我们说说博客开发的需求。
介绍
博客(英语:Blog,为WebLog的混成词),意指logon the web,即在网络上记录,是一种由个人管理的网站或在线日记,可以张贴新的文章、图片或视频,用来记录、抒发情感或分享信息。博客上的文章通常根据张贴时间,以倒序方式由新到旧排列。
许多博客作者专注评论特定的课题或新闻,其他则作为个人日记。一个典型的博客结合了文字、图像、其他博客或网站的超链接以及其他与主题相关的媒体,能够让读者以互动的方式留下意见,这些是许多博客的重要要素。大部分的博客内容以文字为主,也有一些博客专注艺术、摄影、视频、音乐和播客等主题。博客是社会媒体网络的一部分。
博客也是一个与他人分享和交流的平台,通过书写自己的想法、学习技巧和工作经验,来结识不同领域的读者,交流和探讨技术、思想、文化或公司等话题。
需求描述
简单来说,博客系统分为两部分:读者访问部分(用户端)和作者创作部分、作者端)。
用户端的需求如下:
作者端的需求如下:
这就是一个简单的需求描述。从这个需求描述上来看,无法确定需要做出什么样的东西,因为很多细节没有说到。这时如果技术人员尝试以自己的理解去开发一个博客系统,可能会导致跟产品经理或者用户想要的结果不一样,从而进行无谓的返工。
下一节中,我们进入需求评审和分析阶段,帮助产品经理整理清楚需求,让技术人员在开发时能够知晓具体的需求点是什么,需要开发哪些功能,如何设计系统、建立模型等。
对于有经验的产品经理来说,在做任何需求的时候,都会计划得足够细致,落实到一个功能点。更好的情况是能够出原型稿,之后可以通过原型来对每一个功能点进行逐一核对。对技术来说,评审的目的有如下三个:
针对产品经理提出的每个需求,我们都需要仔细核对,尽量避免歧义或者沟通不畅。下面我们逐条来分析。
用户端部分
作者端需求
其实在实际的需求评审中,不需要每个需求点都抛出问题来确认,因为大部分都是专业的产品经理,知道用户想要什么的同时,也知道技术能实现什么。这主要是基于过往的经验。所以,这类产品经理会给出很明确的需求,配合起来会比较默契。但是无论对于什么样的产品经理,所有的需求都需要当场讲解一下,对于不太理解的需求,需要反复讨论确认。
所有开发人员都有必要理解产品经理的需求、这个需求点的作用及背景,通过消化需求点来进行开发,而不是单纯地把需求文档翻译为可执行的代码。
经过这么一轮的问答,产品经理也会在产品文档上更加明确自己的需求点,最终的描述应该是包含了开发人员对所提问题的解答。
另外有一点需要注意的是,对于产品经理自己也不是特别明确的功能点,比如技术方面的,开发人员应该能够根据以往的开发经验以及技术积累,给出合适的建议,在满足同等功能的情况下,让技术上实现起来更加容易。但是,记住一点,用户需求是第一位的,技术复杂度是第二位的。
在这之后,我们应该能得到一份详细的需求列表。下一节中,我们对需求进行拆分,把需求转为技术上需要实现的功能点/技术点。
上一节中,我们对需求进行了评审,经过对细节的沟通之后,产品经理对需求进行了修改和明确。
用户端部分
作者端需求
功能分析的目的是从产品经理所提的需求中提炼出这个系统有哪些功能点,最终落实为功能列表/清单(可以按照模块或者相关功能来划分),进而再进行任务分配。
从上面最终确定过的需求列表中,我们可以逐条列出博客系统所需要的功能点有如下这些:
经过上面的分析,我们得到了足够细化的功能列表。有了这些细节的描述,开发人员就能够确定要做出什么样的功能来。不过这个时候,需要有人来做一个整体的梳理,把相关的功能整理为一个模块,同时抽象出实体。
有了足够明确的需求之后,下一步需要做的就是建模。建模的意思就是建立系统模型以及数据模型,这里需要提到一门语言——UML(统一建模语言)。这是以前非常常用的一种建模方法,通过UML画出用例图,整理用户需求;然后画出序列图,整理出系统各模块的交互逻辑;最后会用这些模型来实现。另外,针对数据模型部分,一般会先画出ER图(Entity Relationship Diagram,实体关系图),理清楚每个数据模型之间的关系。好的ER工具可以直接帮你生成建表语句以及模型代码。
理论上来讲,产品经理会整理出所有的用户需求,输出产品需求文档(PRD)给开发人员。开发人员需要从中提取出实体以及各模块之间的交互关系。
在这一章中,我们主要介绍了日常开发中接收到需求后应该如何处理,通过需求分析最终应该得到哪些产出,从而对后续的开发提供指导。下一章中开始带大家进入正式开发。
链接:
项目开源代码GitHub:https://github.com/1273055646/typeidea
Django学习实战篇二(适合略有基础的新手小白学习)(从0开发项目)
Django学习实战篇三(适合略有基础的新手小白学习)(从0开发项目)
Django学习实战篇四(适合略有基础的新手小白学习)(从0开发项目)
Django学习实战篇五(适合略有基础的新手小白学习)(从0开发项目)
Django学习实战篇六(适合略有基础的新手小白学习)(从0开发项目)
Django学习实战之评论验证码功能(附A)