django框架學習文檔_Python四大主流網絡編程框架,你知道么?

44a2094546a21dd30bf03ba13c06b531.gif

高并發處理框架—— Tornado

33682c3ad85098b46b7eddcb72870196.png

Tornado 是使用 Python 編寫的一個強大的可擴展的 Web 服務器。它在處理高網絡流量時表現得足夠強健,卻在創建和編寫時有著足夠的輕量級,并能夠被用在大量的應用和工具中。Tornado 作為 FriendFeed 網站的基礎框架,于2009年9月10日發布,目前已經獲得了很多社區的支持,并且在一系列不同的場合中得到應用。除 FriendFeed 和 Facebook 外,還有很多公司在生產上轉向Tornado,包括 Quora、Turntable.fm、Bit.ly、Hipmunk 及 MyYearbook 等。

相對于其他 Python 網絡框架,Tornado 有如下特點。

完備的 Web 框架:與 Django、Flask 等一樣,Tornado 也提供了 URL 路由映射、Request 上下文、基于模板的頁面渲染技術等開發 Web 應用的必備工具。

是一個高效的網絡庫,性能與 Twisted、Gevent 等底層 Python 框架相媲美:提供了異步 I/O 支持、超時事件處理。這使得 Tornado 除了可以作為 Web 應用服務器框架,還可以用來做爬蟲應用、物聯網關、游戲服務器等后臺應用。

提供高效 HTTPClient:除了服務器端框架,Tornado 還提供了基于異步框架的HTTP 客戶端。

提供高效的內部 HTTP 服務器:雖然其他 Python 網絡框架(Django、Flask)也提供了內部 HTTP 服務器,但它們的 HTTP 服務器由于性能原因只能用于測試環境。而 Tornado 的HTTP服務器與 Tornado 異步調用緊密結合,可以直接用于生產環境。

完備的 WebSocket 支持:WebSocket 是 HTML5 的一種新標準,實現了瀏覽器與服務器之間的雙向實時通信。

因為 Tornado 的上述特點,Tornado 常被用作大型站點的接口服務框架,而不像 Django 那樣著眼于建立完整的大型網站,所以本章著重講解 Tornado 的異步及協程編程、身份認證框架、獨特的非 WSGI 部署方式。

支持快速建站的框架——Flask

c399a8a4829c0942847e3ef531419e77.png

Flask 是 Python Web 框架族里比較年輕的一個,于 2010 年出現,這使得它吸收了其他框架的優點,并且把自己的主要領域定義在了微小項目上。同時,它是可擴展的,Flask 讓開發者自己選擇用什么數據庫插件存儲他們的數據。很多功能簡單但性能卓越的網站就是基于 Flask 框架而搭建的,比如 http://httpbin.org/ 就是一個功能簡單但性能強大的 HTTP 測試項目。Flask 是一個面向簡單需求和小型應用的微框架。

相對于其他 Python 語言的 Web 框架而言,Flask 的特點可以歸結如下。

內置開發服務器和調試器

網絡程序調試是在將編制好的網站投入實際運行前,用手工或編譯程序等方法進行測試,修正語法錯誤和邏輯錯誤的過程。有經驗的開發者都知道,這是保證網站系統能夠正式應用的必要步驟。

Flask 自帶的開發服務器使開發者在調試程序時無須再安裝其他任何網絡服務器,比如 Tomcat、JBoss、Apache 等。Flask 默認處于調試狀態,使得運行中的任何錯誤會同時向兩個目標發送信息:一個是 Python Console,即啟動Python 程序的控制臺;另一個是 HTTP 客戶端,即 Flask 開發服務器將調試信息傳遞給了客戶端。

與 Python 單元測試功能無縫銜接

單元測試是對最小軟件開發單元的測試,其重點測試程序的內部結構,主要采用白盒測試方法,由開發人員負責。單元測試的主要目標是保證函數在給定的輸入狀態下,能夠得到預想的輸出,在不符合要求時能夠提醒開發人員進行檢查。

Flask 提供了一個與 Python 自帶的單元測試框架 unitest 無縫銜接的測試接口,即 Flask 對象的 test_client() 函數。通過 test_client() 函數,測試程序可以模擬進行 HTTP 訪問的客戶端來調用 Flask 路由處理函數,并且獲取函數的輸出來進行自定義的驗證。

使用 Jinja2 模板

將 HTML 頁面與后臺應用程序聯系起來一直是網站程序框架的一個重要目標。Flask 通過使用 Jinja2 模板技術解決了這個問題。Jinja2 是一個非常靈活的 HTML 模板技術,它是從 Django 模板發展而來的,但是比 Django 模板使用起來更加自由且更加高效。Jinja2 模板使用配制的語義系統,提供靈活的模板繼承技術,自動抗擊 XSS 跨站攻擊并且易于調試。

完全兼容 WSGI 1.0 標準

WSGI(Web Server Gateway Interface)具有很強的伸縮性且能運行于多線程或多進程環境下,因為 Python 線程全局鎖的存在,使得 WSGI 的這個特性至關重要。WSGI 已經是 Python 界的一個主要標準,各種大型網路服務器對其都有良好的支持。WSGI 位于Web應用程序與 Web 服務器之間,與 WSGI 完全兼容使得 Flask 能夠配置到各種大型網絡服務器中。

基于 Unicode 編碼

Flask 是完全基于 Unicode 的。這對制作非純 ASCII 字符集的網站來說非常方便。HTTP 本身是基于字節的,也就是說任何編碼格式都可以在 HTTP 中傳輸。但是,HTTP 要求在 HTTP Head 中顯式地聲明在本次傳輸中所應用的編碼格式。在默認情況下,Flask 會自動添加一個 UTF-8 編碼格式的 HTTP Head,使程序員無須擔心編碼的問題。

底層自定義協議網絡框架——Twisted

c318cd33ef4a39924a585e9efc90e1ec.png

以上講到的 2個 Python Web 框架都是圍繞著應用層 HTTP 展開的,而 Twisted是一個例外。Twisted 是一個用 Python 語言編寫的事件驅動的網絡框架,對于追求服務器程序性能的應用,Twisted 框架是一個很好的選擇。

Twisted 是一個有著 10 多年歷史的開源事件驅動框架。Twisted 支持很多種協議,包括傳輸層的 UDP、TCP、TLS,以及應用層的 HTTP、FTP 等。對于所有這些協議,Twisted 提供了客戶端和服務器方面的開發工具。

Twisted 框架的歷史悠久,其主要發行版本都以 Python 2 為基礎,最新的版本為基于 Python 2.7 的 Twisted-15.4.0。Twisted 社區正在開發基于 Python 3 的版本,但目前為止尚沒有基于 Python 3 的 Twisted 穩定發行版。

Twisted 是一個高性能的編程框架。在不同的操作系統平臺上,Twisted 利用不同的底層技術實現了高效能通信。在 Windows 中,Twisted 的實現基于 I/O 完成端口(IOCP,Input/Output Completion Port)技術,它保證了底層高效地將I/O事件通知給框架及應用程序;在 Linux 中,Twisted 的實現基于 epoll 技術,epoll是Linux下多路復用 I/O 接口 select/poll 的增強版本,它能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統 CPU 利用率。

在開發方法上,Twisted引導程序員使用異步編程模型。Twisted 提供了豐富的Defer、Threading等特性來支持異步編程。

企業級開發框架——Django

0fd2ab3083f15c37d57069e67c3c89c0.png

Django 于 2003 年誕生于美國堪薩斯(Kansas)州,最初用來制作在線新聞Web站點,于 2005 年加入了 BSD 許可證家族,成為開源網絡框架。Django 根據比利時的爵士音樂家 Django Reinhardt 命名,作者這樣命名 Django 意味著Django 能優雅地演奏(開發)功能豐富的樂曲(Web應用)。

它是當前Python世界里最負盛名且最成熟的網絡框架。最初用來制作在線新聞的 Web 站點,目前已發展為應用最廣泛的 Python 網絡框架。Django 的各模塊之間結合得比較緊密,所以在功能強大的同時又是一個相對封閉的系統,但是其健全的在線文檔及開發社區,使開發者在遇到問題時能找到解決方法。

Django 框架的特點

相對于 Python 的其他 Web 框架,Django 的功能是最完整的,Django 定義了服務發布、路由映射、模板編程、數據處理的一整套功能。這也意味著 Django模塊之間緊密耦合,開發者需要學習 Django 自己定義的這一整套技術。Django的主要特點如下。

完善的文檔:經過 10 多年的發展和完善,Django 有廣泛的應用和完善的在線文檔,開發者遇到問題時可以搜索在線文檔尋求解決方案。

集成數據訪問組件:Django 的 Model 層自帶數據庫 ORM 組件,使開發者無須學習其他數據庫訪問技術(dbi、SQLAlchemy 等)。

強大的 URL 映射技術:Django 使用正則表達式管理 URL 映射,因此給開發者帶來了極高的靈活性。

后臺管理系統自動生成:開發者只需通過簡單的幾行配置和代碼就可以實現完整的后臺數據管理 Web 控制臺。

錯誤信息非常完整:在開發調試過程中如果出現運行異常,則 Django 可以提供非常完整的錯誤信息幫助開發者定位問題,比如缺少xxx組件的配置引用等,這樣可以使開發者馬上改正錯誤。

Django 的組成結構

Django 是遵循MVC架構的Web開發框架,其主要由以下幾部分組成。

管理工具(Management):一套內置的創建站點、遷移數據、維護靜態文件的命令工具。

模型(Model):提供數據訪問接口和模塊,包括數據字段、元數據、數據關系等的定義及操作。

視圖(View):Django 的視圖層封裝了 HTTP Request 和 Response 的一系列操作和數據流,其主要功能包括URL映射機制、綁定模板等。

模板(Template):是一套 Django 自己的頁面渲染模板語言,用若干內置的tags和filters定義頁面的生成方式。

表單(Form):通過內置的數據類型和控件生成 HTML 表單。

管理站(Admin):通過聲明需要管理的 Model,快速生成后臺數據管理網站。

*聲明:本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。

2f664972bd1a386017567b39924213e1.gif

覺得不錯,點個“在看”然后轉發出去dc17c0d996eec3a068b7c155ff27e490.gif

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446159.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VS Studio報錯無法解析的外部符號 _imp_XXXXXXXXX

出現字符_imp,說明不是真正的靜態庫,而是某個動態庫的導入庫,導入函數和自己不同名,所以加了字符_imp。比如說_imp_GetUserNameA就是GetUserNameA函數。會報這種錯誤的原因: 1、說明注冊表函數沒有相關的lib庫&#xf…

hashmap put過程_阿里十年技術大咖,教你如何分析1.7中HashMap死循環

在多線程環境下,使用HashMap進行put操作會引起死循環,導致CPU利用率接近100%,HashMap在并發執行put操作時會引起死循環,是因為多線程會導致HashMap的Entry鏈表形成環形數據結構,一旦形成環形數據結構,Entry…

Socket代碼實現服務端 和 客戶端之間通信

服務端代碼 // Socket_connection.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。 // #ifndef UNICODE #define UNICODE #endif#define WIN32_LEAN_AND_MEAN#include <winsock2.h> #include <Ws2tcpip.h> #include <stdio.h> #incl…

python綜合管理系統_Python-20 (信息系統-框架/循環/增刪/綜合應用)

# 1. 目標 這里我們通過簡單案例的綜合應用&#xff0c;了解框架的概念&#xff0c;感受循環、字符字典數據處理等基礎點的應用場景 # 2. 框架 搭建一個人員信息管理系統的簡單框架&#xff0c;初步感受框架的概念。 1> 主程序 -- cards_mian.py程序的主功能代碼&…

本地搭建server和客戶端使用端口進行數據通信,使用Wireshark抓取127.0.0.1環回地址并分析通信數據

本地搭建服務端和客戶端 參考網址 Socket代碼實現服務端 和 客戶端之間通信_CHYabc123456hh的博客-CSDN博客server指定通信的端口是 5099client 使用的端口是動態變化的&#xff0c;因此在wireshark里面需要設定的抓取端口是 5099 使用wireshark開啟抓包 參考鏈接 [tcp] Wir…

double operator[](int i)_java中double類型精度丟失問題及解決方法

原文鏈接&#xff1a;https://blog.csdn.net/yacolspace/article/details/78287394double類型數據加減操作精度丟失問題今天在項目中用到double類型數據加減運算時&#xff0c;遇到了一個奇怪的問題&#xff0c;比如120.2300.03&#xff0c;理論上結果應該是321.23&#xff0c;…

驗證客戶端和服務端可以傳輸經SM4加密的密文數據,從而驗證發送數據已使用服務器密碼機進行SM4加密,而不是隨便的字符串亂碼

前提操作 搭建客戶端和服務端 Socket代碼實現服務端 和 客戶端之間通信_CHYabc123456hh的博客-CSDN博客使用wireshark進行數據的監聽和測試https://blog.csdn.net/CHYabc123456hh/article/details/121929288 結論驗證 使用在線SM4加密&#xff0c;輸入明文 和 選擇模式,生成…

Socket編程 涵蓋代碼和函數參數介紹

Socket是針對端系統&#xff0c;也就是用戶主機上開發程序&#xff0c;不涉及網絡設備(交換機、路由器)獨立于網卡驅動層之上&#xff0c;不涉及硬件&#xff0c;即基于Packet Driver編程端&#xff1a;是指通信雙方兩臺電腦 應用編程接口API 也就是兩端 應用層內部的應用進程之…

springcloud阿里巴巴五大組件_如何無縫遷移 SpringCloud/Dubbo 應用到 Serverless 架構

簡介&#xff1a; 本文分為三部分來介紹&#xff0c;分別介紹微服務應用遷移到 SAE 的優勢&#xff0c;如何遷移 SpringCloud/Dubbo 應用到 SAE 上&#xff0c;以及針對 SpringCloud 應用遷移的實踐演示。背景通過前面幾節課程的學習&#xff0c;相信大家對于 SAE 平臺已經有了…

pythonnone用法_python中None返回值如何使用?

None是python中的特殊存在。作為函數&#xff0c;在用到返回值的經常使用。今天小編就來講講None作為函數返回值時&#xff0c;會出現的三種情況。 一、作為操作類函數的默認返回值 當某個操作類函數不需要任何返回值時&#xff0c;通常就會返回 None。同時&#xff0c;None 也…

C++ Byte轉十六進制字符串輸出

代碼 例子一 typedef std::vector<unsigned char> bytes; std::string BytesToStr(const bytes& in) {bytes::const_iterator from in.cbegin();bytes::const_iterator to in.cend();std::ostringstream oss;for (; from ! to; from)oss << std::hex <&…

frame中src怎么設置成一個變量_Go 語言設計哲學之七:變量聲明須一致

Go 語言&#xff0c;使用變量之前需要先進行變量的聲明。var s string “Golang"n : 666Go 語言有兩類變量包級別(package varible)&#xff1a;在 package 級別可見的變量。如果是導出變量&#xff0c;該變量也可以被視為全局變量&#xff1b;局部變量(local varible)&a…

數據填充規則之PKCS7

程序輸入的數據全部使用Hex 十六進制的格式 IV 00000000000000000000000000000000Source(加密數據) char input_date[] {a,a,a,a,.......} Ascll編碼 需要轉16進制input_data 303030303030303030303030303030CC CC表示此位無數據注意事項&#xff1a;考慮到程序采用 PKCS…

getdevicecaps在哪個頭文件里_一招定勝負,while (true) 和 for (;;) 到底哪個更快

在JDK8u的jdk項目下做個很粗略的搜索&#xff1a;mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "for (s?;s?;" . | wc -l 369mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "while (true" . | wc -l 323并沒有差多少。其次&#…

SM4 ECB加密模式 數據對比試驗論證

程序如下 開啟服務器密碼機&#xff0c;調用SM4加密函數&#xff0c;需要注意的是程序輸入的數據全部使用Hex 十六進制的格式 Key IV Data IV 00000000000000000000000000000000Source(加密數據) char input_date[] {a,a,a,a,.......} Ascll編碼 需要轉16進制input_data …

二分法查找c語言程序_C語言的那些經典程序 第十四期

戳“在看”一起來充電吧!C語言的那些經典程序 第十四期本期小C給大家帶來三個用C語言解決實際問題的典例。如果全都理解&#xff0c;相信肯定能給大家帶來收獲&#xff01;接下來讓我們看看是哪些程序吧&#xff01;1字符查找源程序&#xff1a;運行結果&#xff1a;程序分析:該…

C++ puts函數 打印字符串很方便

參考鏈接 c puts函數_在C / C 中使用puts&#xff08;&#xff09;函數_從零開始的教程世界-CSDN博客

centos網絡隔一段時間就斷_計算機網絡總結

POST跟GET的區別作用GET用于獲取資源&#xff0c;而POST用于傳輸實體參數GET的參數以字符串的格式出現在URL中&#xff0c;而POST的參數存儲在請求實體中。因為URL只支持ASCII碼&#xff0c;故GET的參數如果存在中文等字符就需要先進行編碼&#xff0c;POST參考支持標準字符集。…

C++/C++11中std::runtime_error的使用

參考鏈接 C/C11中std::runtime_error的使用_網絡資源是無限的-CSDN博客_runtimeerror