在这篇文章中,我们将为您详细介绍在post_save信号中访问用户的请求的内容,并且讨论关于在@postconstruct的相关问题。此外,我们还会涉及一些关于dede中访问用户博客空间出现“你访问的
在这篇文章中,我们将为您详细介绍在post_save信号中访问用户的请求的内容,并且讨论关于在@postconstruct的相关问题。此外,我们还会涉及一些关于dede中访问用户博客空间出现“你访问的用户可能已经被删除”的解决办法、Django 1.2:如何将pre_save信号连接到类方法、django post_save从发送模型中调用?、Django post_save信号是异步的吗?的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 在post_save信号中访问用户的请求(在@postconstruct)
- dede中访问用户博客空间出现“你访问的用户可能已经被删除”的解决办法
- Django 1.2:如何将pre_save信号连接到类方法
- django post_save从发送模型中调用?
- Django post_save信号是异步的吗?
在post_save信号中访问用户的请求(在@postconstruct)
我在我的项目中完成了以下post_save信号。
from django.db.models.signals import post_savefrom django.contrib.auth.models import User# CORE - SIGNALS# Core Signals will operate based on postdef after_save_handler_attr_audit_obj(sender, **kwargs): print User.get_profile() if hasattr(kwargs[''instance''], ''audit_obj''): if kwargs[''created'']: kwargs[''instance''].audit_obj.create(operation="INSERT", operation_by=**USER.ID**).save() else: kwargs[''instance''].audit_obj.create(operation="UPDATE").save()# Connect the handler with the post save signal - Django 1.2post_save.connect(after_save_handler_attr_audit_obj, dispatch_uid="core.models.audit.new")
在operation_by列中,我想获取user_id并将其存储。知道怎么做吗?
答案1
小编典典不能做 当前用户只能通过请求使用,而在使用纯模型功能时则不可用。以某种方式访问视图中的用户。
dede中访问用户博客空间出现“你访问的用户可能已经被删除”的解决办法
dede中访问用户博客空间有时出现“你访问的用户可能已经被删除”,但是用户通过自己的登陆界面进入后,点击“我的空间”却能正常访问。
仔细注意一下登陆成功后IE状态栏的空间连接地址,在看一下首页调用会员空间的连接地址,这就能看出问题的所在了,第一个连接是编码为UTF8的,而第二个连接则直接是以中文方式发送编码的。
由此我们可以为这个地址加上转码函数即可。在dede程序内部有UTF-8转码函数urlencode。所以我们将参数编码即可。
接下来我们修改include\taglib\memberlist.lib.PHP这个文件
这句话里的第33行
$row['spaceurl'] = $GLOBALS['cfg_basehost'].'/member/index.PHP?uid='.$row['userid'];
改为:
$row['spaceurl'] = $GLOBALS['cfg_basehost'].'/member/index.PHP?uid='.urlencode($row['userid']);
这句话$row['userid']加上urlencode函数后。
经实践正确!
Django 1.2:如何将pre_save信号连接到类方法
我试图在我的django 1.2项目中的某些类中定义一个“ before_save”方法。我在将信号连接到models.py中的class方法时遇到麻烦。
class MyClass(models.Model):
....
def before_save(self,sender,instance,*args,**kwargs):
self.test_field = "It worked"
我尝试将pre_save.connect(before_save,sender =’self’)放入’MyClass’本身,但是什么也没发生。
我也尝试将其放在models.py文件的底部:
pre_save.connect(MyClass.before_save,sender=MyClass)
我在这里阅读了有关将信号连接到类方法的信息,但无法弄清楚代码。
有人知道我在做什么错吗?
django post_save从发送模型中调用?
我有一个很简单的模型可以工作:
class Badge(models.Model): name = models.CharField(max_length=16, help_text="Name for Badge") category = models.ForeignKey(BadgeCategory, help_text="Category for badge") description = models.CharField(max_length=32, help_text="A brief description") file = models.ImageField(upload_to=format_badge_name) signals.post_save.connect(create_badge, sender=Badge)
我知道我在signal.py中的create_badge函数有效。如果我发送的邮件没有发送者的值,则表示发送者是LogEntry对象。我想要/需要在post_save脚本中引用一些实例信息,如下所示:
def create_badge(sender, instance, created, **kwargs): from userinfuser.ui_api import UserInfuser from django.conf import settings if created: api_key = settings.API_KEY api_email = settings.API_EMAIL ui = UserInfuser(api_email, api_key) ui.create_badge(instance.category.name, instance.name, instance.description, instance.file.url)
我在哪里可以打电话给我的post_save呼叫,以便它知道Badge(我以为这是解决办法?
谢谢。
答案1
小编典典定义徽章 后, 只需将信号与sender = Badge连接,测试示例:
from django.db import modelsfrom django.db.models import signalsdef create_badge(sender, instance, created, **kwargs): print "Post save emited for", instanceclass BadgeCategory(models.Model): name = models.CharField(max_length=100)class Badge(models.Model): name = models.CharField(max_length=16, help_text="Name for Badge") category = models.ForeignKey(BadgeCategory, help_text="Category for badge") description = models.CharField(max_length=32, help_text="A brief description")signals.post_save.connect(create_badge, sender=Badge)
测试外壳会话:
In [1]: category = BadgeCategory(name=''foo'')In [2]: category.save()In [3]: badge = Badge(category=category, name=''bar'', description=''test badge'')In [4]: badge.save()Post save emited for Badge object
Django post_save信号是异步的吗?
我有一个“喜欢”功能,就像社交网络“喜欢”或“竖起大拇指”功能一样;用户单击星号/心形/任何内容以将内容标记为喜欢。它是用ajax完成的,并且必须快速。这里唯一的问题是,由于某些原因,我必须为每个“赞”执行一些任务,而我发现它们是在“赞”视图中直接编码的,这使其运行缓慢。我正在考虑使用信号来使这些任务的执行异步,以便视图可以立即将json发送回javascript,而无需等待任务完成。我开始为’like’创建一个信号,但后来意识到Django的信号不是异步的,并且最终会变得相同,视图将不得不等待该信号完成以发送回它的响应。
答案1
小编典典你想要的是一个线程。它们非常易于使用。你只需继承threading.Thread
并编写一个run
方法:
import threadingclass LikeThread(threading.Thread): def __init__(self, user, liked, **kwargs): self.user = user self.liked = liked super(LikeThread, self).__init__(**kwargs) def run(self): # long running code here
然后,当你准备好执行任务时,可以使用以下命令将其启动:
LikeThread(request.user, something).start()
其余的视图代码或其他任何内容将继续执行并返回响应,线程将很高兴地完成其工作,直到完成,然后结束自身。
今天关于在post_save信号中访问用户的请求和在@postconstruct的讲解已经结束,谢谢您的阅读,如果想了解更多关于dede中访问用户博客空间出现“你访问的用户可能已经被删除”的解决办法、Django 1.2:如何将pre_save信号连接到类方法、django post_save从发送模型中调用?、Django post_save信号是异步的吗?的相关知识,请在本站搜索。
本文标签: