Python Web開發

參考原文

  Python廖雪峯html

WSGI接口

  WSGI(Web Server Gateway Interface)是一個接口,用來屏蔽底部的細節(如TCP的創建鏈接,HTTP原始請求和響應格式等)。WSGI接口定義很是簡單,只須要Web開發者實現一個函數,就能夠響應客戶端的HTTP請求python

  這個函數有兩個參數:environ:包含全部的HTTTP請求的dict對象;start_response:一個發送HTTP響應的函數。flask

這兩個參數,咱們是沒有辦法提供的,是須要符合WSGI規範的服務器來提供的。瀏覽器

  Python內置了一個WSGI服務器,這個模塊就wsgiref,是用純Python編寫的,不考慮任何的運行效率,僅供開發和測試使用。接下來,咱們就來實現一個基本的響應請求的處理。服務器

  首先,編寫hello.py,用於實現Web應用程序的WSGI處理函數:app

#hello.py

def application(environ, start_response):
    #返回響應的首部
    start_response('200 OK',[('Content-Type', 'text/html')])
    #返回響應的主體
    return [b'<h1>Hello,world<h1>']

  再編寫一個server.py,用於啓動WSGI服務器,加載application()函數:框架

#server.py
#導入響應的模塊函數:
from wsgiref.simple_server import make_server
#導入先前編寫的application函數:
from hello import application

#建立一個服務器,IP地址爲空,渡口是8000,處理函數是application
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
#開始監聽HTTP請求:
httpd.serve_forever()

  在終端運行server.py,並在瀏覽器輸入地址:localhost:8000,效果以下圖:ide

  在命令行能夠看到wsgiref打印的log:函數

 

  咱們也能夠根據environ裏的參數信息,來生成動態的HTML。工具

   總結:不管多麼複雜的Web應用程序,入口都是一個WSGI處理函數。HTTP請求的全部輸入信息均可以經過environ得到,HTTP響應的輸出均可以經過start_response()加上函數返回值做爲Body。

使用Web框架

  瞭解了WSGI框架,咱們發現:其實一個WebAPP,就是一個WSGI的處理函數,針對每一個HTTP請求進行響應。可是WSGI抽象程度仍是比較低,咱們可使用Web框架來實現WebAPP。

  Python中的Web框架很是多,咱們先直接選擇一個比較流行的Web框架——Flask來使用。

  首先使用pip(Python包管理工具)來安裝Flask

sudo apt install python-pip #安裝pip

pip install flask  #安裝flask

  而後編寫一個app.py,處理3個URL請求,分別是

  • GET / : 首頁,返回Home頁
  • GET /signin : 登錄頁,顯示登錄表單,用於用戶登錄
  • POST /signin : 處理用戶輸入的登錄表單,返回登錄結果

  Flask經過Python的裝飾器在內部自動地把URL和函數給關聯起來,因此咱們寫出的代碼應該這樣:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    return '<h1>Home</h1>'

@app.route('/signin', methods=['GET'])
def signin_form():
    return '''<form action="/signin" method="post">
            <p><input name="username" type="text"></p>
            <p><input name="password" type="password"></p>
            <p><input type="submit" value="Sign In"></p>
            </form>
            '''

@app.route('/signin', methods=['POST'])
def signin():
    if request.form['username'] =='admin' and request.form['password'] =='password':
        return '<h3>Hello,admmin!</h3>'
    return '<h3>Bad username or password!</h3>'

if __name__ == '__main__':
    app.run()
View Code

   運行python  app.py,Flask自帶的server在端口5000上監聽:

  打開瀏覽器,輸入首頁地址:http://localhost:5000/

  繼續輸入http://localhost:5000/signin:

 

  輸入預設的用戶名admin和密碼password,登陸成功:

  輸入錯誤的信息:

  

相關文章
相關標籤/搜索