django restframework 下载文件_【技术选型】Django还是Flask?这是个问题!
Django和Flask,是Python語言在WEB開發(fā)領(lǐng)域中占據(jù)了半壁江山的兩個框架。在我們實際開發(fā)過程中,如何從這兩者之間二選一呢?
01
半壁江山的兩個WEB框架
在2019年P(guān)ython官方年度報告中,Django和Flask兩個框架的使用率都是遠遠高于其它WEB框架的:
在Github上這兩者的stars數(shù)量也幾乎是平分秋色。真是堪稱Python在WEB開發(fā)領(lǐng)域的兩大扛把子。
于是,甜蜜的煩惱開始了。兩者框架之間,到底該選哪一個呢?
02
不同的設(shè)計理念
雖然Django和Flask都是WEB開發(fā)框架,但是它們的設(shè)計理念是截然不同的。我們從兩者的官方簡介中就可以看出端倪。
Django的官方簡介是:
The Web framework for perfectionists with deadlines.
這句話,我把它粗暴的意譯了一下,發(fā)現(xiàn)簡直就是霸氣側(cè)漏啊:
”如果你(跟作者本人一樣),是一個有拖延癥(項目總是拖到Deadline之前才交付)的完美主義者(又拖延癥又完美主義,這還有救嗎?),那么你就該用Django!”
Flask的官方簡介,則低調(diào)內(nèi)涵的多:
The Python micro framework for building web applications.
直譯就是:“用于創(chuàng)建網(wǎng)頁應(yīng)用的Python微框架“。
重點在一個”微”字。
綜上所述,Django框架,走的是大而全的路線。而Flask框架,走得是小而美的路線。
03
想吃法式大餐還是自助火鍋?
為了幫助技術(shù)小白和新人理解,我再以一個吃貨們喜聞樂見的例子類比一下。
假如你去吃飯,有兩個餐廳可供你選擇,一個是Django餐廳,一個是Flask餐廳。
Django餐廳提供的是法式大餐,有一套固定的套餐體系,從開胃菜、主菜到飯后點心,一應(yīng)俱全。如果你要吃,就得按Django餐廳的規(guī)矩來。而且Django餐廳服務(wù)到位,你就乖乖坐著,各樣的菜直接端你面前,動筷子張嘴就行了。
Flask餐廳則提供的是自助火鍋的服務(wù),給你配上一個基本的鍋底,想吃什么菜、配什么醬料的,得自己去拿,自己去配。而且各種菜式品種豐富,一應(yīng)俱全,想吃啥,自己取來煮就行。而且不像Django餐廳條條框框那么多,你可以發(fā)揮自己的想象力,進行各種食材的搭配,如果你愿意,來個荔枝蘸醬油也是可以的。
04
牛刀小試:Hello World
類比完了,我們再來結(jié)合實際的框架細節(jié)來分析下,首先我們完成一個最簡單的在頁面上顯示Hello World。
使用flask
? 安裝flask, pip install flask
??創(chuàng)建app.py文件,并在其中寫入如下代碼:
然后運行服務(wù)即可。
這個過程非常的簡單。
如果是使用django的話,就要復(fù)雜一些:
1. 安裝django? pip install django
2. 創(chuàng)建項目,django-admin startproject myproject
3. 創(chuàng)建項目子應(yīng)用,python manage.py startapp myapp
4. 在myapp應(yīng)用所在目錄中的views.py文件中,添加如下代碼
from django.http import HttpResponse def index(request): return HttpResponse("Hello World!")5.??在mybook文件夾下的urls.py文件中添加路由規(guī)則
from django.urls import pathfrom?myapp.views?import?index urlpatterns = [ path('', index, name='index') ]然后運行服務(wù)即可
對比上述兩個過程,我們可以發(fā)現(xiàn),flask實現(xiàn)一個WEB應(yīng)用會非常的直觀與簡單。
而Django的話涉及到的步驟會比較多,必須要按照框架自身的要求一步步的來進行。
但是Django這樣做也是有好處的,因為工程項目結(jié)構(gòu)很清晰,適合開發(fā)大中型項目。
05
如果要使用ORM
我們再看一個更加復(fù)雜的例子,通過這個例子,我們可以更加清晰的體會出,Django與flask的區(qū)別:如果想在項目中使用ORM,flask和django該如何做呢。
首先來看下flask,flask中是沒有集成ORM的,如果需要使用這樣的功能,需要手動下載拓展包,并寫一些膠水代碼來實現(xiàn)。步驟如下:
1.下載flask的拓展orm包flask-sqlalchemy:pip install flask-sqlalchemy
2. 配置數(shù)據(jù)庫(以sqlite數(shù)據(jù)庫為例),在之前創(chuàng)建的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'] = False3.????? 獲取SQLAlchemy實例
db = SQLAlchemy(app)4.????? 創(chuàng)建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.username5.????? 讓 Flask-SQLAlchemy 根據(jù)模型類創(chuàng)建數(shù)據(jù)庫與表,在控制臺輸入如下命令:
flask shell>>> from app import db>>> db.create_all()6.????? 如果想對數(shù)據(jù)庫執(zhí)行遷移操作,需要再安裝一個Flask-Migrate 擴展:pip install flask-migrate?
7.????? 初始化 Flask-Migrate,在app.py文件中加入如下代碼:
from flask_migrate import Migratemigrate = Migrate(app, db)8.????? 然后控制臺執(zhí)行命令:
flask db init這個命令會創(chuàng)建 migrations 目錄,所有遷移腳本都存放在這里。9.????? 接下來,就可以控制臺使用flask db migrate命令,根據(jù)模型的變化,生成遷移腳本,執(zhí)行 flask db upgrade 命令,把遷移應(yīng)用到數(shù)據(jù)庫中。
相比flask這樣繁多的步驟,在Django中使用ORM則要輕松太多了!Django中直接內(nèi)置了Django ORM模塊,不需要額外下載其它的包,直接按照下述步驟就可以:
1. 將myapp應(yīng)用注冊到項目myproject中:
在myproject文件夾下settings.py文件中,找到INSTALLED_APPS這個配置項,它是一個列表,在最后加一項:
myapp.?apps.MyappConfig2.??在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執(zhí)行遷移腳本
搞定!
對比這樣兩個步驟發(fā)現(xiàn),Django中將一些WEB開發(fā)中常用的模塊如ORM、用戶認證、后臺管理等等模塊都進行了內(nèi)置,使用起來及其的方便。而flask要使用這些拓展模塊,則需要自己安裝、配置、寫更多的膠水代碼。
06
結(jié)論
了解了這么多,最后得出我們的結(jié)論:
1. 從項目規(guī)模考慮
????如果你只是想開發(fā)一些簡單的展示頁面,不涉及到復(fù)雜的數(shù)據(jù)結(jié)構(gòu),交互邏輯,可以優(yōu)先考慮使用flask。
????反之如果你想快速開發(fā)一個大的應(yīng)用系統(tǒng)(比如新聞類網(wǎng)站、商城、ERP等),那么建議你選擇Django,常用的WEB功能它都有,很多想不到的功能它也有。
2.?從項目使用的數(shù)據(jù)庫類型考慮
????如果你的項目使用的是關(guān)系型數(shù)據(jù)庫,并且要使用ORM,建議優(yōu)先考慮Django,因為Django中的ORM實在太太太好用了。???如果你決定在項目中使用非關(guān)系型數(shù)據(jù)庫,如mongodb的話,Django ORM就無英雄用武之地了,可以考慮使用Flask。3.??從項目時間考慮
?????如果你有大把的時間,抱著學(xué)習(xí)的目的,想把Python web開發(fā)WSGI協(xié)議原理以及實現(xiàn)過程搞清楚,或者自己喜歡DIY,自己定制組件、是個編碼狂魔,那么flask會毫無疑問的滿足你的需求。? ? ? ?
????但是如果你需要在短時間內(nèi),進行高質(zhì)量的WEB項目的交付,那么人生苦短,還是用Django吧。
END
總結(jié)
以上是生活随笔為你收集整理的django restframework 下载文件_【技术选型】Django还是Flask?这是个问题!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python表格对齐_Python对Ex
- 下一篇: 24小时临时邮箱_实用网站 | 临时邮箱