网站开发过程中,可能有需要初始化的数据,比如一些权限、管理员数据等等。如果可以用类似于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了解不深,欢迎探讨