基于Django的动漫论坛的设计与实现_第1页
基于Django的动漫论坛的设计与实现_第2页
基于Django的动漫论坛的设计与实现_第3页
基于Django的动漫论坛的设计与实现_第4页
基于Django的动漫论坛的设计与实现_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

[11]。1.2课题意义随着现代社会的发展和科技的进步,人们得以从繁重的物质生产中解放,去追求文化生活的丰富,而随着互联网的广泛扩展,使得人们的文化生活需求得到了非常多的方式。动漫论坛可以为拥有同样兴趣的爱好者提供一个交流的地方,通过共享资源和信息,丰富人们的文化生活,让人们分享自己的乐趣的同时还能结交到志同道合的朋友。同时完成整个论坛所需要的知识,技能也需要进行综合运用。不仅考察到了很多方面的知识,而且也提高了对自身知识的综合运用能力。

2系统分析2.1需求分析2.1.1论坛管理最高管理员可以通过管理系统对于论坛操作人员的权限进行赋予以及去除,可以对论坛的板块进行基础的设定,以及一些部分重要即时信息进行管理,对于资源进行删除,修改和隐藏,论坛用户被进行封禁、禁言、删帖、审核,还支持对于用户密码进行重置。2.1.2用户信息管理数据在当今的互联网时代中尤为重要,用户的个人信息如个人的基础信息和用户的发布的信息、收藏内容等既要便利用户修改,同样也要防止个人信息的泄露。2.1.3数据管理在数据库中建立的数据结构应当充分体现数据间的内在联系,数据应该便于修改、增加、更新,减少数据冗余,收集论坛的各种信息并进行统计,将论坛的各项情况反映到管理界面中。2.1.4奖励系统用户对于论坛做出贡献的同时也应该给予其同样的奖励,这样既可以保留老用户,同时也可以激励新用户对于论坛做出更多的贡献,奖励的内容包括特别的个人横幅,标志。2.2可行性分析2.2.1技术可行性该动漫论坛网站采用Django框架,Django是一个开放源码的Web应用框架,由Python写成,遵循MVC思想,但在具体实现上,Django是MVT框架模式。同样也因此增强了代码的可扩展性和可移植性,大大提高了编写程序的效率。此外作为python的一个大型Web应用框架,包含有许多功能强大的第三方插件,可以节省大量的工作时间。使用DjangoRESTframework进行前后端分离,用户访问前端服务器,前端服务器所需要的数据再请求后端服务器发送,通过前后端分离,降低了后端服务器负荷。通过Docker来进行部署,开发环境固定化,减少不必要的Bug,提升了开发效率,同时Docker内部容器之间的通信交流因为利用了Linux的虚拟网络技术所以速度要比使用网卡进行数据交换要快得多。而且由于多个容器在内部形成了一个局域网,所以相比于直接安装在服务器上的环境要安全的多。综上所述,各个部件都有着较好的灵活性、安全性和易用性,因此网站开发平台已成熟可行。2.2.2经济可行性经济可行性是对新系统的开发投入资金与系统开发后所带来的经济效应的比较分析。该系统使用Docker进行部署可以在一台服务器上部署前后端服务器,而且可以使用图床减轻服务器带宽压力,所以成本开销较低。2.3开发技术2.3.1Python语言概述Python是由GuidovanRossum在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。Python本身也是由诸多其他语言发展而来的,这包括ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unixshell和其他的脚本语言等等。Python是一种代表简单主义思想的语言。一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格。Python的这种伪代码本质是它最大的优点之一。它能使你专注于解决问题而不是去搞明白语言本身。Python有极其简单的语法,相比于其他语言,更为简洁。Python是FLOSS(自由/开放源码软件)之一。你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。使用Python语言编写程序的时候,无需考虑诸如如何管理你的程序使用的内存一类的底层细节。由于它的开源本质,Python已经被移植在许多平台上。小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、PalmOS、QNX、VMS、Psion、AcomRISCOS、VxWorks、PlayStation、SharpZaurus、WindowsCE甚至还有PocketPC、Symbian以及Google基于Linux开发的Android平台。一个用编译性语言比如C或C++写的程序可以从源文件转换到计算机使用的二进制代码。这个过程通过编译器和不同的标记、选项完成。当运行此程序的时候,连接/转载器软件把程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行,在这个过程中还会生成pyc文件加速下次加载,由于不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。只需要把Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得Python程序更加易于移植。Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在面向对象的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。同样如果需要一段关键代码运行得更快或者希望某些算法不公开,可以把部分程序用C或C++编写,然后在你的Python程序中使用它们。Python标准库很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、图形用户界面、Tk和其他与系统有关的操作。只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。Python还采用强制缩进的方式使得代码具有极强的可读性。2.3.2MySQL概述MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之一。它拥有诸多的特点,数据以表格的形式出现,每行为各种记录名称,每列为记录名称所对应的数据域,许多的行和列组成一张表单,若干的表单组成Database,其次MySQL是开源的,所以如果只使用社区版不需要支付额外的费用。使用标准的SQL数据语言形式。可以运行于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。最重要的一点MySQL是可以定制的,采用了GPL协议,你可以修改源码来开发自己的MySQL系统。2.3.3Vue概述Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。Vue.js的核心是一个响应的数据绑定系统,它让数据与DOM保持同步非常简单。在使用jQuery手工操作DOM时,我们的代码常常是命令式的,重复的与易错的。Vue.js包含数据驱动的视图概念。通俗地讲,它意味着我们在普通HTML模板中使用特殊的语法将DOM“绑定”到合并数据。一旦创建了绑定,DOM将与数据保持同步。这样我们应用中的逻辑就几乎都是直接修改数据了,不必与DOM更新搅在一起。这让我们的代码更容易撰写,理解与维护。组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较大的上方,组件是自定义元素,Vue.js的编译器为它添加了特殊之处功能。在某些情况下,组件也可以是原生HTML元素的形式。2.3.4Docker概述Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。由于其基于LXC的轻量级虚拟化的特点,Docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku),构建自动化测试和持续集成环境,以及一切可以横向扩展的应用,尤其是需要快速启停来应对峰谷的Web应用。Docker之间进行数据交流有容器链接、容器网络,容器练级是容器之间共享环境变量,容器网络则是将容器链接到一个网络或者分配对应的网络配置,多个容器在同一Docker主机上进行通信时,建议使用Docker的桥接网络模式,Docker的宿主机会自动给Docker容器分配NetworkNamespace,独立的虚拟IP,Docker容器会连接到docker0虚拟网桥上。2.3.5前后端分离概述前后端分离已成为互联网项目开发的业界标准使用方式,通过Web服务器+应用服务器的方式有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)。前后端分离的核心思想是前端HTML页面通过AJAX调用后端的RESTFULAPI接口并使用JSON数据进行交互。前后端分离中Web服务器:一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源;应用服务器:一般指像Tomcat,Jetty,Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好;一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。以前的项目大多数都是程序员又搞前端又搞后端。随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只管前端的事情,后端工程师只管后端的事情。大家一致认同的前后端分离的例子就是SPA(Singleapplication),所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现。可以就把Node.js当成跟前端交互的API。总得来说,Node.js的作用在MVC中相当于C(控制器)。Node.js路由的实现逻辑是把前端静态页面代码当成字符串发送到客户端(例如浏览器),简单理解可以理解为路由是提供给客户端的一组API接口,只不过返回的数据是页面代码的字符串而已。用Node.js作为桥梁架接服务器端API输出的JSON。后端出于性能和别的原因,提供的接口所返回的数据格式也许不太适合前端直接使用,前端所需的排序功能、筛选功能,以及到了视图层的页面展现,也许都需要对接口所提供的数据进行二次处理。这些处理虽可以放在前端来进行,但也许数据量一大便会浪费浏览器性能。因而现今,增加Node中间层便是一种良好的解决方案。使用Node.js使系统的适配性,响应速度,性能得到了提升,异步也与模板得到了统一。2.4开发环境2.4.1系统环境由于使用了Docker技术,开发以及系统的测试环境并无太大要求,但为与服务器环境类似,我选择使用了Manjaro这一Linux发行版,Manjaro与Ubuntu同为Linux的发行版,基础命令一致,熟练在Linux系统上的Docker操作。2.4.2数据库开发工具选择在开发过程中,需要对数据库进行查看,验证数据库中的数据是否正确,使用Navicat,因为其能连接多个数据库,还能保存数据库的验证信息和查询命令,能直观的展示在数据库中的数据。使用中需要将Docker容器的对应端口映射到主机的端口上

3系统设计3.1数据库设计为了数据的安全性和可操作性,使用数据库保存数据,又为了充分发挥不同数据库的特性,选择MongoDB存储文章等大片文字片段的信息,选择MySQL存储用户的基本信息和用户权限管理分配的信息。3.1.1数据库设计概述数据库设计(DatabaseDesign)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。一个系统的各个部分能否紧密结合和如何结合,关键在于数据库。因此要对数据库进行合理设计。数据库设计应分为以下六个阶段:需求分析调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等,形成用户需求规约。在用户调查的基础上,通过分析,逐步明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求。通过调查,收集和分析获得用户对数据库的如下要求:信息需求。用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求,即在数据库中储存哪些数据。处理要求。用户需要完成什么处理功能。明确用户对数据有什么样的处理要求,从而确定数据之间的相互关系。安全性与完整性的要求概念设计对用户要求描述的要求,通过对其中诸处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实中的信息结构、信息流动情况、信息间的互相制约关系以及现实中对信息储存、查询和加工的要求等。逻辑设计将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。同时,可能还需为各种数据处理应用领域产生相应的逻辑子模式。物理设计根据特定数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(包括文件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径等。验证设计在上述设计的基础上,收集数据并具体建立一个数据库,运行一些典型的应用任务来验证数据库设计的正确性和合理性。一般一个大型数据库的设计过程往往需要经过多次循环反复。当设计的某步发现问题时,可能就需要返回到前面去进行修改。因此,在做上述数据库设计时就应考虑到今后修改设计的可能性和方便性。运行与维护设计在数据库系统正式投入运行的过程中,必须不断地对其进行调整与修改。至今,数据库设计的很多工作仍需要人工来做,除了关系型数据库已有一套较完整的数据范式理论可用来部分地指导数据库设计之外,尚缺乏一套完善的数据库设计理论、方法和工具,以实现数据库设计的自动化或交互式的半自动化设计。所以数据库设计今后的研究发展方向是研究数据库设计理论,寻求能够更有效地表达语义关系的数据模型,为各阶段的设计提供自动或半自动的设计工具和集成化的开发环境,使数据库的设计更加工程化、更加规范化和更加方便易行,使得在数据库的设计中充分体现软件工程的先进思想和方法。3.1.2数据表设计在设计表的过程中,对论坛进行拆分为三个部分即用户个人主页,论坛部分,系统管理部分,论坛部分又分为四个大板块和论坛首页,而四个大板块又对各个讨论板块进行了划分,帖子又归属于各个讨论板块,用户的发言又属于每个帖子。根据分析构建论坛的数据基本结构如图:图3.1论坛基本结构3.1.3数据库连接数据库的连接是由前端向后端进行请求,通过Nginx进行转发,然后后端通过ORM操作得到数据再将数据发回前端,由前端进行生成。由于使用了Docker,使各个部件容器化,数据库,后端、前端程序相互隔离,后端通过远程连接数据库的模式进行访问。同样因为Linux的虚拟网络技术,相比于在主机上运行并没有什么区别。相反安全性得到了增加。3.2模块设计根据需求分析得出系统可大体分为论坛模块,用户个人模块,管理模块。论坛模块主要展示论坛的基本数据,如根据分区展示各分区的分享数据和各子版块。用户个人模块主要展示用户的个人信息等,管理模块方便管理人员进行控制。图3.2论坛模块设置3.3系统流程设计访问论坛时首先验证是否已经登陆,如果没有登录则将网页跳转至登录页面,登录页面有注册选项,用户可以点击注册,通过邀请码注册成功后,跳转回登录页面,用户登录成功后,系统将一条Token发给用户,用户在有效期之前都可以将这条Token附带到对论坛的请求上,使用户直接进入网站首页。在有效期后,可以通过使用已保存的刷新Token来得到新的Token已经登陆的用户进入首页后,可以看到常用工具信息贴,公告帖和当季的番剧时间表以及论坛的热门板块,用户点击进入板块后可以看到板块最新的资源列表和该板块下的所有论坛分区。用户可以点击个人昵称,进行个人主页,个人主页包含个人的昵称,自定义的签名,详细信息,详细信息可以通过提供的表单进行内容的修改,点击收藏列表,在收藏列表可以进行删除和点击跳转的操作。进入论坛分区后,论坛分区包含论坛分区名称、精品帖子和所属此论坛分区的所有帖子,用户可以点击进入帖子详情页面,帖子详情页面有该帖子的名称,以及用户的回复最下方则为富文本编辑器,用户可以通过富文本编辑器进行直接回复该帖子。管理员可以进入专门的管理页面对用户进行管理,对帖子进行删除等操作。3.4模块实现3.4.1登录注册模块用户访问论坛将会被判断是否已经登录过论坛,如果已经登陆则会跳转到首页,如果没有登录则会留在登录页。用户在登录页面可以选择注册,通过邀请码注册成功后返回主页。图3.3登录页面图3.4注册界面3.4.2论坛模块用户在已登录的情况下凭借Token,在登陆页面可以直接进行跳转,或者在登录之后,进入首页。首页包含有热门帖子和每个板块下热门的论坛。图3.5论坛首页用户在首页选择对应的版块后,前端向后端发送当前板块的类别请求对应的版块数据,然后生成版块页面。图3.6版块页面用户在板块页面点击对应的论坛分区链接,前端发送请求的论坛分区的ID,后端接收后进行查询对应的数据然后将数据返回前端。图3.7论坛分区用户可以通过点击对应帖子,进入帖子详情进行查看和回复操作。图3.8帖子详情页面3.4.6搜索模块用户输入想要查找的信息,然后选择对应的分类,然后点击查询,后台根据进行模糊查询。图3.9搜索板块3.4.7用户主页模块用户在登录之后可以通过点击右上角的昵称进入页面,查看或修改个人信息,点击收藏列表,可以看到用户个人的收藏,点击名称可以进入帖子详情。图3.10用户主页3.4.8管理页面模块管理员在登陆之后,可以通过个人页面的管理按钮进入管理界面。管理界面中可以做出帖子进行删除和隐藏,对用户进行管理等操作。图3.11论坛管理页面

4总结与建议从本系统开始设计到现在,耗费大约半年时间,由于涉及的范围太多,出现了不少的问题,通过不断的调整和修改,到目前为止功能已基本实现。动漫论坛网站是在对如今年轻人缺乏一个更加专业化的交流平台的前提下,通过考察和分析设计出来的一套适合为年轻人们提供一个讨论动漫以及相关延伸作品的一个网站。这个论坛既有一些有点也有一些缺点,优点如下:前后端分离,相互之间只以json的形式进行交流,前后端开发可以同时进行。使用Docker进行部署,提高了系统的安全性,方便了系统内部的访问,同时又保证了运行环境与开发环境的一致性,减少了整个系统产生不必要bug的可能性。带有管理界面可以对用户,帖子和论坛基本信息的删除,修改等操作。拥有个人页面管理,用户可以修改自己的信息,管理自己的收藏,还能展示自己的个人签名。同样还有一些问题在本次设计中出现例如:前后端分离后,任务量太大,涉及知识面太广,涉及的语言有Python,JavaScript,Html,CSS,涉及的技术有Vue.js,Django,Nginx,MySQL,Docker。这些知识很多都是一个职业所需要专业技术,难以短时间全部精通。Django官方不支持非关系型数据库,虽然有对应的非官方库,但Bug多且缺乏对应的解决方案,建议使用关系型数据库存储长期,非关系型数据库保存短期数据,以及系统自带的模板。前后端分离后数据的交流全部为Json格式,使得某些数据难以传输,以及前后端分离之后某些前端插件与后端的交流问题。由于开发的难度,此动漫论坛网站仅仅实现了部分功能,不过由于各模块耦合度较低方便继续完善开发。致谢春去秋来,转眼间在中北大学信息商务学院已经度过了四个年头,刚进入校门的那天仿佛就是昨天一样,现在已经到了要离开的时间了。在老师的支持和教导下,经过一个学期的时间才完成本次毕业设计。在这次毕业设计中,我深深的感受到知识的不足和将所有学习到的知识统合在一起的艰难,在毕业设计中遇到的许多难点需要由自己去寻找对应的解决方法,还在毕业设计期间还学习很多知识,虽然只是粗略的掌握,但也在毕业设计中派上了大用场,在之后的学习与工作中,需要继续的去了解然后熟练掌握。在这次的毕业设计中首先我要感谢我的导师李花老师,因为在我的毕业设计过程中,她给予我很多指导和建议,使我收获很大,她总是在关键时刻对我进行提醒,时刻关心我毕业设计的进度。老师一直给予我悉心的教导和巨大的支持,无论在学习上还是在精神上都给予我帮助,这些帮助时刻提醒着我认真完成毕业设计。其次我还要感谢我在杰普软件实习的老师和同学,在实习期间老师的教学给予了我专业的知识,开阔了我的眼界,在我错误时即使指正,使我能够完成毕业设计,在实习期间我尤其要感谢陈晨老师,是她教会了我有关于Python制作网站知识。还要感谢我的同学们,因为有他们的陪伴我才能在学习的路上发现自己的问题,在与同学的交流之中掌握学习的知识,发现学习中的不足,同样也感谢我的家人,没有他们的默默支持和无微不至的关照,我也无法在期限内完成毕业设计。最后在这篇毕业论文完成之际,我真诚地

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论