惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
博客园 - 【当耐特】
月光博客
月光博客
C
Check Point Blog
T
The Blog of Author Tim Ferriss
罗磊的独立博客
博客园 - Franky
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
美团技术团队
N
Netflix TechBlog - Medium
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
L
LangChain Blog
The Cloudflare Blog

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
Django 中的 manage 命令
微信公众号 · 2017-05-16 · via 陈少文的网站

Please enable Javascript to view the contents

每个Django项目中都会自动生成一个manage.py文件。manage.py是对django-admin的一个简单包装,其功能是将Django Project放到sys.path目录中,设置 DJANGO_SETTINGS_MODULE 环境变量为当前Project的setting.py 文件。也就是说django-admin与manage的差别在于,manage设置了项目的环境变量。

1. 使用格式

1
2
django-admin [command] [options]
manage.py [command] [options]

2. manage命令简介

2.1 创建项目 - startproject

1
manage startproject pro_name

2.2 创建app - startapp

1
manage startapp app_name

2.3 交互环境 - shell

如果安装了 IPython 或 bpython ,将被指定为解释器接口。

2.4 创建模型 - syncdb

manage syncdb

2.5 启动服务器 - runserver

manage runserver [IP地址 : 端口号]

本地启用一个轻量级的Web服务器

2.6 确定你使用的版本 - version

2.7 检查 - check

默认情况下,所有应用都将被选中。

如果没有指定任何一个应用,那么将对全部的应用进行检查。

  • tag

可以使用标记将执行的检查仅限于特定类别中的检查。例如,要仅执行安全性和兼容性检查,运行:
python manage.py check –tag security –tag compatibility

  • list-tags

列出所有可用的标签

  • deploy

选项激活与部署相关的一些其他检查。
python manage.py check –deploy –settings=production_settings

2.8 清空数据库 - flush

  • database选项可用于指定要刷新的数据库。
  • no-initial-data
    使用–no-initial-data可避免加载initial_data fixture。

2.9 反向生成模型 - inspectdb

2.10 数据模型 - validate

2.11 创建缓存表 - createcachetable

1
manage createcachetable
  • database选项可用于指定要安装缓存表的数据库

2.12 模型产生sql代码 - sql

将app创建表的sql语句打印出来,并不是真的创建

2.13 模型产生sql代码 - sqlall

打印出所有的创建app的sql语句,包括索引

2.14 数据库引擎命令行客户端 - dbshell

  • database选项可用于指定要在其上打开shell的数据库

2.15 创建超级管理员 - createsuperuser

2.16 修改用户密码 - changepassword

1
manage changepassword username
  • database选项指定要为用户查询的数据库

2.17 更新数据库修改 - migrate

1
manage.py  makemigrations

更新migrations文件

执行数据库脚本中的命令,将models层的修改同步到数据库

2.18 现在配置与默认配置的差异 - diffsettings

显示现在的设置文件和默认的设置文件之间的差异

2.19 导出数据库 - dumpdata

  • format
    默认情况下,dumpdata将以JSON格式输出其输出,但您可以使用–format选项指定另一种格式。目前支持的格式列在Serialization formats中。
  • indent
    默认情况下,dumpdata将在一行上输出所有数据。这对于人类来说不容易阅读,因此您可以使用–indent选项来漂亮地打印具有多个缩进空格的输出。
  • exclude
    选项以防止特定应用或模型(以app_label.ModelName)。如果将模型名称指定为dumpdata,则转储的输出将限制为该模型,而不是整个应用程序。您还可以混合应用程序名称和型号名称。
  • database
    选项可用于指定要从中转储数据的数据库。
  • natural-foreign
    Django将使用natural_key()模型方法将任何外键和多对多关系序列化到定义方法的类型的对象。
  • pks
    默认情况下,dumpdata将输出模型的所有记录,但您可以使用–pks选项指定要过滤的主键的逗号分隔列表。这仅在转储一个模型时可用。
  • output
    缺省,dumpdata命令会将所有经序列化之后的数据输出到标准输出。使用–output选项允许指定数据被写入的文件。

2.20 导入数据 - loaddata

  • database
    选项可用于指定要将数据加载到的数据库。
  • ignorenonexistent
    选项可用于忽略可能自灯具最初生成后移除的字段和模型。
  • app
    选项可用于指定单个应用程序来查找fixture,而不是浏览所有应用程序。

2.21 获取运行时帮助 - help

  • 运行 manage help显示使用信息和每个应用的命令列表
  • 运行 manage help –commands显示一个包含所有可用命令的列表
  • 运行 manage help 来显示某一个命令的描述及其可用的命令列表。

3. 从代码运行管理命令

django.core.management.call_command(name, *args, **options)

1
2
3
4
5
6
7
from django.core.management import call_command
call_command('flush', verbosity=0, interactive=False)
call_command('loaddata', 'test_data', verbosity=0)
call_command('dumpdata', '--natural-foreign')
call_command('dumpdata', exclude=['contenttypes', 'auth'])
with open('./command_output') as f:
    call_command('dumpdata', stdout=f)

4. 定制manage命令

在项目的开发过程中,难免需要一些特殊的处理操作。那么问题来了,如何避免这些重复操作呢?没错,那就是定制自己的manage命令。

Django通过django.core.management中的find_commands和get_commands函数查找命令,也就是django.core和每个app的management/commands目录下查找命令。

知道了原理,那么,只需要在自己的app下,创建如下目录即可。

1
2
3
app/management/commands/__init__.py
app/management/commands/mycommands.py
app/managemen/__init__.py
1
2
3
4
5
6
# app/management/commands/mycommands.py
from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):
     def handle(self, *args, **options):
         return 'hello, mycommands!'
1
2
3
# 执行mycommands命令
manage.py mycommands
hello, mycommands!

更详细的写法,可以参考django.core.management.commands中的命令。


微信公众号