GVKun编程网logo

在post_save信号中访问用户的请求(在@postconstruct)

11

在这篇文章中,我们将为您详细介绍在post_save信号中访问用户的请求的内容,并且讨论关于在@postconstruct的相关问题。此外,我们还会涉及一些关于dede中访问用户博客空间出现“你访问的

在这篇文章中,我们将为您详细介绍在post_save信号中访问用户的请求的内容,并且讨论关于在@postconstruct的相关问题。此外,我们还会涉及一些关于dede中访问用户博客空间出现“你访问的用户可能已经被删除”的解决办法、Django 1.2:如何将pre_save信号连接到类方法、django post_save从发送模型中调用?、Django post_save信号是异步的吗?的知识,以帮助您更全面地了解这个主题。

本文目录一览:

在post_save信号中访问用户的请求(在@postconstruct)

在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中访问用户博客空间出现“你访问的用户可能已经被删除”的解决办法

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:如何将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从发送模型中调用?

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信号是异步的吗?

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信号是异步的吗?的相关知识,请在本站搜索。

本文标签: