Django和Flask框架优缺点对比
Flask 在 Django 之后发布,现阶段有大量的插件和扩展满足不同需要 Django发布于2005年,Flask创始于2010年年中。
Django功能大而全,Flask只包含基本的配置, Django的一站式解决的思路,能让开发者不用在开发之前不用花费大量时间在选择应用的基础设施。
Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用。
Flask 比 Django 更灵活 用Flask来构建应用之前,选择组件的时候会给开发者带来更多的灵活性 ,可能有的应用场景不适合使用一个标准的ORM(Object-Relational Mapping 对象关联映射),或者需要与不同的工作流和模板系统交互。
一、整体设计方面
首先,两者都是非常优秀的框架。整体来讲,两者设计的哲学是区别最大的地方。
Django提供一站式的解决方案,从模板、ORM、Session、Authentication等等都分配好了,app, admin后台生成, 使用非常方便.
Flask只提供了一些核心功能,非常简洁优雅。它是一个微框架,其他的由扩展提供,但它的blueprint使它也能够很方便的进行水平扩展。
二、路由设计
Django的路由设计是采用集中处理的方法,利用正则匹配。Flask也能这么做,但更多的是使用装饰器的形式,这个有优点也有缺点,优点是读源码时看到函数就知道怎么用的,缺点是一旦源码比较长,你要查路由就不太方便了,但这也促使你去思考如何更合理的安排代码。
三、应用模块化设计
Django的模块化是集成在命令里的,也就是说一开始Django的目标就是为以后玩大了做准备的。每个都是一个独立的模块,为以后的复用提供了便利。
Flask通过Blueprint来提供模块化,自己对项目结构划分成不同的模块进行组织。
四、配置
Django的配置主要还是靠settings.py来做,当然为了Development和Production环境分离,还有一些方法来处理配置。
Flask的配置很灵活,有多种方法配置,不同环境的配置也非常方便。
五、文档
两者都提供了详尽的文档,Flask的文档风格很受我个人喜好,Django的文档也非常优秀,当时用学Django时,就是只看了Django的文档。
六、社区
Django社区很大,各种插件很齐全,大部分情况下你都能找到你想要的。
Flask起步晚,但社区也不小,之前有一次看在github上的star数,两个相差并不远,说明越来越多的人关注它,虽然插件没那么全,但常用的还都是有的,而且质量都比较高。
最后再次说一下,两个都是非常优秀的框架,很多时候选用这些框架是根据实际项目侧重不同来选的:-)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
查看Django和flask版本的方法
查看Django版本 检查是否安装成功,可以在dos下查看Django版本. 1.输入python 2.输入import django 3.输入django.get_version() 查看flask版本 检查是否安装成功,可以在dos下查看flask版本. 1.输入python 2.输入import flask 3.输入flask.__version__ 以上这篇查看Django和flask版本的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
Python flask框架post接口调用示例
本文实例讲述了Python flask框架post接口调用.分享给大家供大家参考,具体如下: from flask import Flask,render_template,request app = Flask(__name__) @app.route("/login",methods = ['POST','GET']) def login(): if request.method == "POST": username = request.form.get('u
-
Flask和Django框架中自定义模型类的表名、父类相关问题分析
本文实例分析了Flask和Django框架中自定义模型类的表名.父类相关问题.分享给大家供大家参考,具体如下: 一. Flask和Django中定义表名(执行迁移后生成)的方式和flask是不同的: 1. Django中表名的定义方式,以代码为例说明 class User(AbstractUser): # 继承自认证系统模型类 """用户模型类""" mobile = modles.CharField(max_length=11, mix_len
-
flask/django 动态查询表结构相同表名不同数据的Model实现方法
1.问题 为了控制数据的增长,经常需要分表,数据库中存在多张结构相同,表名相关的表,如: table_201706 table_201707 table_201708 怎么通过SQLAlchemy 或者django查询相关的数据表,而不用每次都创建Model呢 2.解决方法 分别在flask和django下实现,代码如下 2.1 flask+sqlalchemy # -*-coding:utf-8 class NewDynamicModel(object): """ 动态产生
-
Django框架 查询Extra功能实现解析
extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些情况下,Django的查询语法难以简单的表达复杂的 WHERE 子句,对于这种情况, Django 提供了 extra() QuerySet修改机制 - 它能在 QuerySet生成的SQL从句中注入新子句. extra可以指定一个或多个 参数,例如 select, where or tables.
-
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
测了一下django.flask.bottle.tornado 框架本身最简单的性能.对django的性能完全无语了. django.flask.bottle 均使用gunicorn+gevent启动,单进程,并且关闭DEBUG,请求均只返回一个字符串ok. tornado直接自己启动,其他内容一致. 测试软件为 siege,测试os为cenos6 64位,测试命令为: 复制代码 代码如下: siege -c 100 -r 100 -b http://127.0.0.1:5000/ django
-
Python Web框架之Django框架文件上传功能详解
本文实例讲述了Python Web框架之Django框架文件上传功能.分享给大家供大家参考,具体如下: 上传方式: - Form表单上传文件 - Ajax上传文件 - 基于form表单和iframe自己实现ajax请求 1,创建项目 2,settings配置(注册app01,static路径等等这些)及url添加(略过) 3,views视图函数 form的视图收到了在request.FILES中的文件数据.从上述form来的数据可以通过request.FILES['file']来存取. 特别注意
-
在 Django/Flask 开发服务器上使用 HTTPS
使用 Django 或 Flask 这种框架开发 web app 的时候一般都会用内建服务器开发和调试程序,等程序完成后再移交到生产环境部署.问题是这些内建服务器通常都不支持 HTTPS,我们想在开发的时候就能够使用和测试 HTTPS,不想还没测试就部署到生产环境,所以我们需要内建服务器能支持 HTTPS. 这个问题可以通过一个外部程序 stunnel 来解决,stunnel 的作用是通过 OpenSSL 库对 TCP 会话进行加密,建立起一个安全通道,保护没有加密功能或未加密的程序.其主要功能
-
Django和Flask框架优缺点对比
Flask 在 Django 之后发布,现阶段有大量的插件和扩展满足不同需要 Django发布于2005年,Flask创始于2010年年中. Django功能大而全,Flask只包含基本的配置, Django的一站式解决的思路,能让开发者不用在开发之前不用花费大量时间在选择应用的基础设施. Django有模板,表单,路由,认证,基本的数据库管理等等内建功能.与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩
-
python中的flask框架Jinja 模板入门教程
目录 1.快速体验 2.Flask 最小 DEMO 3.模板继承 4.Super Blocks 5.Macros 6.自定义过滤器 7.结论 Flask 和 Django 附带了强大的 Jinja 模板语言. 对于之前没有接触过模板语言的人来说,这类语言基本上就是包含一些变量,当准备渲染呈现 HTML 时,它们会被实际的值替换. 这些变量放在标记或分隔符之前.例如:Jinja 模板使用 {% ... %} 表示循环,{{ ... }} 表示一个表达式运算结果返回. Jinja 模板其实是 htm
-
Python常用Web框架Django、Flask与Tornado介绍
web框架是什么? web开发框架是一组工具,同时也提供了非常多的资源,供软件开发人员构建和管理网站.提供web服务.编写web应用程序.它是一个抽象工具,能使开发应用程序和重复使用代码的过程变得更容易. 为什么需要web开发框架? 进行自定义软件开发时,web开发框架让整个过程变得更容易,因而开发速度更快.更高效.许多开发框架都很便宜,这也使得整个客户机的成本更小. 一个被广泛使用的框架安全性更高.这主要依赖于该框架背后的社区,在这里,用户成为长期的测试人员,并可以提供修复. 如果发现了安全漏
-
Flask框架的学习指南之开发环境搭建
Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2.很多功能的实现都参考了django框架.由于项目需要,在此记录下学习的过程及心得. 工欲善其事,必先利其器.就从搭建一套flask开发环境开始flask之旅吧. 一.平台说明 操作系统:window 7 64bit 数据库:mysql5.6 python:v2.7 开发集成软件:PyCharm5.0 二.开发环境搭建 1.安装flask框架包 1
-
Python的Flask框架中Flask-Admin库的简单入门指引
Flask-Admin是一个功能齐全.简单易用的Flask扩展,让你可以为Flask应用程序增加管理界面.它受django-admin包的影响,但用这样一种方式实现,开发者拥有最终应用程序的外观.感觉和功能的全部控制权. 本文是关于Flask-Admin库的快速入门.本文假设读者预先具有一些Flask框架的知识. 介绍 初始化 增加视图 身份验证 生成URL 模型视图 文件管理 介绍 这个库打算做到尽可能的灵活.并且开发者不需要任何猴子补丁就可以获得期望的功能. 这个库使用一个简单而强大的概念-
-
Flask框架各种常见装饰器示例
本文实例讲述了Flask框架各种常见装饰器.分享给大家供大家参考,具体如下: 效果类似django的process_request的装饰器 @app.before_request def before(*args,**kwargs): print('请求之前') ''' 如果允许通过访问,可以return None 该装饰器装饰的函数如果有return其他内容则直接结束访问, 效果有点类似django的process_reqeust中间件方法. 比如通过这个装饰器写登陆验证,判断其是否有sess
-
Flask框架单例模式实现方法详解
本文实例讲述了Flask框架单例模式实现方法.分享给大家供大家参考,具体如下: 单例模式: 程序运行时只能生成一个实例,避免对同一资源产生冲突的访问请求. Django admin.py下的admin.site.register() , site就是使用文件导入方式的单例模式 创建到单例模式4种方式: 1.文件导入 2. 类方式 3.基于__new__方式实现 4.基于metaclass方式实现 1.文件导入: in single.py class Singleton(): def __
-
Flask框架中request、请求钩子、上下文用法分析
本文实例讲述了Flask框架中request.请求钩子.上下文用法.分享给大家供大家参考,具体如下: request 就是flask中代表当前请求的request对象: 常用的属性如下: 属性 说明 类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict args 记录请求中的查询参数 MultiDict cookies 记录请求中的cookie信息 Dict headers 记录请求中的报文头 EnvironHeaders method 记录请求
-
Flask框架实现给视图函数增加装饰器操作示例
本文实例讲述了Flask框架实现给视图函数增加装饰器操作.分享给大家供大家参考,具体如下: 在@app.route的情况下增加装饰器的写法: from flask import Flask,request,render_template,redirect,session,url_for,views from flask import render_template app = Flask(__name__) #实例化flask对象 app.debug = True #能够随时更改自动重启,不加的
随机推荐
- jquery之基本选择器practice(实例讲解)
- Docker网络之单host网络及使用案例
- IE浏览器与FF浏览器关于Ajax传递参数值为中文时的区别实例分析
- Java中断线程的方法
- 图片自动更新(说明)
- showModalDialog模态对话框的使用详解以及浏览器兼容
- asp.net Cookie值中文乱码问题解决方法
- node.js中的console.log方法使用说明
- Linux 中C语言getcwd()函数的用法
- 很不错的两款Bootstrap Icon图标选择组件
- 原生javascript实现的一个简单动画效果
- PHP批量修改文件名称的方法分析
- PowerShell中使用.NET将程序集加入全局程序集缓存
- Lua教程(六):绑定一个简单的C++类
- JqueryMobile动态生成listView并实现刷新的两种方法
- 命令行第1/2页
- Spring Boot(三)之找回熟悉的Controller,Service
- PHP SOCKET 技术研究
- Python3 伪装浏览器的方法示例
- 在CentOS VPS上通过SSH安装 MySQL的方法图解