Sleekxmpp与Django不工作?

时间:2014-12-29 06:09:32

标签: django python-2.7 xmpp django-rest-framework ejabberd

正在使用带有python的sleekxmpp来发送消息并使其正常工作。现在我需要在django中实现相同的功能,为我的移动应用程序创建web api。

当我在django中实现该代码时,它没有连接到ejabberd server.xmpp = self.aaaa(jid,密码,接收者,消息),这个函数没有通过任何值。

以下是我在django中的代码:

class SendMessageView(APIView,sleekxmpp.ClientXMPP):

    def aaaa(self,jid, password, recipient, message):
        print "dddddddddddddddddddddddddddddddd",jid,password
        sleekxmpp.ClientXMPP.__init__(self, jid, password)
        self.recipient = recipient
        self.msg = message
        self.add_event_handler("session_start", self.start)

    def start(self, event):
        self.send_presence()
        try:
            self.get_roster()
        except IqError as err:
            logging.error('There was an error getting the roster')
            logging.error(err.iq['error']['condition'])
            self.disconnect()
        except IqTimeout:
            logging.error('Server is taking too long to respond')
            self.disconnect()

        self.send_message(mto=self.recipient,mbody=self.msg,mtype='chat')
        self.disconnect(wait=True)

    def post(self,request,format=None):
        serializer=SendMessageSerializer(request.DATA)
        jid=request.DATA.get('sender')
        password=request.DATA.get('password')
        receiver=request.DATA.get('receiver')
        message=request.DATA.get('message')
        print "ddddddddddddd",jid,password,receiver,message
        xmpp=self.aaaa(jid,password,receiver,message)
        print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",xmpp
        xmpp.register_plugin('xep_0030')
        xmpp.register_plugin('xep_0199')
        if xmpp.connect():
            xmpp.process(block=False)
            print "Connected"
        else:
            print "Not Connected"

显示的错误是:

AttributeError at /chat-message/send/
'NoneType' object has no attribute 'register_plugin'
Request Method: POST
Request URL:    ******/chat-message/send/
Django Version: 1.6
Exception Type: AttributeError
Exception Value:    
'NoneType' object has no attribute 'register_plugin'
Exception Location: /home/ntech/projects/project_path/apps/chats/views.py in post, line 58
Python Executable:  /home/ntech/Virtualenv/project_path/bin/python
Python Version: 2.7.6
Python Path:    
['/home/ntech/projects/chatline',
 '/home/ntech/Virtualenv/project_path/lib/python2.7',
 '/home/ntech/Virtualenv/project_path/lib/python2.7/plat-i386-linux-gnu',
 '/home/ntech/Virtualenv/project_path/lib/python2.7/lib-tk',
 '/home/ntech/Virtualenv/project_path/lib/python2.7/lib-old',
 '/home/ntech/Virtualenv/project_path/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-i386-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/home/ntech/Virtualenv/project_path/local/lib/python2.7/site-packages',
 '/home/ntech/Virtualenv/project_path/lib/python2.7/site-packages']
Server time:    Mon, 29 Dec 2014 06:02:10 +0000

1 个答案:

答案 0 :(得分:1)

您的方法aaaa始终返回None。尝试使用self

此处多重继承也不是一个好主意。试试aggregation

class SendMessageView(APIView):

    def aaaa(self,jid, password, recipient, message):
        ...
        self.xmpp = sleekxmpp.ClientXMPP(jid, password)
        ...

    def post(self,request,format=None):
        ...    
        self.aaaa(jid,password,receiver,message)

        self.xmpp.register_plugin('xep_0030')
        self.xmpp.register_plugin('xep_0199')
        ...

甚至更好:

class SendMessageView(APIView):

    def get_xmpp(self,jid, password, recipient, message):
        ...
        return sleekxmpp.ClientXMPP(jid, password)
        ...

    def post(self,request,format=None):
        ...    
        xmpp = self.get_xmpp(jid,password,receiver,message)

        xmpp.register_plugin('xep_0030')
        xmpp.register_plugin('xep_0199')
        ...