前言
Django 和 Flask 是笔者最喜欢的两个 Python Web 框架,但两者定位截然不同Django -> "More is less": 是 "大而全" 的重量级 Web 框架,其自带大量的常用工具和组件(比如数据库ORM组件、用户认证、权限管理、分页、缓存), 甚至还自带了管理后台Admin,适合快速开发功能完善的企业级网站
Flask -> "Less is more": 是一个轻便灵活又易于扩展的 "微" 框架,默认情况下,Django 自带的那些工具和组件,Flask 通通都没有,只提供一个非常简洁高效的 "路由组件"
平日里,做些小工具小应用啥的,笔者还是比较喜欢 Flask 的,借助这样小巧的微框架,数十分钟就能撸一个出来。
但是上升到写比较偏大型一点的应用,笔者一般选择的都是 Django。最主要的原因无非就是:它的 ORM 模块实在太好用了。
而在 Flask 中,用的最多 ORM 框架的还是 SQLAlchemy,但是个人感觉其友好程度比不上 DjangoORM。
所以笔者萌生了一个想法:Flask + DjangoORM
开工
手动创建项目
$ mkdir FlaskWithDjangoORM
用 pip 安装所需依赖库
$ pip install flask django mysqlclient
手动创建 app 应用
在标准的 Django 项目中,创建名为 app 的子应用,用到的命令为 $ python manage.py startapp app,该命令生成的子应用其目录下,一般会有这么几个文件/目录:migrations/ 该目录存放数据库迁移文件
admin.py 该文件与管理后台相关
apps.py 该文件与子应用设置相关
models.py 该文件存放数据库模型
tests.py 该文件存放单元测试
views.py 该文件存放视图层代码
但如果我们只用 Django 的 ORM 模块的话,那么只需留下 migrations/ 和 models.py。故弃用命令,手动创建之:
$ cd FlaskWithDjangoORM
$ mkdir -p app/migrations
$ touch app/migrations/__init__.py
app 子应用初始化
$ cat >> app/__init__.py <
import os
from django.apps import apps
from django.conf import settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
apps.populate(settings.INSTALLED_APPS)
EOF
创建数据模型 Visit,记录每一次 Web 请求访问的时间
$ cat >> app/models.py <
from django.db import models
class Visit(models.Model):
created_at = models.DateTimeField(auto_now_add=True, null=True)
EOF
在 settings.py 内配置数据库连接(本文示例采