我需要从Django shell执行Python脚本.我试过了:
./manage.py shell << my_script.py
Run Code Online (Sandbox Code Playgroud)
但它没有用.它只是在等我写点什么.
当我从django-admin用户密码创建用户时,会加密.但是当我从django shell创建用户时,user-pasword以纯文本格式保存.示例:
{
"date_joined": "2013-08-28T04:22:56.322185",
"email": "",
"first_name": "",
"id": 5,
"is_active": true,
"is_staff": false,
"is_superuser": false,
"last_login": "2013-08-28T04:22:56.322134",
"last_name": "",
"password": "pbkdf2_sha256$10000$iGKbck9CED0b$6hWrKYiMPNGKhcfPVGal2YP4LkuP3Qwem+2ydswWACk=",
"resource_uri": "/api/v1/user/5/",
"username": "user4"
},
{
"date_joined": "2013-08-29T01:15:36.414887",
"email": "test@ophio",
"first_name": "",
"id": 6,
"is_active": true,
"is_staff": true,
"is_superuser": true,
"last_login": "2013-08-29T01:15:36.414807",
"last_name": "",
"password": "123test",
"resource_uri": "/api/v1/user/6/",
"username": "test3"
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试为一个简单的博客应用程序制作REST样式api:当我尝试通过post请求[通过传递JSON]插入用户时,密码保存为纯文本.如何覆盖此行为.
我试图通过django shell保存图像文件.
我model.py是:
class user(models.Model):
name=models.CharField(max_length=20)
pic=models.ImageField()
Run Code Online (Sandbox Code Playgroud)
使用admin和表单可以很好地使用Everyhing,但我想使用shell保存图像:
就像是
>>>user1=User(name='abc', pic="what to write here")
Run Code Online (Sandbox Code Playgroud) 我想仅通过命令行通过Django的manage.py shell函数执行命令
例如
manage.py shell -c "from myapp import models; print models.MyModel.some_calculation()"
Run Code Online (Sandbox Code Playgroud)
你可以将-c选项与普通的Python解释器一起使用
例如
python -c "print 'hello world'"
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到等效的-c选项manage.py shell.有没有办法做到这一点?
我刚刚了解到,使用Rails可以在控制台中用几行代码模拟HTTP请求.
查看:http://37signals.com/svn/posts/3176-three-quick-rails-console-tips("深入了解您的应用"部分).
用Django有类似的方法吗?会很方便的.
这对我来说已经是一个长期存在的问题了,但是由于我主要使用Linux开发,所以到目前为止我从未真正关心过这个问题.
Windows上的iPython缺乏各种功能.
我真的很想念颜色 突出 和自动完成.
编辑:通过安装pyreadline修复突出显示
pip安装pyreadline
有人已经处理过这个吗?
我想自动生成某种日志,记录在生产环境中通过 Django shell 进行的所有数据库更改。
我们使用模式和数据迁移脚本来更改生产数据库,并且它们是版本控制的。因此,如果我们引入一个错误,很容易追踪它。但是,如果团队中的开发人员通过 Django shell 更改数据库,从而引入问题,目前我们只能希望他们记得他们做了什么,或者/并且我们可以在 Python shell 历史记录中找到他们的命令。
例子。我们假设团队中的开发人员通过 Python shell 执行了以下代码:
>>> tm = TeamMembership.objects.get(person=alice)
>>> tm.end_date = date(2022,1,1)
>>> tm.save()
Run Code Online (Sandbox Code Playgroud)
它更改数据库中的团队成员资格对象。我想以某种方式记录下来。
我知道有很多与审计日志记录相关的 Django 包,但我只对 Django shell 触发的更改感兴趣,并且我想记录更新数据的 Python 代码。
所以我想到的问题是:
pre_save所有模型的信号来了解数据是否发生变化,但我如何知道源是否来自 Python shell?我怎么知道原始的 Python 语句是什么?这个问题:在Django shell启动时自动导入模型的答案解释了如何在开始时使用shell_plus导入模型,但没有回答如何一般地运行代码.
但有没有一种简单的方法来运行python脚本?
python manage.py shell [or shell_plus] --run=script.py
Run Code Online (Sandbox Code Playgroud)
只需运行脚本就像在shell启动时输入整个内容一样.
我意识到你可以在shell中导入东西,但是它们会被卡在命名空间中.
我认为ipython应该有办法运行脚本,然后将其locals()导入到顶级命名空间.在那种情况下你可以做到%magic script.py,我们只需要一步,这将是好的.
改变你启动shell的方式应该没问题 - 主要目标是能够创建一个在shell启动时运行的文件.
我尝试运行一些
python manage.py shell_plus --notebook --settings=my_app.settings.andi
Run Code Online (Sandbox Code Playgroud)
但它失败了,错误:
Unknown command: 'shell_plus'
Type 'manage.py help' for usage.
Run Code Online (Sandbox Code Playgroud)
我安装了ipython和shell_plus(从我的pip冻结)
django-shell-plus==1.1.5
ipython==1.2.1
Run Code Online (Sandbox Code Playgroud)
怎么处理呢?
是否可以在 Django Shell 中输出特定模型的所有字段的名称?例如,如何从User模型中获取字段:
>>> from django.contrib.auth.models import User
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过访问models.py适当的应用程序来获取它,但对我来说,在同一位置获取所有应用程序型号的信息会更方便。