python-web之tornado实战篇

本文详细介绍了基于Tornado的Web开发,包括网站的基本架构(MVC模式、前端、后端、数据库),Tornado的基本框架,连接数据库,用户登录功能的实现流程,数据传输,模板继承,Cookie与安全(XSRF跨站请求伪造)以及session和同步异步处理。通过实例展示了如何使用Tornado搭建网站并实现各种功能。
摘要由CSDN通过智能技术生成

 

一、网站的基本架构

1、MVC模式

MVC模式是一个非常好的软件架构模式,在网站开发中,也常常要求遵守这个模式。

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

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

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

2、前端

所谓前端就是指用浏览器打开之后看到的那部分,它是呈现网站传过来的信息的界面,也是用户和网站之间进行信息交互的界面。前端开发,一般使用HTML/CSS/JS,当然,非要用python也不是不可以,但这势必造成以后维护困难。

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

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

3、后端

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

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

4、数据库

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

二、基于Tornado的基本框架

1、tornado中的文件目录

/.
    |
    handlers
    |
    methods
    |
    statics
    |
    templates
    |
    application.py
    |
    server.py
    |
    url.py
  • 有了这个文件架构,后面的事情就是在这个基础上添加具体内容了。

依次说明上面的架势中每个目录和文件的作用:

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

url.py文件:

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

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就表示出于调试模式。调试模式的好处就在于有利于开发调试,但是,在正式部署的时候,最好不要用调试模式。
*/

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()

三、连接数据库

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

import pymysql

conn = pymysql.connect(host="localhost", user="root", passwd="123123", db="qiwsirtest", port=3306, charset="utf8")    #连接对象

cur = conn.cursor()    #游标对象

四、基本功能实现流程(用户登录)

1 前端应实现的登陆逻辑图


2 在实现前端登陆的基础上,在后端进行url配置及登陆状态处理

# 1、登陆功能的url配置:(url.py文件中)

from handlers.index import IndexHandler

url = [
    (r'/', IndexHandler),
]
# 2、登陆状态处理:(在handlers里面建立index.py文件:

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

import tornado.web

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值