我希望管理员在删除某些对象时收到通知,但我也想确定哪个用户正在执行删除.
可能吗?
这是代码:
# models.py
# signal to notify admins when nodes are deleted
from django.db.models.signals import post_delete
from settings import DEBUG
def notify_on_delete(sender, instance, using, **kwargs):
''' Notify admins when nodes are deleted. Only for production use '''
if DEBUG:
#return False
pass
# prepare context
context = {
'node': instance,
'site': SITE
}
# notify admins that want to receive notifications
notify_admins(instance, 'email_notifications/node-deleted-admin_subject.txt', 'email_notifications/node-deleted-admin_body.txt', context, skip=False)
post_delete.connect(notify_on_delete, sender=Node)
Run Code Online (Sandbox Code Playgroud) 遵循本教程:
http://django-rest-framework.org/tutorial/1-serialization.html
通过http://django-rest-framework.org/tutorial/4-authentication-and-permissions.html
我有这个代码:
# models.py
class Message(BaseDate):
"""
Private Message Model
Handles private messages between users
"""
status = models.SmallIntegerField(_('status'), choices=choicify(MESSAGE_STATUS))
from_user = models.ForeignKey(User, verbose_name=_('from'), related_name='messages_sent')
to_user = models.ForeignKey(User, verbose_name=_('to'), related_name='messages_received')
text = models.TextField(_('text'))
viewed_on = models.DateTimeField(_('viewed on'), blank=True, null=True)
# serialisers.py
class MessageSerializer(serializers.ModelSerializer):
from_user = serializers.Field(source='from_user.username')
to_user = serializers.Field(source='to_user.username')
class Meta:
model = Message
fields = ('id', 'status', 'from_user', 'to_user', 'text', 'viewed_on')
# views.py
from permissions import IsOwner
class MessageDetail(generics.RetrieveUpdateDestroyAPIView):
model = Message
serializer_class = MessageSerializer
authentication_classes …Run Code Online (Sandbox Code Playgroud) 我正在尝试用supervisord管理一个ruby脚本但因为我还没有完全理解RVM是如何工作的,所以我无法正确地完成它.
通常我会做以下事情:
# sourcing of rvm done automatically on ssh login
cd /var/rails/myapp
RAILS_ENV="production" bundle exec ./script/backgroundrb
Run Code Online (Sandbox Code Playgroud)
但是使用以下配置文件我无法做到:
[program:owgm]
directory=/var/rails/owgm
command=bundle exec ./script/backgroundrb
environment=RAILS_ENV="production"
PATH="/usr/local/rvm/gems/ree-1.8.7-2012.02@global/bin/bundle:$PATH"
autostart=true
autorestart=true
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
无法加载OpenSSL.您必须使用OpenSSL支持重新编译Ruby,或者将Gemfile中的源从"https"更改为"http".有关使用RVM使用OpenSSL进行编译的说明,请访问rvm.io/packages/openssl.
看起来我无法获得正确的红宝石环境.
我认为设置路径会起作用,因为如果我这样做:
which bundle
Run Code Online (Sandbox Code Playgroud)
我得到:/usr/local/rvm/gems/ree-1.8.7-2012.02@global/bin/bundle
但我甚至不确定发生了什么.
使用Python我会做类似的事情:
command=/path/to/virtualenv/bin/python /path/to/script.py
Run Code Online (Sandbox Code Playgroud)
我可以用红宝石做类似的事吗?
rvm信息的输出是:
ree-1.8.7-2012.02:
system:
uname: "Linux owtb2 3.2.0-44-generic #69-Ubuntu SMP Thu May 16 17:35:01 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux"
system: "ubuntu/12.04/x86_64"
bash: "/bin/bash => GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)"
zsh: " => not installed"
rvm:
version: …Run Code Online (Sandbox Code Playgroud) 我为openwisp2编写了一个ansible-role来简化其部署,它是一系列django应用程序.为了尽可能地简化部署,我写了一个简单的(可能是微不足道的)SECRET_KEY生成器脚本,由ansible调用,在第一次运行ansible playbook时生成密钥.
现在,这工作正常,但我认为它击败了Django生成一个很难猜的强键的内置安全措施.
当时我查看其他方法,但没有找到太多,现在我想知道:是否有一个函数用于生成django中的settings.SECRET_KEY?
这将避免这种家庭烘焙解决方案,即使它们工作,它们在安全性方面也无效.
通过阅读官方的django文档,我对此并不了解. https://docs.djangoproject.com/en/dev/topics/logging/#configuring-logging
如果将settings.py中的DEBUG设置为True,我也想启用日志记录.我希望将错误记录在文件中.
怎么做?
这些是我现在拥有的日志记录的默认django设置:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
Run Code Online (Sandbox Code Playgroud)
PS: 我在我的开发环境中使用Apache + mod_wsgi,因为我使用的是我在局域网上远程访问的开发机器,这意味着我没有使用django开发服务器,我看不到控制台日志消息.
我正在尝试理解django ModelFields的内部,以在django-hstore上实现一个新功能.
基本上我想从具有预定义模式的HStore Dictionary创建虚拟字段.
作为第一步,我想隐藏实际的HStore Dictionary字段,而是使用虚拟字段中的值来组成最终的HStore Dictionary.
我已经能够使管理工作正常用于除了保存操作之外的所有操作,保存操作不会将虚拟字段的值保存到HStore字典中.
这是我的实际VirtualField代码:
# virtual.py
from django.db.models.fields import Field
class VirtualField(Field):
""" Virtual Field """
def __init__(self, *args, **kwargs):
try:
self.hstore_field_name = kwargs.pop('hstore_field_name')
except KeyError:
raise ValueError('missing hstore_field_name keyword argument')
super(VirtualField, self).__init__(*args, **kwargs)
def contribute_to_class(self, cls, name, virtual_only=True):
super(VirtualField, self).contribute_to_class(cls, name, virtual_only)
def value_from_object(self, obj):
"""
Returns the value of this field in the given model instance.
"""
hstore_field = getattr(obj, self.hstore_field_name)
return hstore_field[self.attname]
def save_form_data(self, instance, data):
hstore_field = getattr(instance, self.hstore_field_name) …Run Code Online (Sandbox Code Playgroud) 有没有办法在使用时指定可选依赖项python setup.py develop?
例如,假设我有这个包:
pip install openwisp-utils[users]
Run Code Online (Sandbox Code Playgroud)
如何通过告诉 setuptools 安装 中列出的可选依赖项来安装openwisp-utilsextra_requires['users']进行开发?
我正在使用django-transmeta(无法通过django 1.2.5获得更好的工作),它在表中创建了几个列,如:content_en,content_es,content_it
在实施i18n之前,我有:
items = Items.objects.filter(categories__slug=slug)
Run Code Online (Sandbox Code Playgroud)
现在category.slug已国际化,因此我有"category.slug_en","category.slug_es","category.slug_it"等.
所以我虽然做了:
from django.db.models import Q
from django.utils.translation import get_language
current_lang = get_language()
queryset = {
'en': Q(categories__slug_en__contains=slug),
'es': Q(categories__slug_es__contains=slug),
'it': Q(categories__slug_it__contains=slug),
}
items = Items.objects.filter(queryset[current_lang])
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,每当我需要添加一种新语言时,我将不得不更改代码,当然我不想这样做.
所以我做了:
from django.db.models import Q
from django.utils.translation import get_language
current_lang = get_language()
var = 'Q(categories__slug_%s=slug)' % current_lang
queryset = eval(var)
items = Items.objects.filter(queryset)
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我使用的是eval(),它当然与evil()同义,最好避免它.
所以我想知道:有更好的方法吗?
非常感谢!
出于好奇心的缘故......
在Ruby中:
=>$ irb
1.8.7 :001 > puts x = 2
2
=> nil
1.8.7 :002 > puts x += 2 while x < 40
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
Run Code Online (Sandbox Code Playgroud)
这很方便.
是否可以在Python中以单行执行此操作,如果是,如何?
django默认模板系统最常用的替代方法是什么?
有没有人尝试过?
编辑:性能怎么样?
django ×7
python ×6
ruby ×2
bundler ×1
eval ×1
openwisp ×1
rvm ×1
setuptools ×1
supervisord ×1