用 Python 構建 web 應用

用 Python 構建 web 應用

若是說僅僅要用 Python 構建 web 應用,能夠將 socket 鏈接、HTTP 原始請求和響應格式等涉及網絡基礎的東西交給現成的庫來實現,只須要專一於 web 端界面、交互、業務邏輯以及數據庫的設計,那麼使用 Python 構建一個 web 應用實際上就比較簡單了。css

關於 Python 這門語言

這是我第一次使用 Python 語言,簡單了看了下 廖雪峯的 Python 教程,瞭解了相應的語法和 web 開發相關的內容。其實在編寫代碼時能感覺到,Python 確實挺容易上手的,有些地方看上去語法很奇怪或者說難以理解,可是回過頭對照教程裏的基礎知識又可以明白個大概。Python 中有一些如 __main____init____name__ 這類特殊變量,在剛開始使用的時候按照教程寫,而後根據 Python 教程對照着看,感受仍是能夠明白的。html

簡單的 web 應用:Hello Web

這一部分能夠看下 廖雪峯的 Python 教程 中關於 WSGI 接口的內容,簡單提一下:python

# simple_server.py
from wsgiref.simple_server import make_server

def application( environ, start_response ):
start_response( '200 OK', [ ('Content-Type', 'text/html') ] )
return [b'<h1>Hello, Web</h1>']

httpd = make_server( '', 8080, application )
print('Serveing HTTP on port 8080...')

httpd.serve_forever()

若是你使用的 Python 是 3.x,那麼在運行上面這段代碼時可能就會報錯,若是報錯內容和 wsgiref handlers 有關,那麼能夠參考 python3.4中自定義wsgi函數,make_server函數報錯問題 這篇文章的解決方法,將 /path_to_python_installation/Lib/wsgiref 目錄下的 handlers.py 文件中關於 finish_response 的部分修改(約第 180 行):將 self.write(data) 改爲 self.write(data.encode())web

而後打開瀏覽器,訪問 127.0.0.1:8080 端口就能夠看到 「Hello Web」 了。數據庫

使用 flask 框架進行開發

上面使用 wsgiref 能夠很方便的製做簡單的 web 應用。可是若是要製做較複雜的應用,那麼仍是使用框架吧,這樣會簡化不少工做。我使用的是 flask 框架。使用 pip install flask 安裝便可。json

雖然說框架實現隱藏了不少細節的東西,可是要掌握它也要花點時間,好在它的文檔比較詳細,並且有一些基礎的示例,可以很快作出一個頁面來:flask

# webserver.py
from flask import Flask
from flask import request, render_template, url_for, json, make_response, redirect

app = Flask( '__main__' )

@app.route( "/", methods = [ 'GET', 'POST' ] )
def home():
resp = make_response( render_template( 'index.html' , title='test' ) )
resp.set_cookie( 'username', 'test username' )
# for user in db.query( 'select * from `account`' ):
# print(user['port'], user['password'])
return resp

上面這段代碼就可讓你在訪問瀏覽器時獲得一個簡單的 web 界面,另外我還在網頁中存儲了一個 username: test username 的 cookie。使用 python webserver.py 運行服務器程序,而後在瀏覽器訪問 127.0.0.1:5000 就能夠看到一個簡單的網頁了。bootstrap

使用 flask 比較麻煩的一點是做爲模版的 html 文件須要放在 webserver.py 文件同級目錄的 templates 目錄,也能夠在構造 Flask 對象的時候指定模板路徑,可是感受仍是不夠靈活。模板文件的語法能夠參考 jinjia2瀏覽器

還有一點是關於靜態文件的加載,靜態文件須要放在同級目錄的 static 目錄,若是直接在 html 中引用 /css/bootstrap.min.css,在瀏覽器訪問時會出現找不到文件的問題,能夠將引用的路徑改爲 /static/css/bootstrap.min.css,我在 webserver 中添加了一個方法:服務器

@app.route( '/css/<filename>', methods = [ 'GET' ] )
def static_css( filename ) :
with open( './static/css/' + filename, 'r', encoding='utf-8' ) as f :
resp = make_response( f.read() )
resp.mimetype = 'text/css'
return resp

在讀取 css 靜態文件時,到相應的目錄下找到對應的文件讀取內容,而後把響應的 mimetype 改爲 text/css,不然的話默認響應類型是 text/plain,瀏覽器會出現警告。

小結

至此,一個簡單的 web 應用就作好了,可是內容還比較少,並且也沒有具體的業務邏輯和數據庫操做。相關的內容 flask 框架已經提供了,須要查看 flask 教程。

References

  1. 廖雪峯的 Python 教程
  2. python3.4中自定義wsgi函數,make_server函數報錯問題
  3. python3 運行時報錯解決方法
  4. flask
  5. jinjia2
相關文章
相關標籤/搜索