国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

用tornado做網站(1)

2018-02-24 15:48 更新

從現(xiàn)在開始,做一個網站,當然,這個網站只能算是一個毛坯的,可能很簡陋,但是網站的主要元素,它都會涉及到,讀者通過此學習,能夠了解網站的開發(fā)基本結構和內容,并且對前面的知識可以有綜合應用。

基本結構

下面是一個網站的基本結構

前端

這是一個不很嚴格的說法,但是在日常開發(fā)中,都這么說。在網站中,所謂前端就是指用瀏覽器打開之后看到的那部分,它是呈現(xiàn)網站傳過來的信息的界面,也是用戶和網站之間進行信息交互的界面。撰寫前端,一般使用HTML/CSS/JS,當然,非要用python也不是不可以(例如上節(jié)中的例子,就沒有用HTML/CSS/JS),但這勢必造成以后維護困難。

MVC模式是一個非常好的軟件架構模式,在網站開發(fā)中,也常常要求遵守這個模式。請閱讀維基百科的解釋:

MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構模式,把軟件系統(tǒng)分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。

MVC模式最早由Trygve Reenskaug在1978年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程序語言Smalltalk發(fā)明的一種軟件設計模式。MVC模式的目的是實現(xiàn)一種動態(tài)的程式設計,使后續(xù)對程序的修改和擴展簡化,并且使程序某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程序結構更加直觀。軟件系統(tǒng)通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業(yè)人員可以通過自身的專長分組:

  • (控制器 Controller)- 負責轉發(fā)請求,對請求進行處理。
  • (視圖 View) - 界面設計人員進行圖形界面設計。 -(模型 Model) - 程序員編寫程序應有的功能(實現(xiàn)算法等等)、數(shù)據庫專家進行數(shù)據管理和數(shù)據庫設計(可以實現(xiàn)具體的功能)。

所謂“前端”,就對大概對應著View部分,之所以說是大概,因為MVC是站在一個軟件系統(tǒng)的角度進行劃分的,上圖中的前后端,與其說是系統(tǒng)部分的劃分,不如嚴格說是系統(tǒng)功能的劃分。

前端所實現(xiàn)的功能主要有:

  • 呈現(xiàn)內容。這些內容是根據url,由后端從數(shù)據庫中提取出來的。前端將其按照一定的樣式呈現(xiàn)出來。另外,有一些內容,不是后端數(shù)據庫提供的,是寫在前端的。
  • 用戶與網站交互?,F(xiàn)在的網站,這是必須的,比如用戶登錄。當用戶在指定的輸入框中輸入信息之后,該信息就是被前端提交給后端,后端對這個信息進行處理之后,在一般情況下都要再反饋給前端一個處理結果,然后前端呈現(xiàn)給用戶。

后端

這里所說的后端,對應著MVC中的Controller和Model的部分或者全部功能,因為在我們的圖中,“后端”是一個狹隘的概念,沒有把數(shù)據庫放在其內。

不在這些術語上糾結。

在我們這里,后端就是用python寫的程序。主要任務就是根據需要處理由前端發(fā)過來的各種請求,根據請求的處理結果,一方面操作數(shù)據庫(對數(shù)據庫進行增刪改查),另外一方面把請求的處理結果反饋給前端。

數(shù)據庫

工作比較單一,就是面對后端的python程序,任其增刪改查。

關于python如何操作數(shù)據庫,在本教程的第貳季第柒章中已經有詳細的敘述,請讀者閱覽。

一個基本框架

上節(jié)中,顯示了一個只能顯示一行字的網站,那個網站由于功能太單一,把所有的東西都寫到一個文件中。在真正的工程開發(fā)中,如果那么做,雖然不是不可,但開發(fā)過程和后期維護會遇到麻煩,特別是不便于多人合作。

所以,要做一個基本框架。以后網站就在這個框架中開發(fā)。

建立一個目錄,在這個目錄中建立一些子目錄和文件。

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

這個結構建立好,就擺開了一個做網站的架勢。有了這個架勢,后面的事情就是在這個基礎上添加具體內容了。當然,還可以用另外一個更好聽的名字,稱之為設計。

依次說明上面的架勢中每個目錄和文件的作用(當然,這個作用是我規(guī)定的,讀者如果愿意,也可以根據自己的意愿來任意設計):

  • handlers:我準備在這個文件夾中放前面所說的后端python程序,主要處理來自前端的請求,并且操作數(shù)據庫。
  • methods:這里準備放一些函數(shù)或者類,比如用的最多的讀寫數(shù)據庫的函數(shù),這些函數(shù)被handlers里面的程序使用。
  • statics:這里準備放一些靜態(tài)文件,比如圖片,css和javascript文件等。
  • templates:這里放模板文件,都是以html為擴展名的,它們將直接面對用戶。

另外,還有三個python文件,依次寫下如下內容。這些內容的功能,已經在上節(jié)中講過,只是這里進行分門別類。

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
    )

從內容中可以看出,這個文件完成了對網站系統(tǒng)的基本配置,建立網站的請求處理集合。

from url import url是將url.py中設定的目錄引用過來。

setting引用了一個字典對象,里面約定了模板和靜態(tài)文件的路徑,即聲明已經建立的文件夾"templates"和"statics"分別為模板目錄和靜態(tài)文件目錄。

接下來的application就是一個請求處理集合對象。請注意tornado.web.Application()的參數(shù)設置:

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

關于settings的設置,不僅僅是文件中的兩個,還有其它,比如,如果填上debug = True就表示出于調試模式。調試模式的好處就在于有利于開發(fā)調試,但是,在正式部署的時候,最好不要用調試模式。其它更多的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()

此文件中的內容,在上節(jié)已經介紹,不再贅述。

如此這般,就完成了網站架勢的搭建。

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

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號