W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
從現(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)的功能主要有:
后端
這里所說的后端,對應著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ī)定的,讀者如果愿意,也可以根據自己的意愿來任意設計):
另外,還有三個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é)已經介紹,不再贅述。
如此這般,就完成了網站架勢的搭建。
后面要做的是向里面添加內容。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: