Django | 执行项目下指定的脚本

django

1 描述

有时候会碰到这样的场景,对于一些业务升级,我需要把数据库数据做些处理,同时又想以 Django 项目的环境变量执行脚本,这个时候使用 python 脚本是再适合不过的手段了。

2 使用自带的 shell

python manage.py shell < script

或者

./manage.py shell < script

2.1 举例

2.2 脚本代码如下:

# -*- coding: utf-8 -*-

from __future__ import absolute_import
from __future__ import unicode_literals

from django.contrib.auth.models import User


def show_user():
    user = User.objects.get(username='admin')
    print 'I am {0}'.format(user.username)


show_user()
2.3执行命令

python manage.py shell < script1.py

2.4 运行结果如下:

2.4.1 安装了 ipython(这里版本为 4.2.0)

2.4.2 没有安装 ipython

3 使用 django-extensions

  • 手段1:在 app 下面建立一个 scripts 包,然后建立你的脚本

  • 手段2:在项目目录下面建立一个 scripts 包,然后建立你的脚本

运行脚本命令如下:

python manage.py runscript script_name 

或者 

./manage.py runscript script_name

3.1 手段1

3.1.1 针对手段1

3.1.2 脚本如下:
# -*- coding: utf-8 -*-

from __future__ import absolute_import
from __future__ import unicode_literals

from django.contrib.auth.models import User


def run():
    user = User.objects.get(username='admin')
    print 'project_dir/cat/scripts/:I am {0}'.format(user.username)
3.1.3 运行命令
python manage.py runscript showadmin
3.1.4 执行结果如下

3.2 手段2

3.2.1 针对手段 2

3.2.2 脚本如下:
# -*- coding: utf-8 -*-

from __future__ import absolute_import
from __future__ import unicode_literals

from django.contrib.auth.models import User


def run():
    user = User.objects.get(username='admin')
    print 'project_dir/scripts/:I am {0}'.format(user.username)
3.2.3 运行命令
./manage.py runscript showadmin
3.2.4 执行结果

3.3 注意

runscript 命令会首先检查每个 app 下的 scripts 目录,如果找到对应名字的脚本就会执行.然后检查 project_dir/scripts 目录下是否包含符合名字的脚本,如果找到也会执行.也就是说,我们可以在不同的 app 中创建相同名字的脚本,并且都会被执行.

此时有两个 showadmin.py 文件

  • djtest/cat/scripts/showadmin.py

  • djtest/scripts/showadmin.py

运行结果如下:

4 使用自定义命令

这个自行参照文档

5 使用 migrations

示例如下:

from django.db import migrations

from apps.xx.scripts.xx import run


class Migration(migrations.Migration):
    initial = True

    dependencies = [
        ('thirdservice', '0007_auto_20160909_1021'),
    ]

    operations = [
        migrations.RunPython(run),
    ]

在 run 方法中封装业务逻辑,这样更为方便一些

转载于:https://my.oschina.net/u/2902720/blog/1502537

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值