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
方法中封装业务逻辑,这样更为方便一些
黑月亮
点滴记录,步步成长
推荐阅读
centos | 修改静态 IP
设置 Centos 为使用静态 IP1 修改网络配置 {代码...} 修改后的内容如下 {代码...} 2 重启网络服务 {代码...} 3 查看地址 {代码...} 参考来源:[链接]
青阳半雪阅读 1.8k评论 3
三、djanjo
Django 提示:本文根据b站黑马python课整理链接指引 => 黑马程序员python企业级开发项目-手把手从0到1开发《美多商城》视图介绍和项目准备视图介绍视图就是应用中views.py文件中的函数视图的第一个参数必须为H...
玲小叮当阅读 934
Django笔记二十二之多数据库操作
在第十篇笔记的时候,简单介绍过 using() 的使用方法,多个数据库就是通过 using(db_alias) 的方式来来指定选中的数据库,这里介绍一下同步库表结构时候的操作。
Hunter阅读 815
Django笔记十三之select_for_update等选择和更新等相关操作
本篇笔记将介绍 update 和 create 的一些其他用法,目录如下:get_or_createupdate_or_createselect_for_updatebulk_createbulk_update1、get_or_create前面我们介绍过 get() 和 create() 的用法,那么 get_or_cr...
Hunter阅读 759
Django笔记十二之defer、only指定返回字段
defer 的英语单词的意思是 延迟、推迟,我们可以通过将字段作为参数传入,可以达到在获取数据的时候指定不获取该字段数据,常用于一些 textfield 字段上。
Hunter阅读 718
Django笔记十四之统计总数、最新纪录和空值判断等功能
本篇笔记将介绍一些 Django 查询中统计总数、最新纪录和空值判断等功能。countin_bulklatest、earliestfirst、lastexistscontains、icontainsgt、gte、lt、ltestartswith、istartswithisnull1、count返回查询的 Q...
Hunter阅读 671
Django笔记六之外键ForeignKey介绍
这一篇笔记介绍 Django 系统 model 的外键处理,ForeignKey 以及相应的处理方法。这是一种一对多的字段类型,表示两张表之间的关联关系。本篇笔记的目录如下:on_deleterelated_namerelated_query_name外键字段的...
Hunter阅读 663
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。