4

我有一个 django 问题。我想将来自浏览器或我的 django 服务器上的业务逻辑的数据发送到另一个 django 服务器或只是相同的服务器但不同的端口,以处理请求。我能怎么做?我曾尝试使用套接字来实现,但似乎没有用。

以下是我的代码:
接受客户的请求:
def im(请求):
    userp = 无
    尝试:
        userp = UserProfile.objects.get(user = request.user)
    除了:
        经过
    如果不是用户:
        返回 HttpResponse("错误")
    打印'111'
    如果 request.method == "GET":
        导入json
        msg = json.loads(request.GET.get('msg'))
        尝试:
            msg['from_id'] = userp.id
            if msg.get('type', '') == 'sync': #页面同步消息
                msg['to_id'] = userp.id
            push_msg(味精)
            返回 HttpResponse("成功")
        除了:
            返回 HttpResponse("错误")
        #return HttpResponseRedirect("http://127.0.0.1:9000/on_message")
    返回 HttpResponse("错误")

helper.py:push_msg:
def push_msg(味精):
    打印'111'
    参数 = str(msg)
    headers = {"Content-type":"application/x-www-form-urlencoded", "Accept":"text/plain"}
    conn = httplib.HTTPConnection("http://127.0.0.1:9000/push_msg/")
    conn.request("POST", "/cgi-bin/query", params, headers)

url(r'^push_msg/$', 'chat.events.on_message')
events.py:on_message
def on_message(请求):
    msg = request.POST.get('msg')
    味精=评估(味精)
    尝试:
        打印'处理消息'
        from_id = int(msg['from_id'])
        to_id = int(msg['to_id'])
        user_to = UserProfile.objects.get(id = msg['to_id'])
        django_socketio.broadcast_channel(msg, user_to.channel)
        如果 msg.get('type', '') == 'chat':
            ct = Chat.objects.send_msg(from_id=from_id,to_id=to_id,content=data['content'],type=1)
            ct.read = 1
            ct.save()
    除了:
        经过
4

2 回答 2

2

使用 python requests 模块来做这个请求比 httplib2 有更多的功能,而且很容易使用http://docs.python-requests.org/

于 2012-08-25T05:55:31.923 回答
0

我已经使用 httplib2 来完成类似的事情。从httplib2文档尝试:

import httplib2
import urllib
data = {'name': 'fred', 'address': '123 shady lane'}
body = urllib.urlencode(data)
h = httplib2.Http()
resp, content = h.request("http://example.com", method="POST", body=body)

然后,您应该能够在您的第二个 django 服务器中处理POST,并将适当的结果返回给第一个 django 服务器。

于 2012-08-25T05:28:09.000 回答