1. 程式人生 > >pyramid框架學習之(一)——搭建第一個pyramid應用

pyramid框架學習之(一)——搭建第一個pyramid應用

0.前言

1.安裝

在你安裝pyramid之前

Pyramid的安裝需要使用pip和 setuptools工具,python2>2.7.9以及python3>3.4的版本已經內建了pip和setuptools工具包,如果你對專案的python版本沒有特別要求,強烈建議使用最新的python版本,會為你省去不少麻煩。如果你使用的是舊版的python,則需要先使用二進位制檔案或其他方式安裝setuptools,pip。

為你的作業系統安裝Python2.7,Python3.4或更高的版本,並確保相關的其他包都被安裝(Requirements for Installing Packages

)(當前的Pyramid 1.9.1版本,已經在Python2.7,python 3.4,3.5,3.6以及PyPy環境通過測試)

Pyramid框架可以執行在所有主流的UNIX風格的作業系統上,比如Linux,Mac OS X,FreeBSD等,也可以執行在windows平臺以及PyPy(1.9+)之上.

在Unix類系統上安裝pyramid

當你的作業系統已經包含了python並且裝好了pip時,安裝pyramid變得非常簡單

  1. 建立python虛擬環境(不建立亦可,為了防止不同版本python間問題):
    pip install virtualenv
    virtualenv <DIR>
    source <DIR>/bin/activate

  2. 使用
    pip install “pyramid==1.9.1”
    來安裝pyramid

2.建立你的第一個pyramid專案

在這一節中,我們會演示建立一個最輕量級別的Pyramid應用。在我們完成建立應用之後,我們會從細節上解釋它是如何工作的。這部分文件建立在你已經安裝好Pyramid的基礎之上。

Hello World

以下是一個最簡單的Pyramid應用:
暗塵隨馬去

我們將這段程式碼寫入一個名為helloworld.py的Python指令碼檔案並且使用一個已經安裝了pyramid的python編譯器執行這個檔案之後,一個HTTP服務就已經在TCP協議的8080埠上啟動了。

在UNIX上: python helloworld.py

這個指令不會有任何的返回並且控制檯不會有任何的輸出。當我們在一個瀏覽器上訪問hostname:8080/hello/world地址,伺服器會簡單的返回一個“Hello world!”.如果你的應用是在你的本地環境執行,在你的瀏覽器內的位址列輸入http://localhost:8080/hello/world即可顯示這個結果。

每次你通過瀏覽器訪問一個該應用的URL地址時,一條記錄了主機名,日期,請求方法和路徑,以及一些額外資訊的日誌就會被輸出出到控制檯。這些日誌輸出是通過搭載了我們的應用的wsgiref伺服器輸出的。它的輸出形式結合了Apache的日誌輸出和控制檯的日誌輸出方式。

通過快捷鍵Ctrl+C可以停止這個應用。
到此,我們已經對這個應用有了初步的瞭解,下面,我們一步一步來詳細解釋這段程式碼。

匯入依賴

上面的helloworld.py指令碼使用了下面幾條匯入依賴的宣告:
這裡寫圖片描述
這個指令碼從pyramid.config模組匯入了Configurator類。一個Configurator類的例項在後面的程式碼中會被用來配置你的pyramid應用。
像很多其他的Python web框架一樣,Pyramid使用了WSGI 閘道器協議來將web伺服器和應用連線在一起。在這個例子中,wsgiref 伺服器模組被用來很方便的啟用WSGI服務,整合各模組也是被Python標準庫所支援的。

這個例子中還匯入了pyramid.response.Response 類。一個這個類的例項將被用來建立一個web響應。

檢視呼叫宣告

上面的例子中,在匯入依賴的部分之下,定義了一個叫hello_world的函式。
這裡寫圖片描述
這個函式接收一個請求引數(request)並且他返回一個pyramid.response.Response類的例項。這個請求引數是由URL的引數匹配得到的字串。在這個例子中,這個值被作為響應的body部分返回了。

這個函式就是檢視的呼叫(view callable)。一個view callable函式接收一個request引數. 它被期望能夠返回一個response物件。view callable不一定是一個函式,也可以是一個類或者一個例項。但是在這個例子裡,一個函式形式的view callable是最適合我們的。

view callable也經常被稱作一個request請求物件,它可以解釋為通過一個執行的wsgi伺服器向pyramid傳送的HTTP請求的表述資訊(如request請求方式cookie等)。即包含了request請求資訊的一個物件。

view callable需要返回一個response物件因為response物件包含了所有能夠發起一個http response的所有必要資訊。這個物件會被WSGI伺服器轉換成文字的形式來呼叫Pyramid並最終用於真正去響應我們的瀏覽器。為了返回一個reponse物件,每個view callable建立了一個response類的例項。

應用配置

在上面的例子中,下面的程式碼表示對這個簡單的應用進行配置。這個應用在一個if程式碼塊中,通過事先匯入的類以及函式宣告來進行配置。
這裡寫圖片描述

讓我們一步步的解析它。

配置器結構

這裡寫圖片描述
上面程式碼裡的這個if程式碼塊(__name__ == '__main__') 是一種python的約定俗成的寫法:只有當包含這塊程式碼的指令碼是被系統命令列直接執行的,這個if塊中的程式碼才會被呼叫,否則它將不會執行。舉例來說,如果helloworld.py指令碼包含了全部的if程式碼塊,只有python helloworld.py這條指令是從命令列執行的,這個if程式碼塊的內容才會被執行。
使用這個if程式碼塊是必要的,或者說是一種最佳實踐,這是因為在python中,.Py檔案可能作為模組會被其他的.py檔案所匯入引用宣告。使用__name__== __main__的if程式碼塊可以保證指令碼作為模組被載入進其他指令碼的時候程式碼塊中的內容不會被執行,僅當它被直接被執行時才會生效。

第二行的with Congiurator() as config:使用上下文環境(context manager)建立了一個Configurator 類的例項物件config。

後面的程式碼都是使用這個config例項物件來呼叫Configurator類中的方法來進行Pyramid應用的配置。對Configurator()建構函式的呼叫將會對應用進行應用註冊(由金字塔提供的配置資訊的登錄檔,併為應用程式提供服務。應用程式登錄檔將資源型別對映到檢視,以及其他特定於應用程式的元件註冊。每個金字塔應用程式都有且僅有一個應用程式登錄檔。)。

新增配置屬性

這裡寫圖片描述
上面的第一行呼叫了Configurator類中的add_route方法,顧名思義,用於添加了一個匹配“/hello/”URL地址的路由,這個url地址由/hello/和一個字串組成。
第二行將hello_world方法註冊成為一個view callable ,它保證了當hello路由匹配時,hello_world方法會被呼叫。

建立WSGI 應用

這裡寫圖片描述

完成了檢視的配置部分後,指令碼通過Configurator類的make_wsgi_app()建立了一個WSGI應用。這個方法的呼叫必須是在所有的配置完成之後,並使得所有的配置生效。這個方法會返回一個WSGI應用的物件,這個物件可以被用於任何WSGI伺服器來實現和Python web 應用的通訊。我們不在這裡深入的討論WSGI的內容,如果你感興趣,可以在它的文件中機繼續深入https://wsgi.readthedocs.io/en/latest/

這個應用物件,實際上也是一個包含了Pyramid路由資訊的類的例項。它引用了應用程式的登錄檔,這裡的應用程式登錄檔是由configurator建構函式呼叫生成的。前面說到過登錄檔包含了路由的對映關係,路由器將會查詢登錄檔,以決定應用以何種策略對應每一跳路由(對應到每個url請求)。這裡的策略是前面的config例項呼叫的配置方法完成的。在我們的示例中,add_view和add_route方法在呼叫時都沒有設定策略,使用的預設的策略屬性。

啟動WSGI 應用

這裡寫圖片描述
最後,我們終於可以通過·WSGI伺服器啟動我們的應用了。我們使用了wsgiref中的make_server方法來配置伺服器,這裡的‘0.0.0.0’表示監聽所有的TCPip地址.預設情況下,http伺服器將會監聽127.0.0.1本地埠,這會導致你通過遠端訪問應用時出現問題。同時我們也規定了8080埠作為第二個引數,最後一個引數便是app物件(同時也是路由物件),它我們希望啟動服務的應用物件。最後,我們呼叫了伺服器的serve_forever方法,它會進入等待賴在外界的http請求的迴圈。
當這2行程式碼被呼叫時,伺服器會監聽8080埠所有請求。伺服器將會一直執行直到我們通過ctrl+C手動將它停止。

結論

以上是一個最簡單的hello_world應用,它被以命令式形式配置的。後文會介紹命令式及宣告式配置的區別。

相關推薦

pyramid框架學習——搭建一個pyramid應用

0.前言 1.安裝 在你安裝pyramid之前 Pyramid的安裝需要使用pip和 setuptools工具,python2>2.7.9以及python3>3.4的版本已經內建了pip和setuptools工具包,如果你對專案的p

python學習總結一個python程序的編寫

程序代碼 spa 編碼 結構 編輯 下載地址 utf 修改編碼 general 1. python是一種解釋性,編譯型,互動型的語言,面向對象,動態數據類型的高級程序設計語言。 1.1 交互式:意味著可以在一個提示符直接交互執行你寫的程序。 1.2 解釋型:意味著開發過程中

SpringBoot 入門教程例項詳解 開發一個SpringBoot應用程式例項

構建你的第一個Spring Boot應用程式 更多精彩請閱讀 東陸之滇的csdn部落格:http://blog.csdn.net/zixiao217 此教程提供一個入門應用程式例子,來展示Spring Boot是如何幫助快速、敏捷開發新一代應用的。你還可以通

pythonDjango學習筆記---搭建Django開發環境和一些基本命令

system cfile 生成 ont superuser 如果 session username ins 1、Django下載 官方下載地址:https://www.djangoproject.com/download/ 2、Django安裝 linux/wind

SSH框架學習------struts2

str struts2 oct 簡單 src package efi struts2配置 html 1.總的目錄 2.所有程序 1)index.jsp很簡單 <%@ page language="java" contentType="text/html; chars

Maven學習基本配置

http pat pos tps nco path 9.png color pac 安裝maven還幾次沒成功,不過最後還是查資料成功了,所以記錄一下。 1.安裝JDK,比較簡單,就不說明了。 2.配置java的環境變量 JAVA_HOME (最開始因為java配置成C:\

MySQL學習建立MySQL

1、連線Mysql     格式: mysql -h主機地址 -u使用者名稱 -p使用者密碼1、連線到本機上的MYSQL。    首先開啟DOS視窗,然後進入目錄mysql\bin,再鍵入命令mysql -u root -p,回車後提示你輸密碼.注意使用者

年輕人的第一個開源框架學習——ImageViewer

本人是一隻目前正在實習的android菜雞,前段時間帶我的大佬讓我實現一個類似微信朋友圈和b站圖片檢視器酷炫UI效果,具體點就是點選圖片列表中的某張縮圖後進入大圖預覽,這個過程中伴隨著放大的動畫,然後每一張大圖都是viewpager中的一個item,並且大圖都能被下拉縮小,達

Weex 學習筆記- 搭建Weex專案

Weex 學習(一)- 搭建專案 從今天開始學習 Weex 的技術。記錄其中過程遇到的問題。好了,開始挖坑之路! 一、 首先根據 Weex官方文件 開始! 根據以下命令全域性安裝一個Weex控制檯:we

vue2.0學習筆記搭建學習環境

1.0 環境 doc html 指定 har 表達 follow html元素 搭建一個學習的環境,盡量減少高階知識幹擾再一個HTML界面中引入cdn庫,比如: 代碼:`<!DOCTYPE html><html><head><met

Solr6.2.1 學習筆記搭建執行環境(兩種方式)

1.準備工作 Java JDK8 下載並安裝jdk1.8(solr6.*是基於JDK1.8開發的) tomcat8.0 下載並解壓tomcat8 2.在jetty伺服器下執行 solr解壓之後目錄結構如下: solr5之後釋出版本自帶jetty

裝置樹學習GPIO中斷

開發板:tiny4412SDK + S702 + 4GB Flash 要移植的核心版本:Linux-4.4.0 (支援device tree) u-boot版本:友善之臂自帶的 U-Boot 2010.12 busybox版本:busybox 1.25目標: 學習裝置樹中GP

PHP Laravel 框架學習筆記 路由器 中介軟體 基礎使用

用了近兩年Thinkphp,嘗試接觸下Laravel框架,在寫這篇文章的時候,其實我已經陸續學習了laravel一個多月,學習期間寫了個簡單的新聞管理系統,基本熟悉laravel的使用,寫這篇文章是回顧並加深所學的知識,並更深入的瞭解框架,使用更多更有意思的

Play!框架學習筆記

本人很菜,首次接觸Play框架,還在雲裡霧裡的狀態。在這裡,我結合自己的學習思路(就是什麼不懂查什麼),把從網上收集的資料整合起來,方便自己學習。一、Play框架下載安裝劃到下面,選擇下載.zip安裝包(2)解壓到適當位置(如E:\play-2.2.6),並將此路徑新增到Pa

Java框架學習_SpringSpring相關的概念、Spring的配置和屬性注入

學習java框架的路線定為Spring + Mybatis + SpringMVC,即SSM,下面先開始經典的Spring的學習 Spring的開發包:spring-framework-4.2.4.RELEASE-dist 1、Spring相關的概念: Spring:ful

Java框架學習_MybatisMybatis的配置

Mybatis是持久化框架,跟資料庫交換資料的,相當於DBUtils的進階版,具體的請百度,下面直接擼 Mybatis文件:Mybatis文件(中英) 本次所用資料庫的建表語句:Mybatis增刪查改所用建表語句 1、Mybatis的配置和測試使用: 匯入ja

python unittest框架學習筆記

unittest是一個python的測試框架,看了很多文章,整理了一個自己的理解:如下圖 整體流程就是:        (1)首先需要完成的是TestCase,一個TestCase例項就是一個測試用例。      

Java框架學習_SpringMVCSpringMVC的配置和測試使用、SpringMVC的核心架構

SpringMVC+Spring+Mybatis+Maven,SpringMVC是Spring家族的前端框架,具體概念請百度,下面建立工程直接擼 1、SpringMVC的配置和簡單測試使用: 匯入jar包:springmvc所用jar包 工程目錄: 編寫Hell

Hessian學習:簡單測試 + C#呼叫Java服務

開始調研Hessian和Mina,目的是希望能夠建立一個簡單的“高效能分散式服務呼叫框架”!類似於Dubbo或者淘寶的HSF那種,但是是要跨平臺的,而不僅僅侷限在Java領域。 hessian是一種遠端呼叫的機制(RPC) ,類似於web service,不過它是使用自己

Volley網路通訊框架學習筆記

1.什麼是Volley 我們平時在開發Android應用的時候不可避免地都需要用到網路技術,而多數情況下應用程式都會使用HTTP協議來發送和接收網路資料。 Android系統中主要提供了兩種方式來進行HTTP通訊,HttpURLConnection和Http