学习开发网站必须了解网站的组成部分、网站类型、运行原理和开发流程。使用Django开发网站必须掌握Django的基本操作,比如创建项目、使用Django的操作指令以及开发过程中的调试方法。
一、网站的定义及组成
网站(Website)是指在因特网上根据一定的规则,使用HTML(Hyper Text Markup Language,超文本标记语言)等工具制作并用于展示特定内容相关网页的集合。简单地说,网站是一种沟通工具,人们可以通过网站来发布自己想要公开的资讯,或者利用网站来提供相关的网络服务,也可以通过网页浏览器来访问网站,获取自己需要的资讯或者享受网络服务。
在早期,域名(Domain Name)、空间服务器与程序是网站的基本组成部分,随着科技的不断进步,网站的组成日趋复杂,目前多数网站由域名、空间服务器、DNS域名解析、网站程序和数据库等组成。
域名由一串用点分隔的字母组成,代表互联网上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位,已经成为互联网的品牌和网上商标保护必备的产品之一。通俗地说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易地找到你所在的位置。以百度的域名为例,百度的网址是由两部分组成的,标号“baidu”是这个域名的主域名体;前面的“www.”是网络名;最后的标号“com”则是该域名的后缀,代表是一个国际域名,属于顶级域名之一。
常见的域名后缀有以下几种:
空间服务器主要有虚拟主机、独立服务器和VPS(Virtual Private Server,虚拟专用服务器)。
虚拟主机是在网络服务器上划分出一定的磁盘空间供用户放置站点和应用组件等,提供必要的站点功能、数据存放和传输功能。所谓虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的服务器划分成多个“虚拟”的服务器。每一个虚拟主机都具有独立的域名和完整的Internet服务器(支持WWW、FTP、E-mail等)。虚拟主机是网络发展的福音,极大地促进了网络技术的应用和普及。同时,虚拟主机的租用服务成了网络时代新的经济形式,虚拟主机的租用类似于房屋租用。
独立服务器是指性能更强大、整体硬件完全独立的服务器,其CPU都在8核以上。
VPS即虚拟专用服务器,是将一个服务器分区成多个虚拟独立专享服务器的技术。每个使用VPS技术的虚拟独立服务器拥有各自独立的公网IP地址、操作系统、硬盘空间、内存空间和CPU资源等,还可以进行安装程序、重启服务器等操作,与一台独立服务器完全相同。
网站程序是建设与修改网站所使用的编程语言,源代码是由按一定格式书写的文字和符号编写的,可以是任何编程语言,常见的网站开发语言有Java、PHP、ASP.NET和Python。而浏览器就如程序的编译器,它会将源代码翻译成图文内容呈现在网页上。
二、网站的分类
资讯门户类网站以提供信息资讯为主要目的,是目前普遍的网站形式之一,例如新浪、搜狐和新华网。这类网站虽然涵盖的信息类型多、信息量大、访问群体广,但包含的功能比较简单,网站基本功能包含检索、论坛、留言和用户中心等。这类网站开发的技术含量主要涉及4个因素:
企业品牌类网站用于展示企业综合实力,体现企业文化和品牌理念。企业品牌网站非常强调创意,对于美工设计要求较高,精美的FLASH动画是常用的表现形式。网站内容组织策划和产品展示体验方面也有较高的要求。网站利用多媒体交互和动态网页技术,针对目标客户进行内容建设,达到品牌营销的目的。企业品牌网站可细分为以下三类:
交易类网站以实现交易为目的,以订单为中心。交易的对象可以是企业和消费者。这类网站有3项基本内容:商品如何展示、订单如何生成和订单如何执行。
因此,这类网站一般需要有产品管理、订购管理、订单管理、产品推荐、支付管理、收费管理、送发货管理和会员管理等基本功能。功能复杂一点的可能还需要积分管理系统、VIP管理系统、CRM系统、MIS系统、ERP系统和商品销售分析系统等。交易类网站成功与否的关键在于业务模型的优劣。交易类网站可细分为以下三大类型:
办公及政府机构网站分为企业办公事务类网站和政府办公类网站。企业办公事务类网站主要包括企业办公事务管理系统、人力资源管理系统和办公成本管理系统。
政府办公类网站是利用政府专用网络和内部办公网络而建立的内部门户信息网,是为了方便办公区域以外的相关部门互通信息、统一处理数据和共享文件资料而建立的,其基本功能有:
网站面向社会公众,既可提供办事指南、政策法规和动态信息等,又可提供网上行政业务申报、办理及相关数据查询等。
互动游戏网站是近年来国内逐渐风靡起来的一种网站。这类网站的投入是根据所承载游戏的复杂程度来定的,其发展趋势是向超巨型方向发展,有的已经形成了独立的网络世界。
功能性网站是一种新型网站,其中Google和百度是典型代表。这类网站的主要特征是将一个具有广泛需求的功能扩展开来,开发一套强大的功能体系,将功能的实现推向极致。功能在网页上看似简单,但实际投入成本相当惊人,而且效益非常巨大。
三、网站运行原理及开发流程
3.1 常用术语
如果刚接触网站开发,那么很有必要了解网站的运行原理。在了解网站的运行原理之前,首先需要理解网站中一些常用的术语。
客户端:在计算机上运行并连接到互联网的应用程序,简称浏览器,如Chrome、Firefox和IE。用户通过操作客户端实现网站和用户之间的数据交互。
服务器:能连接到互联网且具有IP地址的计算机。服务器主要接收和处理用户的请求信息。当用户在客户端操作网页的时候,实质上是向网站发送一个HTTP请求,网站的服务器接收到请求后会执行相应的处理,最后将处理结果返回客户端并生成相应的网页信息。
IP地址:互联网协议地址,TCP/IP网络设备(计算机、服务器、打印机、路由器等)的数字标识符。互联网上的每台计算机都有一个IP地址,用于识别和通信。IP地址有4组数字,以小数点分隔(例如244.155.65.2),这被称为逻辑地址。为了在网络中定位设备,通过TCP/IP协议将逻辑IP地址转换为物理地址(物理地址即计算机里面的MAC地址)。
域名:用于标识一个或多个IP地址。
DNS:域名系统,用于跟踪计算机的域名及其在互联网上相应的IP地址。
ISP:互联网服务提供商。主要工作是在DNS(域名系统)中查找当前域名对应的IP地址。
TCP/IP:传输控制协议/互联网协议,是广泛使用的通信协议。
HTTP:超文本传输协议,是浏览器和服务器通过互联网进行通信的协议。
3.2 网站的运行原理
了解网站常用术语后,我们通过一个简单的例子来讲解网站运行的原理。
(1)在浏览器中输入网站地址,如www.github.com。
(2)浏览器解析网站地址中包含的信息,如HTTP协议和域名(github.com)。
(3)浏览器与ISP通信,在DNS中查找www.github.com所对应的IP地址,然后将IP地址发送到浏览器的DNS服务,最后向www.github.com的IP地址发送请求。
(4)浏览器从网站地址中获取IP地址和端口(HTTP协议默认为80端口,HTTPS协议默认为443端口),并打开TCP套接字连接,实现浏览器和Web服务器的连接。
(5)浏览器根据用户操作向服务器发送相应的HTTP请求,如打开www.github.com的主页面。
(6)当Web服务器接收请求后,根据请求信息查找该HTML页面。若页面存在,则Web服务器将处理结果和页面返回浏览器。若服务器找不到页面,则发送一个404错误消息,代表找不到相关的页面。
3.3 网站的开发流程
很多人认为网站开发是一件很困难的事情,其实没有想象中那么困难。只要明白了网站的开发流程,就会觉得网站开发非常简单。但如果没有一个清晰的开发流程指导开发,会觉得整个开发过程难以实行。完整的开发流程如下:
(1)需求分析:当拿到一个项目时,必须进行需求分析,清楚知道网站的类型、具体功能、业务逻辑以及网站的风格,此外还要确定域名、网站空间或者服务器以及网站备案等。
(2)规划静态内容:重新确定需求分析,并根据用户需求规划出网站的内容板块草图。
(3)设计阶段:根据网站草图由美工制作成效果图。就好比建房子一样,首先画出效果图,然后才开始建房子,网站开发也是如此。
(4)程序开发阶段:根据草图划分页面结构和设计,前端和后台可以同时进行。前端根据美工效果负责制作静态页面;后台根据页面结构和设计,设计数据库数据结构和开发网站后台。
(5)测试和上线:在本地搭建服务器,测试网站是否存在Bug。若无问题,则可以将网站打包,使用FTP上传至网站空间或者服务器。
(6)维护推广:在网站上线之后,根据实际情况完善网站的不足,定期修复和升级,保障网站运营顺畅,然后对网站进行推广宣传等。
3.4 任务划分
网站开发必须根据用户需求制定开发任务,不同职位的开发人员负责不同的功能设计与实现,各个职位的工作划分如下:
(1)网页设计由UI负责设计。UI需要考虑用户体验、网站色调搭配和操作流程等。
(2)前端开发人员将网页设计图转化成HTML页面,主要编写HTML网页、CSS样式和JavaScript脚本,如果采用前后端分离,整个网站的功能就皆由前端人员实现。
(3)后端开发人员负责实现网站功能和数据库设计。网站功能需要数据库提供数据支持,实质上是实现数据库的读写操作;数据库设计需要根据网站功能设计相应的数据表,并且还要考虑数据表之间的数据关联。如果采用前后端分离的开发方式,后端人员只需编写API接口,由前端人员调用API接口实现网站功能。
(4)测试人员负责测试网站功能是否符合用户需求。测试过程需要编写测试用例进行测试,如果发现功能存在Bug,就需向开发人员提交Bug的重现方法。只要功能发生修改或变更,测试人员就要重新测试。
(5)运维人员负责网站的部署和上线。网站部署主要搭建在Linux系统,除了安装Django环境之外,还需要将Django搭建在Nginx或Apache服务器上,并在Nginx或Apache上绑定网站的域名。
四、走进Django
Django是一个开放源代码的Web应用框架,由Python写成,最初用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站,即CMS(内容管理系统)软件,于2005年7月在BSD许可证下发布,这套框架是以比利时的吉卜赛爵士吉他手Django Reinhardt来命名的。Django采用了MTV的框架模式,即模型(Model)、模板(Template)和视图(Views),三者之间各自负责不同的职责。
模型:数据存取层,处理与数据相关的所有事务,例如如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
模板:表现层,处理与表现相关的决定,例如如何在页面或其他类型的文档中进行显示。
视图:业务逻辑层,存取模型及调取恰当模板的相关逻辑,模型与模板的桥梁。
Django的主要目的是简便、快速地开发数据库驱动的网站。它强调代码复用,多个组件可以很方便地以插件形式服务于整个框架。Django有许多功能强大的第三方插件,可以很方便地开发出自己的工具包,这使得Django具有很强的可扩展性。此外,Django还强调快速开发和DRY(Do Not Repeat Yourself)原则。Django基于MTV的设计十分优美,其具有以下特点:
对象关系映射(Object Relational Mapping,ORM):通过定义映射类来构建数据模型,将模型与关系数据库连接起来,使用ORM框架内置的数据库接口可实现复杂的数据操作。
URL设计:开发者可以设计任意的URL(网站地址),而且还支持使用正则表达式设计。
模板系统:提供可扩展的模板语言,模板之间具有可继承性。
表单处理:可以生成各种表单模型,而且表单具有有效性检验功能。
Cache系统:完善的缓存系统,可支持多种缓存方式。
Auth认证系统:提供用户认证、权限设置和用户组功能,功能扩展性强。
国际化:内置国际化系统,方便开发出多种语言的网站。
Admin后台系统:内置Admin后台管理系统,系统扩展性强。
五、安装Django
开发环境为Windows操作系统和Python 3。在安装Django之前,首先安装Python,在官网下载.exe安装包即可,建议安装Python 3.8或以上的版本。完成Python的安装后,接着安装Django版本,安装方法如下。
使用pip进行安装,可以按快捷键Windows+R打开“运行”对话框,然后在对话框中输入“CMD”并按回车键,进入命令提示符窗口(也称为终端)。在命令提示符窗口输入以下安装指令:
pip install Django
输入上述指令后按回车键,就会自行下载Django最新版本并安装,我们只需等待安装完成即可。
除了使用pip安装之外,还可以从网上下载Django的压缩包自行安装。在浏览器上输入网址并找到Django的下载链接,如图所示。
(1)Django 官方网站 • 网址: https://www.djangoproject.com/ ◦ 这是 Django 的官方主页,提供框架的详细介绍、最新动态、文档链接和社区支持信息 。
(2)Django 下载地址 • 下载页面: https://www.djangoproject.com/download/
然后将下载的文件放到D盘,并打开命令提示符窗口,输入以下安装指令:
pip install D:\Django-3.1.4-py3-none-any.whl
输入指令后按回车键,等待安装完成的提示即可。完成Django的安装后,需要进一步校验安装是否成功,再次进入命令提示符窗口,输入“python”并按回车键,此时进入Python交互解释器,在交互解释器下输入校验代码:
>>> import django
>>> django.__version__
从上面返回的结果是当前安装的Django版本信息,这也说明Django安装成功。
六、创建项目
一个项目可以理解为一个网站,创建Django项目可以在命令提示符窗口输入创建指令完成。打开命令提示符窗口,将当前路径切换到D盘并输入项目创建指令:
django-admin startproject MyDjango
指令是在D盘的路径下创建Django项目,指令中的“MyDjango”是项目名称。项目创建后,可以在D盘下看到新创建的文件夹MyDjango,在PyCharm下查看该项目的结构,如图所示。
MyDjango项目里包含MyDjango文件夹和manage.py文件,而MyDjango文件夹又包含5个.py文件。项目的各个文件说明如下:
manage.py:命令行工具,内置多种方式与项目进行交互。在命令提示符窗口下,将路径切换到MyDjango项目并输入python manage.py help,可以查看该工具的指令信息。
__init__.py:初始化文件,一般情况下无须修改。
asgi.py:开启一个ASGI服务,ASGI是异步网关协议接口。
settings.py:项目的配置文件,项目的所有功能都需要在该文件中进行配置。
urls.py:项目的路由设置,设置网站的具体网址内容。
wsgi.py:全称为Python Web Server Gateway Interface,即Python服务器网关接口,是Python应用与Web服务器之间的接口,用于Django项目在服务器上的部署和上线,一般不需要修改。
完成项目的创建后,接着创建项目应用,项目应用简称为App,相当于网站功能,每个App代表网站的一个功能。App的创建由文件manage.py实现,创建指令如下:
D:\MyDjango>python manage.py startapp index
从D盘进入项目MyDjango,然后使用python manage.py startapp XXX创建,其中XXX是应用的名称,可以自行命名。上述指令创建了网站首页,再次查看项目MyDjango的目录结构,如图所示。
从图可以看到,项目新建了index文件夹,其可作为网站首页。在index文件夹可以看到有多个.py文件和migrations文件夹,说明如下:
migrations:用于生成数据迁移文件,通过数据迁移文件可自动在数据库里生成相应的数据表。
__init__.py:index文件夹的初始化文件。
admin.py:用于设置当前App的后台管理功能。
apps.py:当前App的配置信息,在Django 1.9版本后自动生成,一般情况下无须修改。
models.py:定义数据库的映射类,每个类可以关联一张数据表,实现数据持久化,即MTV里面的模型(Model)。
tests.py:自动化测试的模块,用于实现单元测试。
views.py:视图文件,处理功能的业务逻辑,即MTV里面的视图(Views)。
完成项目和App的创建后,最后在命令提示符窗口输入以下指令启动项目:
D:\>cd MyDjango
D:\MyDjango>python manage.py runserver 8001
将命令提示符窗口的路径切换到项目的路径,输入运行指令python manage.py runserver 8001,其中8001是端口号,如果在指令里没有设置端口,端口就默认为8000。最后在浏览器上输入http://127.0.0.1:8001/,可看到项目的运行情况,如图所示。
七、PyCharm创建项目
除了在命令提示符窗口创建项目之外,还可以在PyCharm中创建项目。PyCharm必须为专业版才能创建与调试Django项目,社区版是不支持此功能的。打开PyCharm并在左上方单击File→New Project,创建新项目,如图所示。
项目创建后,可以看到目录结构多出了templates文件夹,该文件夹用于存放HTML模板文件,如图所示。
接着创建App应用,可以在PyCharm的Terminal中输入创建指令,创建指令与命令提示符窗口中输入的指令是相同的。完成项目和App的创建后,启动项目。如果项目是由PyCharm创建的,就直接单击“运行”按钮启动项目。如果项目是在命令提示符窗口创建的,想要在PyCharm启动项目,而PyCharm没有运行脚本,就需要对该项目创建运行脚本,如图所示。
单击图中的Edit Configurations就会出现Run/Debug Configurations界面,单击该界面左上方的+并选择Django server,输入脚本名字,单击OK按钮即可创建运行脚本,如图所示。
注意:由于PyCharm自动为我们创建templates文件夹,并且在配置文件settings.py的TEMPLATES的DIRS添加templates文件夹的路径信息。从Django 3.1版本开始,配置文件settings.py的路径信息改用pathlib模块,Django 3.1之前版本使用os模块,因此PyChram添加templates文件夹的路径信息仍使用os模块。
--------------------------------------
没有自由的秩序和没有秩序的自由,同样具有破坏性。