Flask入門和Django的區(qū)別

Flask與Django的區(qū)別

Django功能大而全,F(xiàn)lask只包含基本的配置 Django的一站式解決的思路,能讓開發(fā)者不用在開發(fā)之前就在選擇應(yīng)用的基礎(chǔ)設(shè)施上花費大量時間。Django有模板,表單,路由,認證,基本的數(shù)據(jù)庫管理等等內(nèi)建功能。與之相反,F(xiàn)lask只是一個內(nèi)核,默認依賴于兩個外部庫: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以擴展的形式進行嵌入使用。

Flask 比 Django 更靈活 用Flask來構(gòu)建應(yīng)用之前,選擇組件的時候會給開發(fā)者帶來更多的靈活性 ,可能有的應(yīng)用場景不適合使用一個標準的ORM(Object-Relational Mapping 對象關(guān)聯(lián)映射),或者需要與不同的工作流和模板系統(tǒng)交互。

Flask 在 Django 之后發(fā)布,現(xiàn)階段有大量的插件和擴展?jié)M足不同需要 Django發(fā)布于2005年,F(xiàn)lask創(chuàng)始于2010年年中。

入門引導(dǎo)

Flask的Hello World應(yīng)用的代碼是最簡單的,只用在一個Python文件里碼7行代碼就夠了。

from flask import Flask

app = Flask(__name__)

@app.route("/")

def hello():

????return "Hello World!"

if __name__ == "__main__":

????app.run()

上面代碼就已經(jīng)是一個簡單的 web 應(yīng)用,從上面的 Hello World 應(yīng)用的特點來看,一個沒什么Python web開發(fā)經(jīng)驗的人就可以很快的上手開始擼代碼。

項目區(qū)別

Django 創(chuàng)建項目和創(chuàng)建應(yīng)用

django-admin startproject hello_django

django-admin startapp howdy

目錄結(jié)構(gòu):

默認情況下,Django項目和應(yīng)用創(chuàng)建好了之后,只包含空的模型和模板文件,而Flask創(chuàng)建項目之后,目錄里面沒有任何文件,需要我們手動創(chuàng)建,是沒有像Django一樣組件分離,而對于需要把組件分離開的項目,F(xiàn)lask有blueprints。例如,你可以這樣構(gòu)建你的應(yīng)用,將與用戶有關(guān)的功能放在user.py里,把與銷售相關(guān)的功能放在ecommerce.py里。

Django把一個項目分成各自獨立的應(yīng)用,而Flask認為一個項目應(yīng)該是一個包含一些視圖和模型的單個應(yīng)用。當(dāng)然我們也可以在Flask里復(fù)制出像Django那樣的項目結(jié)構(gòu)。

模板對比

Django的模版大家都很熟悉,我們舉一個簡單的例子

Flask默認使用一個受Django啟發(fā)而發(fā)展起來的名為Jinja2的模板,其實,所有上面的Django模板的例子在Jinja2里也是好使的。

模版簡單對比

<!--Django-->

<div class="categories">Categories:{{ post.categories|join:"," }}</div>

<!--Jinja2-->

<div class="categories">Categories:{{ ?post.categories|join(", ") ?}}</div>

在Jinja的模板語言里,可以把任何數(shù)量的參數(shù)傳給過濾器,因為Jinja像調(diào)用一個Python函數(shù)的方式來看待它,用圓括號來封裝參數(shù)。Django使用冒號來分隔過濾器名和參數(shù),這樣就只能傳遞一個參數(shù)了。

Flask的Jinja模版 for-else-endfor

{% for item in inventory %}

????<div class="display-item">{{ item.render() }}</div>

{% else %}

????<div class="display_warn">

????<h3>No items found</h3>

????<p>Try another search, maybe?</p>

????</div>

{% endfor %}

Django模版 for-empty-endfor

{% for item in inventory %}

????<div class="display-item">{{ item.render }}</div>

{% empty %}

????<div class="display-warn">

????<h3>No items found</h3>

????<p>Try another search, maybe?</p>

????</div>

{% endfor %}

除了上述的語法區(qū)別,F(xiàn)lask還提供了很多特有的上下文變量(url_for,get_flashed_messages()等)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容