首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Django的GAE上的django信号-非版本

使用Django的GAE上的django信号-非版本
EN

Stack Overflow用户
提问于 2011-02-20 14:21:24
回答 1查看 438关注 0票数 0

我在GAE上的项目中使用了django-nonrel。我的要求是,在我的应用程序中,一次只能有一个用户使用给定的用户名登录。我尝试实现了以下建议的方法:Allow only one concurrent login per user in django appHow can I detect multiple logins into a Django web application from different locations?,但问题是这两种方法在开发服务器上都有效,但在谷歌应用程序引擎上不起作用。所以我转而使用django-signals作为我的替代方法。我创建了一个post_login信号,将每个登录用户的用户名存储在数据库的Visitor表中。每次注销时,其他信号post_logout都会将用户从此table.The中移除。代码部分如下:

代码语言:javascript
复制
#signals.py
post_login = django.dispatch.Signal(providing_args=['request', 'user'])
post_logout = django.dispatch.Signal(providing_args=['request', 'user'])
#models.py
def login_handler(sender,user, **kwargs):
    try:
        result=Visitor.objects.get(user=user)
        print "You already have login with your name"
    except:
        visitor=Visitor()
        visitor.user=user
        visitor.save()
post_login.connect(login_handler)


def logout_handler(sender,user, **kwargs):
    try:
        result=Visitor.objects.get(user=user)
        result.delete()
    except:
        return False
post_logout.connect(logout_handler)

#django.contrib.auth.__init.py__
def login(request):
 :
 user_logged_in.send(sender=user.__class__, request=request, user=user)
  post_login.send(sender=None,request=request, user=user)

def logout(request):
:
user_logged_out.send(sender=user.__class__, request=request, user=user)
post_logout.send(sender=None,request=request, user=user)

请注意,当我在google app engine上运行我的应用程序时,我得到了以下错误。错误:服务器错误服务器遇到错误,无法完成您的请求。

此外,我无法登录到应用程序的管理部分。请帮助我找到正确的方法来实现这个要求,或者让我知道我哪里做错了。感谢您耐心阅读这个庞大的问题描述:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-23 02:18:49

1.

您不应该像现在这样编辑django框架。请勿触摸django.contrib.auth中的文件

如果您希望在某人登录后发送信号,请在您登录该人的视图中发送信号

2.

不确定您的实际错误是什么,因为您没有显示它(如果这是一个开发环境,设置DEBUG = True以获得更好的堆栈跟踪),但通过查看您的代码,您没有在信号处理程序中正确获取参数。它应该看起来更像这样:

代码语言:javascript
复制
def login_handler(sender, **kwargs):
    try:
        user = kwargs['user']
        request = kwargs['request']
        result=Visitor.objects.get(user=user)
        print "You already have login with your name"
    except:
        visitor=Visitor()
        visitor.user=user
        visitor.save()
post_login.connect(login_handler)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5055608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档