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 方法中封装业务逻辑,这样更为方便一些

Django | 执行项目下指定的脚本的更多相关文章

  1. linux下使用shell脚本自动化部署项目

    在Java开发项目时经常要把正在开发的项目发布到测试服务器中去测试,一般的话是要把项目先打成war包,然后把war包发布到服务器中,关闭服务器, 最后重新启动服务器,虽然这过程不是很繁琐,但如果是多个 ...

  2. 简单的django登录项目---带views视图函数(脚本文件)---用Bootstrap

    简单的django登录项目 1.首先建立工程,建立工程请参照:https://www.cnblogs.com/effortsing/p/10394511.html 2.在Firstdjango工程项目 ...

  3. Django在Win7下安装与创建项目hello word示例

    Django在Win7下的安装及创建项目hello word的例子 有关python 的django 框架安装与开发的小例子.Django在Win7下的安装及创建项目hello word.1.安装:命 ...

  4. MySQL命令行下执行sql文件(sql脚本)

    在mysql命令行下执行sql文件(sql脚本) mysql> source    sql文件完整路径 如: mysql> source   D:\\MySQL\\create.sql 文 ...

  5. 浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入

    在<浏览器环境下JavaScript脚本加载与执行探析之defer与async特性>中,我们研究了延迟脚本(defer)和异步脚本(async)的执行时机.浏览器支持情况.浏览器bug以及 ...

  6. 执行Android项目时指定特定的AVD进行測试

    一个Androidproject空间能够创建一个或多个AVD来对指定的Android项目进行測试,假设仅仅创建了一个AVD则执行Android项目时自然启动该AVD,但是假设创建了多个AVD那么我们该 ...

  7. 通过getResourceAsStream方法获取项目下的指定资源

    properties配置文件调用 通过getResourceAsStream方法获取项目下的指定资源 一:获取src下的指定资源 1). Class.getResourceAsStream(Strin ...

  8. Django 创建项目笔记

    基本命令 mkdir mysite # 创建项目目录,常取名mysite cd mysite virtualenv env # env\Scripts\activate.bat # Win pip i ...

  9. Django 部署(Apache下)

    前言: 因为需要在服务器下运行python脚本,所以需要搭建Django服务器.所以将自己的学习过程也记录下来,方便日后查阅. 本文环境如下: Ubuntu 16.04  python2.7 Apac ...

随机推荐

  1. Java 嵌套类和内部类演示样例&lt;二&gt;

    嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...

  2. Python中optparse模块使用浅析

    转载:http://www.jb51.net/article/59296.htm 最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux中一些命令的参数了,比如ls -a,为什么加上-a ...

  3. Chrome自带恐龙小游戏的源码研究(完)

    在上一篇<Chrome自带恐龙小游戏的源码研究(七)>中研究了恐龙与障碍物的碰撞检测,这一篇主要研究组成游戏的其它要素. 游戏分数记录 如图所示,分数及最高分记录显示在游戏界面的右上角,每 ...

  4. 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  5. difference between VM, Docker and Vagrant区别

    VM:  VirtualBox, VMware Docker Vagrant using which you can create VMs or container. It interacts wit ...

  6. JQ动态获取数据

    转:JQUERY获取浏览器窗口的高度和宽度 June 27, 2012 <script type="text/javascript"> $(document).read ...

  7. 图像检测之sift and surf---sift中的DOG图 surf hessian

    http://www.cnblogs.com/tornadomeet/archive/2012/08/17/2644903.html http://www.cnblogs.com/slysky/arc ...

  8. 【剑指Offer学习】【面试题58:二叉树的下一个结点】

    题目:给定一棵二叉树和当中的一个结点.怎样找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,另一个指向父节点的指针. 解题思路 假设一个结点有右子树.那么它的下一个结点就 ...

  9. python 基础 4.4 生成式 生成器 迭代器

    一.生成式和生成器   列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理.   #/usr/bin/python #coding=u ...

  10. 采集练习(十二) python 采集之 xbmc 酷狗电台插件

    前段时间买了个树莓派才知道有xbmc这么强大的影音软件(后来我逐渐在 电脑.手机和机顶盒上安装xbmc),在树莓派上安装xbmc后树莓派就成为了机顶盒,后面在hdpfans论坛发现了jackyspy  ...