Django写系统初始化脚本

2015/02/09   
分类:  blog    django   

需求:

网站开发过程中,可能有需要初始化的数据,比如一些权限、管理员数据等等。如果可以用类似于python manage.py syncdb这样的命令一键执行就不错了。

方法

1、研究一下manage.py代码

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webconfig.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
  • 用if name == “main”: 作为接口,如果直接写的话就再python编译的时候就被运行了

  • 添加Django的setting配置

2、看看execute_from_command_line的内容

def execute_from_command_line(argv=None):
    """
    A simple method that runs a ManagementUtility.
    """
    utility = ManagementUtility(argv)
    utility.execute()
  • 注意到ManagementUtility调用execute()的时候会跑django.setup(),这样就能使用django里面的接口

  • 获取argv,就是python manage.py syncdb的syncdb这个命令,这样就能写多样化的命令了

3、贡献我部分代码

# web_init.py

#!/usr/bin/env python
import os
import sys
import django

def init_padmin():
    #init padmin
    from django.contrib.auth.models import User
    from django.contrib.auth.models import Permission
    from django.contrib.contenttypes.models import ContentType

    django.setup()
    content_type = ContentType.objects.get_for_model(User)
    permission = Permission.objects.create(codename='can_login_padmin', name='Can Login Padmin', content_type=content_type)

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webconfig.settings")
    try:
        command = sys.argv[1]
        if command == "all":
            init_padmin()
        elif command == "padmin":
            init_padmin()
    except:
        print ""
        print "=======please input command======="
        print "all: init all"
        print "padmin: init the padmin system"
        print "=======      end help      ========"
        print ""
  • 注意,import django.contrib.auth.models等需要在DJANGO_SETTINGS_MODULE配置之后才可以。

  • 运行方式:python web_init.py all

  • 我是初学者,对应python了解不深,欢迎探讨


本文地址 http://www.0kai.net/blog/2015/02/09/27-django-system-init-script.html,转载请注明!