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

枫铃3年前 (2021-07-09)Python311

1 描述

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

2 使用自带的 shell

python manage.py shell < script

或者

./manage.py shell < script

2.1 举例
在这里插入图片描述
2.2 脚本代码如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# -*- 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 脚本如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# -*- 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 脚本如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# -*- 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

示例如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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 方法中封装业务逻辑,这样更为方便一些

相关文章

python中F/f表达式优于format()表达式

F/f表达式可以解析任意...

用Python求出:1到某个数的奇数序列里一共出现了多少个3

从1开始到微信ID的数字中(),奇数序列里一共出现了多少个3。 这次练习附加题。 方法一: im...

Python  File(文件) 方法

Python File(文件) 方法

open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数&...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。