技术选型Django还是Flask?这是个问题!
Posted 织云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术选型Django还是Flask?这是个问题!相关的知识,希望对你有一定的参考价值。
Django和Flask,是Python语言在WEB开发领域中占据了半壁江山的两个框架。在我们实际开发过程中,如何从这两者之间二选一呢?
01
半壁江山的两个WEB框架
在2019年Python官方年度报告中,Django和Flask两个框架的使用率都是远远高于其它WEB框架的:
在Github上这两者的stars数量也几乎是平分秋色。真是堪称Python在WEB开发领域的两大扛把子。
于是,甜蜜的烦恼开始了。两者框架之间,到底该选哪一个呢?
02
不同的设计理念
虽然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餐厅,一个是Flask餐厅。
Django餐厅提供的是法式大餐,有一套固定的套餐体系,从开胃菜、主菜到饭后点心,一应俱全。如果你要吃,就得按Django餐厅的规矩来。而且Django餐厅服务到位,你就乖乖坐着,各样的菜直接端你面前,动筷子张嘴就行了。
Flask餐厅则提供的是自助火锅的服务,给你配上一个基本的锅底,想吃什么菜、配什么酱料的,得自己去拿,自己去配。而且各种菜式品种丰富,一应俱全,想吃啥,自己取来煮就行。而且不像Django餐厅条条框框那么多,你可以发挥自己的想象力,进行各种食材的搭配,如果你愿意,来个荔枝蘸酱油也是可以的。
04
牛刀小试:Hello World
类比完了,我们再来结合实际的框架细节来分析下,首先我们完成一个最简单的在页面上显示Hello World。
使用flask
安装flask, pip install flask
创建app.py文件,并在其中写入如下代码:
-
from flask import Flask
app = Flask(__name__)
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 path
from myapp.views import index
urlpatterns = [
path('', index, name='index')
]
然后运行服务即可
对比上述两个过程,我们可以发现,flask实现一个WEB应用会非常的直观与简单。
而Django的话涉及到的步骤会比较多,必须要按照框架自身的要求一步步的来进行。
但是Django这样做也是有好处的,因为工程项目结构很清晰,适合开发大中型项目。
05
如果要使用ORM
我们再看一个更加复杂的例子,通过这个例子,我们可以更加清晰的体会出,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 SQLAlchemy
basedir = 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 '<User %r>' % 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 Migrate
migrate = Migrate(app, db)
8. 然后控制台执行命令:
flask db init
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
结论
了解了这么多,最后得出我们的结论:
1. 从项目规模考虑
如果你只是想开发一些简单的展示页面,不涉及到复杂的数据结构,交互逻辑,可以优先考虑使用flask。
反之如果你想快速开发一个大的应用系统(比如新闻类网站、商城、ERP等),那么建议你选择Django,常用的WEB功能它都有,很多想不到的功能它也有。
2. 从项目使用的数据库类型考虑
3. 从项目时间考虑
如果你有大把的时间,抱着学习的目的,想把Python web开发WSGI协议原理以及实现过程搞清楚,或者自己喜欢DIY,自己定制组件、是个编码狂魔,那么flask会毫无疑问的满足你的需求。
但是如果你需要在短时间内,进行高质量的WEB项目的交付,那么人生苦短,还是用Django吧。
END
以上是关于技术选型Django还是Flask?这是个问题!的主要内容,如果未能解决你的问题,请参考以下文章