天天看點

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

Django和Flask,是Python語言在WEB開發領域中占據了半壁江山的兩個架構。在我們實際開發過程中,如何從這兩者之間二選一呢?

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

01

半壁江山的兩個WEB架構

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

在2019年Python官方年度報告中,Django和Flask兩個架構的使用率都是遠遠高于其它WEB架構的:

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

在Github上這兩者的stars數量也幾乎是平分秋色。真是堪稱Python在WEB開發領域的兩大扛把子。

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!
django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

于是,甜蜜的煩惱開始了。兩者架構之間,到底該選哪一個呢?

02

不同的設計理念

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

雖然Django和Flask都是WEB開發架構,但是它們的設計理念是截然不同的。我們從兩者的官方簡介中就可以看出端倪。

Django的官方簡介是:

The Web framework for perfectionists with deadlines.

這句話,我把它粗暴的意譯了一下,發現簡直就是霸氣側漏啊:

”如果你(跟作者本人一樣),是一個有拖延症(項目總是拖到Deadline之前才傳遞)的完美主義者(又拖延症又完美主義,這還有救嗎?),那麼你就該用Django!”

Flask的官方簡介,則低調内涵的多:

The Python micro framework for building web applications.

直譯就是:“用于建立網頁應用的Python微架構“。

重點在一個”微”字。

綜上所述,Django架構,走的是大而全的路線。而Flask架構,走得是小而美的路線。

03

想吃法式大餐還是自助火鍋?

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

為了幫助技術小白和新人了解,我再以一個吃貨們喜聞樂見的例子類比一下。

假如你去吃飯,有兩個餐廳可供你選擇,一個是Django餐廳,一個是Flask餐廳。

Django餐廳提供的是法式大餐,有一套固定的套餐體系,從開胃菜、主菜到飯後點心,一應俱全。如果你要吃,就得按Django餐廳的規矩來。而且Django餐廳服務到位,你就乖乖坐着,各樣的菜直接端你面前,動筷子張嘴就行了。

Flask餐廳則提供的是自助火鍋的服務,給你配上一個基本的鍋底,想吃什麼菜、配什麼醬料的,得自己去拿,自己去配。而且各種菜式品種豐富,一應俱全,想吃啥,自己取來煮就行。而且不像Django餐廳條條框框那麼多,你可以發揮自己的想象力,進行各種食材的搭配,如果你願意,來個荔枝蘸醬油也是可以的。

04

牛刀小試:Hello World

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

類比完了,我們再來結合實際的架構細節來分析下,首先我們完成一個最簡單的在頁面上顯示Hello World。

使用flask

  1.   安裝flask, pip install flask
  2.   建立app.py檔案,并在其中寫入如下代碼:
  3. from flask import Flask app = Flask(__name__)  @app.route('/') def hello_world():     return 'Hello World!'  if __name__ == '__main__':     app.run()
               

然後運作服務即可。

這個過程非常的簡單。

如果是使用django的話,就要複雜一些:

1. 安裝django  pip install django

2. 建立項目,django-admin startproject myproject

3. 建立項目子應用,python manage.py startapp myapp

4. 在myapp應用所在目錄中的views.py檔案中,添加如下代碼

from django.http import HttpResponse  def index(request):     return HttpResponse("Hello World!")
           

5.  在mybook檔案夾下的urls.py檔案中添加路由規則

from django.urls import pathfrom myapp.views import index  urlpatterns = [     path('', index, name='index') ]
           

然後運作服務即可

對比上述兩個過程,我們可以發現,flask實作一個WEB應用會非常的直覺與簡單。

而Django的話涉及到的步驟會比較多,必須要按照架構自身的要求一步步的來進行。

但是Django這樣做也是有好處的,因為工程項目結構很清晰,适合開發大中型項目。

05

如果要使用ORM

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

我們再看一個更加複雜的例子,通過這個例子,我們可以更加清晰的體會出,Django與flask的差別:如果想在項目中使用ORM,flask和django該如何做呢。

首先來看下flask,flask中是沒有內建ORM的,如果需要使用這樣的功能,需要手動下載下傳拓展包,并寫一些膠水代碼來實作。步驟如下:

1.下載下傳flask的拓展orm包flask-sqlalchemy:pip install flask-sqlalchemy

2. 配置資料庫(以sqlite資料庫為例),在之前建立的app.py檔案中加入如下代碼:

from flask_sqlalchemy import SQLAlchemybasedir = os.path.abspath(os.path.dirname(__file__))app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///' + os.path.join(basedir, 'data.sqlite3') + '?check_same_thread=False'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
           

3.      擷取SQLAlchemy執行個體

db = SQLAlchemy(app)
           

4.      建立model模型類,在app.py檔案中加入如下代碼:

class User(db.Model):  __tablename__ = 'users'  id = db.Column(db.Integer, primary_key=True)  username = db.Column(db.String(64), unique=True, index=True)  def __repr__(self):         return '' % self.username  def __str__(self):        return self.username
           

5.      讓 Flask-SQLAlchemy 根據模型類建立資料庫與表,在控制台輸入如下指令:

flask shell>>> from app import db>>> db.create_all()
           

6.      如果想對資料庫執行遷移操作,需要再安裝一個Flask-Migrate 擴充:pip install flask-migrate 

7.      初始化 Flask-Migrate,在app.py檔案中加入如下代碼:

from flask_migrate import Migratemigrate = Migrate(app, db)
           

8.      然後控制台執行指令:

flask db init
           

這個指令會建立 migrations 目錄,所有遷移腳本都存放在這裡。

9.      接下來,就可以控制台使用flask db migrate指令,根據模型的變化,生成遷移腳本,執行 flask db upgrade 指令,把遷移應用到資料庫中。

相比flask這樣繁多的步驟,在Django中使用ORM則要輕松太多了!Django中直接内置了Django ORM子產品,不需要額外下載下傳其它的包,直接按照下述步驟就可以:

1. 将myapp應用注冊到項目myproject中:

在myproject檔案夾下settings.py檔案中,找到INSTALLED_APPS這個配置項,它是一個清單,在最後加一項:

myapp. apps.MyappConfig
           

2.  在myapp下的models檔案中寫model模型類即可,例如

from django.db import models  # Create your models here. class Book(models.Model):     title = models.CharField(max_length=30)     pub_date = models.DateField()      def __str__(self):         return self.title
           

 3. 在控制台輸入指令:

python manage.py makemigrations
           

生成遷移腳本

python manage.py migrate 
           

執行遷移腳本

搞定!

對比這樣兩個步驟發現,Django中将一些WEB開發中常用的子產品如ORM、使用者認證、背景管理等等子產品都進行了内置,使用起來及其的友善。而flask要使用這些拓展子產品,則需要自己安裝、配置、寫更多的膠水代碼。

06

結論

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

了解了這麼多,最後得出我們的結論:

1. 從項目規模考慮

    如果你隻是想開發一些簡單的展示頁面,不涉及到複雜的資料結構,互動邏輯,可以優先考慮使用flask。

    反之如果你想快速開發一個大的應用系統(比如新聞類網站、商城、ERP等),那麼建議你選擇Django,常用的WEB功能它都有,很多想不到的功能它也有。

2. 從項目使用的資料庫類型考慮

    如果你的項目使用的是關系型資料庫,并且要使用ORM,建議優先考慮Django,因為Django中的ORM實在太太太好用了。   如果你決定在項目中使用非關系型資料庫,如mongodb的話,Django ORM就無英雄用武之地了,可以考慮使用Flask。

3.  從項目時間考慮

     如果你有大把的時間,抱着學習的目的,想把Python web開發WSGI協定原理以及實作過程搞清楚,或者自己喜歡DIY,自己定制元件、是個編碼狂魔,那麼flask會毫無疑問的滿足你的需求。       

    但是如果你需要在短時間内,進行高品質的WEB項目的傳遞,那麼人生苦短,還是用Django吧。

django restframework 下載下傳檔案_【技術選型】Django還是Flask?這是個問題!

END