返回首页 《从零开始学 Python》(第二版)
关于

预备

关于 Python 的故事
从小工到专家
Python 安装
集成开发环境(IDE)

基本数据类型

数和四则运算
除法
常用数学函数和运算优先级
写一个简单程序
字符串(1)
字符串(2)
字符串(3)
字符串(4)
字符编码
列表(1)
列表(2)
列表(3)
回顾列表和字符串
元组
字典(1)
字典(2)
集合(1)
集合(2)

语句和文件

运算符
语句(1)
语句(2)
语句(3)
语句(4)
语句(5)
文件(1)
文件(2)
迭代
练习
自省

函数

函数(1)
函数(2)
函数(3)
函数(4)
函数练习

类(1)
类(2)
类(3)
类(4)
类(5)
多态和封装
特殊方法(1)
特殊方法(2)
迭代器
生成器

错误和异常

错误和异常(1)
错误和异常(2)
错误和异常(3)

模块

编写模块
标准库(1)
标准库(2)
标准库(3)
标准库(4)
标准库(5)
标准库(6)
标准库(7)
标准库(8)
第三方库

保存数据

将数据存入文件
MySQL 数据库(1)
MySQL 数据库(2)
MongoDB 数据库
SQLite 数据库
电子表格

实战

实战

用Tornado做网站

为做网站而准备
分析 Hello
用 tornado 做网站(1)
用 tornado 做网站(2)
用 tornado 做网站(3)
用 tornado 做网站(4)
用 tornado 做网站(5)
用 tornado 做网站(6)
用 tornado 做网站(7)

科学计算

为计算做准备
Pandas使用(1)
Pandas使用(2)
处理股票数据

结尾

如何成为 Python 高手
via 由「UDN技术社区 Wiki」提供

用 tornado 做网站 (1)

从现在开始,做一个网站,当然,这个网站只能算是一个毛坯的,可能很简陋,但是网站的主要元素,它都会涉及到,读者通过此学习,能够了解网站的开发基本结构和内容,并且对前面的知识可以有综合应用。

基本结构

下面是一个网站的基本结构

前端

这是一个不很严格的说法,但是在日常开发中,都这么说。在网站中,所谓前端就是指用浏览器打开之后看到的那部分,它是呈现网站传过来的信息的界面,也是用户和网站之间进行信息交互的界面。撰写前端,一般使用 HTML/CSS/JS,当然,非要用 Python 也不是不可以(例如上节中的例子,就没有用 HTML/CSS/JS),但这势必造成以后维护困难。

MVC 模式是一个非常好的软件架构模式,在网站开发中,也常常要求遵守这个模式。请阅读维基百科的解释:

MVC 模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC 模式最早由 Trygve Reenskaug 在 1978 年提出,是施乐帕罗奥多研究中心(Xerox PARC)在 20 世纪 80 年代为程序语言 Smalltalk 发明的一种软件设计模式。MVC 模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:

  • (控制器 Controller)- 负责转发请求,对请求进行处理。
  • (视图 View) - 界面设计人员进行图形界面设计。 -(模型 Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

所谓“前端”,就对大概对应着 View 部分,之所以说是大概,因为 MVC 是站在一个软件系统的角度进行划分的,上图中的前后端,与其说是系统部分的划分,不如严格说是系统功能的划分。

前端所实现的功能主要有:

  • 呈现内容。这些内容是根据 url,由后端从数据库中提取出来的。前端将其按照一定的样式呈现出来。另外,有一些内容,不是后端数据库提供的,是写在前端的。
  • 用户与网站交互。现在的网站,这是必须的,比如用户登录。当用户在指定的输入框中输入信息之后,该信息就是被前端提交给后端,后端对这个信息进行处理之后,在一般情况下都要再反馈给前端一个处理结果,然后前端呈现给用户。

后端

这里所说的后端,对应着 MVC 中的 Controller 和 Model 的部分或者全部功能,因为在我们的图中,“后端”是一个狭隘的概念,没有把数据库放在其内。

不在这些术语上纠结。

在我们这里,后端就是用 Python 写的程序。主要任务就是根据需要处理由前端发过来的各种请求,根据请求的处理结果,一方面操作数据库(对数据库进行增删改查),另外一方面把请求的处理结果反馈给前端。

数据库

工作比较单一,就是面对后端的 Python 程序,任其增删改查。

关于 Python 如何操作数据库,在本教程的第贰季第柒章中已经有详细的叙述,请读者阅览。

一个基本框架

上节中,显示了一个只能显示一行字的网站,那个网站由于功能太单一,把所有的东西都写到一个文件中。在真正的工程开发中,如果那么做,虽然不是不可,但开发过程和后期维护会遇到麻烦,特别是不便于多人合作。

所以,要做一个基本框架。以后网站就在这个框架中开发。

建立一个目录,在这个目录中建立一些子目录和文件。

/.
|
handlers
|
methods
|
statics
|
templates
|
application.py
|
server.py
|
url.py

这个结构建立好,就摆开了一个做网站的架势。有了这个架势,后面的事情就是在这个基础上添加具体内容了。当然,还可以用另外一个更好听的名字,称之为设计。

依次说明上面的架势中每个目录和文件的作用(当然,这个作用是我规定的,读者如果愿意,也可以根据自己的意愿来任意设计):

  • handlers:我准备在这个文件夹中放前面所说的后端 Python 程序,主要处理来自前端的请求,并且操作数据库。
  • methods:这里准备放一些函数或者类,比如用的最多的读写数据库的函数,这些函数被 handlers 里面的程序使用。
  • statics:这里准备放一些静态文件,比如图片,css 和 javascript 文件等。
  • templates:这里放模板文件,都是以 html 为扩展名的,它们将直接面对用户。

另外,还有三个 Python 文件,依次写下如下内容。这些内容的功能,已经在上节中讲过,只是这里进行分门别类。

url.py 文件

#!/usr/bin/env Python
# coding=utf-8
"""
the url structure of website
"""

import sys     #utf-8,兼容汉字
reload(sys)
sys.setdefaultencoding("utf-8")

from handlers.index import IndexHandler    #假设已经有了

url = [
    (r'/', IndexHandler),
]

url.py 文件主要是设置网站的目录结构。from handlers.index import IndexHandler,虽然在 handlers 文件夹还没有什么东西,为了演示如何建立网站的目录结构,假设在 handlers 文件夹里面已经有了一个文件 index.py,它里面还有一个类 IndexHandler。在 url.py 文件中,将其引用过来。

变量 url 指向一个列表,在列表中列出所有目录和对应的处理类。比如 (r'/', IndexHandler),,就是约定网站根目录的处理类是 IndexHandler,即来自这个目录的 get() 或者 post() 请求,均有 IndexHandler 类中相应方法来处理。

如果还有别的目录,如法炮制。

application.py 文件

#!/usr/bin/env Python
# coding=utf-8

from url import url

import tornado.web
import os

settings = dict(
    template_path = os.path.join(os.path.dirname(__file__), "templates"),
    static_path = os.path.join(os.path.dirname(__file__), "statics")
    )

application = tornado.web.Application(
    handlers = url,
    **settings
    )

从内容中可以看出,这个文件完成了对网站系统的基本配置,建立网站的请求处理集合。

from url import url 是将 url.py 中设定的目录引用过来。

setting 引用了一个字典对象,里面约定了模板和静态文件的路径,即声明已经建立的文件夹"templates"和"statics"分别为模板目录和静态文件目录。

接下来的 application 就是一个请求处理集合对象。请注意 tornado.web.Application() 的参数设置:

tornado.web.Application(handlers=None, default_host='', transforms=None, **settings)

关于 settings 的设置,不仅仅是文件中的两个,还有其它,比如,如果填上 debug = True 就表示出于调试模式。调试模式的好处就在于有利于开发调试,但是,在正式部署的时候,最好不要用调试模式。其它更多的 settings 可以参看官方文档: tornado.web-RequestHandler and Application classes

server.py 文件

这个文件的作用是将 tornado 服务器运行起来,并且囊括前面两个文件中的对象属性设置。

#!/usr/bin/env Python
# coding=utf-8

import tornado.ioloop
import tornado.options
import tornado.httpserver

from application import application

from tornado.options import define, options

define("port", default = 8000, help = "run on the given port", type = int)

def main():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)

    print "Development server is running at http://127.0.0.1:%s" % options.port
    print "Quit the server with Control-C"

    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

此文件中的内容,在 上节已经介绍,不再赘述。

如此这般,就完成了网站架势的搭建。

后面要做的是向里面添加内容。


总目录   |    上节:分析 Hello   |    下节:用 tornado 做网站 (2)

如果你认为有必要打赏我,请通过支付宝:qiwsir@126.com,不胜感激。

上一篇: 分析 Hello 下一篇: 用 tornado 做网...

深圳SEO优化公司济宁至尊标王哪家好张掖至尊标王营口百姓网标王价格信阳外贸网站建设公司朝阳网站推广方案报价南昌百度竞价包年推广报价大同优化观澜百度竞价哪家好成都品牌网站设计多少钱常州关键词排名包年推广无锡英文网站建设襄阳百度网站优化排名哪家好淮北营销型网站建设价格青岛网站开发公司徐州网站制作设计公司坑梓网站推广系统价格景德镇网站搜索优化多少钱信阳设计网站多少钱仙桃SEO按天扣费价格抚顺营销型网站建设果洛百搜标王哪家好临沂外贸网站制作推荐玉林网站建设设计哪家好南平网站seo优化报价崇左网站制作价格沈阳如何制作网站哪家好连云港SEO按效果付费哪家好阳江网站搭建价格成都设计公司网站迪庆外贸网站建设多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化