99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀工具 | Python Web 開發(fā)的十個框架
工具 | Python Web 開發(fā)的十個框架
2016-05-13
收藏
Python 是一門動態(tài)、面向?qū)ο笳Z言。其最初就是作為一門面向?qū)ο笳Z言設(shè)計的,并且在后期又加入了一些更高級的特性。除了語言本身的設(shè)計目的之外,Python標(biāo)準(zhǔn) 庫也是值得大家稱贊的,Python甚至還自帶服務(wù)器。

其它方面,Python擁有足夠多的免費數(shù)據(jù)函數(shù)庫、免費的Web網(wǎng)頁模板系統(tǒng)、還有與Web服務(wù) 器進(jìn)行交互的庫、這些都可以設(shè)計到你的Web應(yīng)用程序里面。

這篇文章列舉了十個Python Web應(yīng)用開發(fā)框架,不過因為Django似乎人盡皆知的樣子,沒有列在文中。。

CubicWeb

CubicWeb的最重要的支柱就是代碼的可重用性。CubicWeb宣揚自己不僅是一個Web開發(fā)框架,而且還是一款語義Web開發(fā)框架。CubicWeb使用關(guān)系查詢語言(RQLRelation Query Language)與數(shù)據(jù)庫之間進(jìn)行通信。



Zope2


Zope 2是一款基于Python的Web應(yīng)用框架,是所有Python Web應(yīng)用程序、工具的鼻祖,是Python家族一個強(qiáng)有力的分支。Zope 2的“對象發(fā)布”系統(tǒng)非常適合面向?qū)ο箝_發(fā)方法,并且可以減輕開發(fā)者的學(xué)習(xí)曲線,還可以幫助你發(fā)現(xiàn)應(yīng)用程序里一些不好的功能。

Web2py


Web2py是一個用Python語言編寫的免費的開源Web框架,旨在敏捷快速的開發(fā)Web應(yīng)用,具有快速、可擴(kuò)展、安全以及可移植的數(shù)據(jù)庫驅(qū)動的應(yīng)用,遵循LGPLv3開源協(xié)議。

Web2py提供一站式的解決方案,整個開發(fā)過程都可以在瀏覽器上進(jìn)行,提供了Web版的在線開發(fā),HTML模版編寫,靜態(tài)文件的上傳,數(shù)據(jù)庫的編寫的功能。其它的還有日志功能,以及一個自動化的admin接口。

TurboGears


它是另外一個基于 Python 的 MVC 風(fēng)格的 Web 應(yīng)用程序框架。

TurboGears 開發(fā)人員稱這個項目是一個 “大框架(megaframework)”,這是因為它是由現(xiàn)有的子項目構(gòu)成的。TurboGears 可以幫助將很多主要組件集成在一起:

MochiKit:JavaScript 庫

Kid:模板語言

CherryPy:基本 Web 框架

SQLObject:對象關(guān)系映射器(ORM)

Pylons


Pylons是一個開放源代碼的Web應(yīng)用框架,使用python語言編寫。它對WSGI標(biāo)準(zhǔn)進(jìn)行了擴(kuò)展應(yīng)用,提升了重用性且將功能分割到獨立的模塊中。

Pylons是最新的Web應(yīng)用框架中的典型,類似于Django和TurboGears。Pylons受Ruby on Rails影響很深:它的兩個組件,Routes和WebHelpers是Rails特性的Python實現(xiàn)。

Grok


Grok 是一個為 Python 開發(fā)者提供的Web應(yīng)用開發(fā)框架,Grok 的重點是敏捷開發(fā),是一個易用而且功能強(qiáng)大的開發(fā)框架,基于 Zope 3 技術(shù)。

Web.py


Web.py是一個輕量級的開源Python Web框架,小巧靈活、簡單并且非常強(qiáng)大,在使用時沒有任何限制。目前Web.py被廣泛運用在許多大型網(wǎng)站,如西班牙的社交網(wǎng)站Frinki、主頁日平均訪問量達(dá)7000萬次的Yandex等。

Pyramid


Pyramid也是一款輕量級的開源Python Web框架,是Pylons項目的一部分。Pyramid只能運行在Python 2.x或2.4以后的版本上。在使用后端數(shù)據(jù)庫時無需聲明,在開發(fā)時也不會強(qiáng)制使用一些特定的模板系統(tǒng)。

CherryPy


CherryPy是一個基于Python的Web使用程序開發(fā)框架,它極大地簡化了運用 Python 的web開發(fā)人員的工作。它為Python開發(fā)人員提供了友好的HTTP協(xié)議接口。大家知道,HTTP可是萬維網(wǎng)的支柱協(xié)議,而CherryPy將HTTP協(xié)議簡化成Python API來供Python 開發(fā)人員使用,這極大地簡化了Web開發(fā)人員對HTTP協(xié)議的操作。

CherryPy自身內(nèi)置了一個HTTP服務(wù)器,或者稱為Web服務(wù)器。這樣,對于CherryPy的用戶來說,不用另外搭設(shè)Web服務(wù)器就能直接運行 CherryPy應(yīng)用程序了。實際上,Web服務(wù)器是到達(dá)CherryPy應(yīng)用程序的關(guān)口,是所有的HTTP請求和響應(yīng)的必經(jīng)之地。

因此,可以這樣理解 CherryPy內(nèi)建的Web服務(wù)器:它是位于處理客戶端與服務(wù)器端之間的一層軟件,用于把底層TCP套按字傳輸?shù)男畔⑥D(zhuǎn)換成Http請求,并傳遞給相應(yīng) 的處理程序;同時,還把上層軟件傳來的信息打包成Http響應(yīng),并向下傳遞給底層的TCP套按字。

Flask


Flask是一個輕量級的Web應(yīng)用框架, 使用Python編寫?;?WerkzeugWSGI工具箱和 Jinja2模板引擎。使用 BSD 授權(quán)。

Flask也被稱為 “microframework” ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認(rèn)使用的數(shù)據(jù)庫、窗體驗證工具。然而,F(xiàn)lask保留了擴(kuò)增的彈性,可以用Flask-extension加入這些功 能:ORM、窗體驗證工具、文件上傳、各種開放式身份驗證技術(shù)。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }