Flask, Django

1. 目录结构

一般情况下,Django很系统、统一。Flask项目目录风格不同一,即使用上了蓝图。

2. 数据库迁移

Flask要用第三方extensions,而Django自带,这个很方便。

3. 模块化

Flask是用蓝图。Django可以自动生成python manage.py startapp <app_name>,并在Django的项目的settings那个INSTALLED_APPS字典里注册一下就好。

4. 命令行

Django的命令行初始更多功能,例如migrate。但Flask自定义命令很简单。 启动方面,Flask有两种,一种是通过manage.py帮助脚本去运行,另一种是export环境变量,用flask run来运行,官方文档建议后面这种,1.02版本还新增了一个环境变量FLASK_ENV。因为Flask依赖5个包,其中一个是click,所以可以自定义CMD。

1@app.cli.command() 2def hello(): 3 click.echo('Hello, xxx!') 4 5flask hello

5. 新建模型方面差不多。

它们都是继承ORM的Model。建模之后都是要加入到数据库中,就是做一个数据库迁移操作。 Flask是传入想要创建的字段类型到model.Column,而Django有明显的类给你使用,例如models.charField。

6. 反向获取URL

1 path('', views.post_list, name='post_list') 2]

这个name,相当于Flask的endpoint。意思都是通过反向这个名字,reverse(name)去获得URL。

1// 在模板中 2<a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1> //Django 3{% url_for('") %} // Flask

7. 路由

Django的路由和view functions是分开写的:urls.py, views.py。而Flask是都写在views.py中,view function和url写在一起(以装饰器的形式app.route)。 因为Django是MTV模式。其实和MVC模式差不多。大致上是Controller变成了views.py和urls.py。

Flask命令行中使用flask routes可以查看URL与view function的映射关系。代码中使用app.url_map可以查看。

8. 中间件使用

Django在settings.py里设置, Flask要初始化中间件实例,然后传入app(Flask)实例。

9. Request对象

Django中,每个view function或者CBV中都要写一个request参数。而Flask的view function则不用,因为

1from flask import request 2 3# 这个request是对每个请求独立的,就像g变量。值得研究底层原理(Flask通过本地线程( thread local) 技术将请求对象在特定 4的线程和请求中全局可访问)

10. 限制http请求方法

Flask

1@app.route('/hello', methods=['GET', 'POST']) 2def hello(): 3return '<h1>Hello, Flask!</h1>'

Django

1from django.views.decorators.http import require_http_methods 2@require_http_methods(['GET','POST']) 3def login(request): 4 pass

11. 钩子函数

Flask,加钩子装饰器

1@app.before_request 2def do_something(): 3 pass # 这里的代码会在每个请求处理前执行

Django,通过中间件

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )