1. 程式人生 > >python學習——使用WEB框架

python學習——使用WEB框架

瞭解了WSGI框架,我們發現:其實一個Web App,就是寫一個WSGI的處理函式,針對每個HTTP請求進行響應。

但是如何處理HTTP請求不是問題,問題是如何處理100個不同的URL。

每一個URL可以對應GET和POST請求,當然還有PUT、DELETE等請求,但是我們通常只考慮最常見的GET和POST請求。

一個最簡單的想法是從environ變數裡取出HTTP請求的資訊,然後逐個判斷:

def application(environ, start_response):
    method = environ['REQUEST_METHOD']
    path = environ['PATH_INFO'
] if method=='GET' and path=='/': return handle_home(environ, start_response) if method=='POST' and path='/signin': return handle_signin(environ, start_response) ...

只是這麼寫下去程式碼是肯定沒法維護了。

程式碼這麼寫沒法維護的原因是因為WSGI提供的介面雖然比HTTP介面高階了不少,但和Web App的處理邏輯比,還是比較低階,我們需要在WSGI介面之上能進一步抽象,讓我們專注於用一個函式處理一個URL,至於URL到函式的對映,就交給Web框架來做。

由於用Python開發一個Web框架十分容易,所以Python有上百個開源的Web框架。這裡我們先不討論各種Web框架的優缺點,直接選擇一個比較流行的Web框架——Flask來使用。

用Flask編寫Web App比WSGI介面簡單(這不是廢話麼,要是比WSGI還複雜,用框架幹嘛?),我們先用pip安裝Flask:

$ pip install flask

然後寫一個app.py,處理3個URL,分別是:

  • GET /:首頁,返回Home

  • GET /signin:登入頁,顯示登入表單;

  • POST /signin:處理登入表單,顯示登入結果。

注意噢,同一個URL/signin

分別有GET和POST兩種請求,對映到兩個處理函式中。

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"></p>
              <p><input name="password" type="password"></p>
              <p><button type="submit">Sign In</button></p>
              </form>'''

@app.route('/signin', methods=['POST'])
def signin():
    # 需要從request物件讀取表單內容:
    if request.form['username']=='admin' and request.form['password']=='password':
        return '<h3>Hello, admin!</h3>'
    return '<h3>Bad username or password.</h3>'

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

執行python app.py,Flask自帶的Server在埠5000上監聽:

$ python app.py 
 * Running on http://127.0.0.1:5000/

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

flask-home

首頁顯示正確!

再在瀏覽器位址列輸入http://localhost:5000/signin,會顯示登入表單:

flask-signin-form

輸入預設的使用者名稱admin和口令password,登入成功:

flask-signin-ok

輸入其他錯誤的使用者名稱和口令,登入失敗:

flask-signin-failed

實際的Web App應該拿到使用者名稱和口令後,去資料庫查詢再比對,來判斷使用者是否能登入成功。

除了Flask,常見的Python Web框架還有:

  • Django:全能型Web框架;

  • web.py:一個小巧的Web框架;

  • Bottle:和Flask類似的Web框架;

  • Tornado:Facebook的開源非同步Web框架。

當然了,因為開發Python的Web框架也不是什麼難事,我們後面也會講到開發Web框架的內容。

小結

有了Web框架,我們在編寫Web應用時,注意力就從WSGI處理函式轉移到URL+對應的處理函式,這樣,編寫Web App就更加簡單了。

在編寫URL處理函式時,除了配置URL外,從HTTP請求拿到使用者資料也是非常重要的。Web框架都提供了自己的API來實現這些功能。Flask通過request.form['name']來獲取表單的內容。

相關推薦

PythonWeb框架編寫學習心得

記錄日誌 實例 心得 ret NPU oba esp ascii edi 學習廖雪峰老師的Python實戰教程,在Web框架這部分看了大致一個多禮拜,前面的知識學的不夠紮實,由於比較復雜,因此在這裏總結下,也算是鞏固了。 先看下框架的調用代碼: app = web.Ap

python高效能web框架Sanic學習--url

本文基於sanic 官方文件解釋及自己閱讀後的感想. 首先什麼是sanic? sanic是一款用python3.5+寫的web framework。它有一下幾個特點: 1.flask-like的語法風格,簡單易學 2.輕量 3.基於python3.5

PythonWeb框架介紹

楊文 python gateway 應用程序 服務器 第三方 所有的語言Web框架本質其實就是起一個socket服務端,監聽一個端口,然後運行起來Web框架包含兩部分,一部分是socket,另外一部分是業務的邏輯處理,根據請求的不同做不同的處理Python的Web框架分成了兩類,即包含

13.pythonweb框架概念的引入。

web框架 python 一、什麽是web框架?框架,就是一個為解決一個開放性問題而設計的具有一定約束性的支撐結構,使用框架可以幫你快速開發特定的系統,簡單地說,就是你用別人搭建好的舞臺來做表演。對於所有的Web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket客戶端。

Python簡單Web框架web.py實例hello world

brush main 安裝 self name globals bject pytho log 1、安裝web.py模塊easy_install web.py 2、實現代碼 import web urls = (‘/hello‘, ‘hello‘, )

Python 常用Web框架的比較

基於 比較 tex 性能 數據庫結構 客戶端 ebp best 分析 從GitHub中整理出的15個最受歡迎的Python開源框架。這些框架包括事件I/O,OLAP,Web開發,高性能網絡通信,測試,爬蟲等。Django: Python Web應用開發框架 Djang

29、PythonWeb框架Django入門

char rip 目的 temp 安裝完成 ron 們的 執行命令 一個 一、Django入門   1、django的安裝。django的安裝和安裝其他模塊一樣,我們找到python的安裝目錄的script目錄,然後執行命令:pip3 install Django即可。安裝

Python學習---抽屜框架分析[點贊功能/文件上傳分析]0317

b- NPU script ron tro ref 前臺 for inpu 點贊功能分析 前臺傳遞過來新聞id[new_id]和session[session內有用戶ID和用戶之間的信息]到後臺 後臺News數據庫內用戶和新聞是多對多的關系,查看第三張表中的內容,判讀用戶I

2018年9月25日pythonweb框架Django入門的理論知識

好久沒有更新文章了,罪過罪過,以後要堅持更新文章!不能再懶了!   儲存器容量大小的轉換: 1TB = 1024GB 1PB = 1024TB 1EB = 1024PB 1ZB = 1024EB ………… 1、什麼是軟體     

Django-Python重量級Web框架

Django是一套完整的MVC開發架構,雖然在微服務盛行的今時今日再談MVC有些老土,不過對於python這種解決小專案的開發語言來說,MVC仍然是最優的選擇。 嚴格來說,Django是MTC,因為其表現層用的是模板(Template)   Django的目錄結構 mana

Python三大web框架簡單介紹

Django 是重量級框架:它封裝的的功能常豐富非常多所以它是重量級,Django的文件最完善、市場佔有率最高、招聘職位最多。Django提供全套的解決方案(full-stack framework + batteries included),基本要什麼有什麼(比如:cache、session、feed、or

Pythonweb框架淺談

""" <axiner>宣告:(錯了另刂扌丁我) (如若有誤,請記得指出喲,謝謝了!!!) """ Web application frameworks(網路應用框架),簡稱:web框架,用於構建web應用。   以下是axiner自制的一張簡圖: &n

pythonWeb框架,Django模板變量,過濾器和靜態文件引入

time_zone keyword ast 地址 func ssi 模板文件 config pat HTML模板的路徑查找 在setting中設置查找路徑: 1 #默認的查找在此處填寫,優先級最高,為在manage.py的同級路徑中,添加(常規是template)文件夾,

python Flask web框架

path pretty spa 記錄 run explain 功能 ng- 錯誤頁面 目錄: --> Flask   --> 配置文件     --> 配置文件解析     --> 配置文件導入   --> 路由

pythonWeb框架,html分頁

led 超出 text 數據量 digi imp context model true 使用簡單的算法得出頁碼數,然後在html中獲取即可。僅供參考。 views的寫法 1 def crm_stu(request): 2 section = ‘教

pythonWeb框架,類視圖

section teacher itl 指示 分發 XML 定義 -m 文件中 類視圖 範式 1 from django.views import View 2 3 # 繼承View 4 class IndexView(View): 5 def g

pythonWeb框架,中間件middleware及djangoAdmin

create self name djang data- 獲取 管理表 type -c 簡介 用於處理request和response的中間處理的函數,可以創建在項目中的任意位置,只要可以導入即可。 建議創建在APP目錄下,方便管理。 函數範式與激活 1 中間

pythonWeb框架,auth權限系統

跳轉 clear 異常 style else .... require 裝飾 min 使用django默認權限系統實現用戶登錄退出 判斷用戶是否登錄 request.user.is_authenticated 返回的為bool值 一個簡單的登錄視圖

Django-手擼簡易web框架-實現動態網頁-wsgiref初識-jinja2初識-python主流web框架對比-00

目錄 自己動手實現一個簡易版本的web框架 手擼一個web服務端 根據請求 url 做不同的響應處理 基於wsgiref模組實現服務端 用wsgiref 模組的做的兩件事

Go元件學習——Web框架Gin

以前學Java的時候,和Spring全家桶打好關係就行了,從Spring、Spring MVC到SpringBoot,一脈相承。 對於一個Web專案,使用Spring MVC,就可以基於MVC的思想開發專案了,不管是應對前後端分離還是不分離的場景,你都可以輕鬆駕馭。因為你只要知道,你用的是一個Web開發框架