1. 程式人生 > >用Python做個小網站(MVC架構)

用Python做個小網站(MVC架構)

1. 基本結構,採用 MVC 模式。 控制器(controller)負責轉發請求,對請求進行處理檢視 (View): 介面設計人員進行圖形介面設計。模型 (Model): 程式設計師編寫程式應有的功能(實現演算法等)、資料庫管理2。一個基本架勢做一個基本的框架,建立好各級目錄 /. handlers methods statics templates application.py server.py url.pyhandler: 我準備在這個資料夾中放後端 python 程式,主要處理來自前端的請求,並且操作資料庫。method: 這裡準備放一些函式或者類,比如用的最多的讀寫資料庫的函式,這些函式被 handlers 裡面的程式使用。staics: 這裡準備放一些靜態檔案,比如圖片、css\JavaScript檔案等template: 這裡放模板檔案,都以html為副檔名2.1 url.py  主要設定網站的目錄結構#!/usr/bin/env python# coding=utf-8"""the url structure of website"""import sysreload (sys)sys.setdefaultencoding("utf-8")from handlers.index import IndexHandlerurl = [(r'/',IndexHandler),]2.2 application.py 該檔案完成了對網站系統的基本配置,建立網站請求處理集合#!/usr/bin/env python#coding:utf-8from url import urlimport tornado.webimport
ossettings = 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)2.3 server.py 作用是將tornado伺服器執行起來,並且囊括前面兩個檔案的物件屬性設定。#!/usr/bin/env/python#coding:utf-8import
tornado.ioloopimport tornado.optionsimport tornado.httpserverfrom application import applicationfrom tornado.options import define,optionsdefine("port",default = 8088 , 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.portprint "Quit the server with Control-C"tornado.ioloop.IOLoop.instance().start()if __name__ == "__main__":main()2.4 登入介面 index.html<! DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Learming Python</title></head><body><h2>Login</h2><form method="POST"><p><span>UserName:</span><input type = "text" id = "username" /></p><p><span>Password:</span><input type = "text" id = "password" /></p><p><input type="BUTTON" value="LOGIN" id ="login" /></p></form></body></html>JavaScript 一種直譯式指令碼語言,JQuery 是一套跨瀏覽器的JavaScript庫,可以簡化 HTML 和JavaScript之間的操作。在index.html中引入jQuery 的方法有多種b: 把jQuery下載下來,放在指定的地方到官網(https://jqueryui.com/)下載最新的庫,然後放在statics目錄下,建議下載以min.js結尾的檔案愛呢,因為這個是壓縮過得,然後為了簡短更名為jquery.min.js。引入:<script src="statics/js/jquery.min.js"></script>或者<script src="{{static_url("js/jquery.min.js")}}"></script>再引入自己寫的js,<script src="{{static_url("js/script.js")}}"></script>$(document).ready(function(){alert("good")$("#login").click(function(){var user = $("#username").val();var pwd = $("#password").val();alert("username:"+user);});});url.py 做過這樣的設定:from handlers.index import IndexHandlerurl = [       (r'/',IndexHandler),]吸納在把假設有了的那個檔案index.py 建立起來,即在handler 裡面建立index.py 檔案,內容如下#!/usr/bin/env python#coding:utf-8import tornado.webclass IndexHandler(tornado.web.RequestHandler):def get(self):self.render("index.html")將上面的檔案儲存之後,回到handler目錄中,因為這裡面的檔案要在別處被當作模組引用,所以需要在這裡建立一個空檔案,命名為:__init__.py至此,一個簡單的網站建立起來了,執行server.py 即可 >>>python server.py3. 資料傳輸Ajax()實現前後太資料傳輸,修改 script.js  如下$(document).ready(function(){alert("good")$("#login").click(function(){var user = $("#username").val();var pwd = $("#password").val();var pd = {"username":user,"password":pwd};$.ajax({type:"post",url:"/",data:pd,cache:false,success:function(data){alert(data);},error:function(){alert("error!");},});});});pd 那行,得到一個json物件中,接下來就是利用Ajax()方法將這個json物件傳給後端。引數說明如下:
  • type 是 post 還是 get
  • url : post /get 的地址
  • data: 傳輸的資料,包括三種,(1)html拼接的字串(2)json資料(3)form表單經serialize()序列化的。不是一般都是字典集嗎,我自己想的
  • cache: 預設為True 如果不希望有快取,設定為False.
  • success 請求成功的回撥函式。
  • error 請求失敗所執行的函式
3. 資料處理 前端通過Ajax 將資料以json的格式傳給了後臺,並且指明瞭路徑“/”,這個路徑在url.py 中做了配置,由handlers 目錄中 index.py 檔案的IndexHandler類來處理。因為用的是post方法傳輸,所以在類中需要有 post 方法來接受處理資料。完善程式碼為:#!/usr/bin/env python#coding:utf-8import tornado.webclass IndexHandler(tornado.web.RequestHandler):def get(self):self.render("index.html")def post(self):username = self.get_argument("username")password = self.get_argument("password")self.write(username)在post 方法中,使用 get_argument()方法來接收前端傳遞過來的資料,引數表示鍵值對的鍵,獲取對應的值。write() 方法,是後端向前端返回資料,可以是字串,json字串