Cómo enviar una solicitud de un servidor django a otro servidor

Tengo un problema con Django. Quiero enviar datos que son del navegador o la lógica comercial en mi servidor Django a otro servidor Django o simplemente al mismo servidor pero con un puerto diferente, para manejar la solicitud. ¿Como lo puedo hacer? He intentado lograr el uso de socket, pero parece que no funciona.

El siguiente es mi código: acepte la solicitud del cliente: def im (solicitud): userp = Ninguno intente: userp = UserProfile.objects.get (user = request.user) excepto: pasar si no userp: return HttpResponse ("error") imprimir '111' if request.method == "GET": import json msg = json.loads(request.GET.get('msg')) try: msg['from_id'] = userp.id if msg.get(' type', '') == 'sync': #页面同步消息 msg['to_id'] = userp.id push_msg(msg) return HttpResponse("éxito") excepto: return HttpResponse("error") #return HttpResponseRedirect( "http://127.0.0.1:9000/on_message") devuelve HttpResponse("error") helper.py:push_msg: def push_msg(msg): print '111' params = str(msg) headers = {"Tipo de contenido ":"aplicación/x-www-form-urlencoded", "Aceptar":"texto/sin formato"} conn = httplib.HTTPConnection("http://127.0.0.1:9000/push_msg/") conn.request(" POST", "/cgi-bin/query", parámetros, encabezados) url(r'^push_msg/$', 'chat.events.on_message') events.py:on_message def on_message(solicitud): msg = request.POST .get('msg') msg ​​= eval(msg) try: print 'manejar mensaje es' 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 ) if 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() excepto: pasar 

preguntado el 25 de agosto de 12 a las 06:08

2 Respuestas

use el módulo de solicitudes de python para hacer estas solicitudes tiene más funciones que httplib2 y es muy fácil de usar http://docs.python-requests.org/

Respondido 25 ago 12, 06:08

He usado httplib2 para lograr algo similar. Desde el httplib2 prueba de documentación:

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)

A continuación, debería ser capaz de manejar el PUBLICAR en su segundo servidor django y devolver los resultados apropiados al primer servidor django.

Respondido 25 ago 12, 06:08

¡Gracias! Probaré tus caminos. En realidad, el servidor que maneja la solicitud anterior lo ejecuta django socketio (cmd:runserver_socketio), y el servidor original lo ejecuta la línea de comando 'runserver' o 'runfcgi' que se usa para manejar la solicitud común. Es decir, quiero que el servidor socketio maneje la mensajería instantánea, pero la solicitud la transmite otro servidor que acepta todas las solicitudes del navegador. Y, el navegador está conectado al servidor socketio, y quiero que el servidor envíe directamente la respuesta al navegador. ¿Procesaste problemas similares antes? Gracias, espero su respuesta. - liao

Nunca he usado django socketio antes. Solo he usado runserver con diferentes puertos o apache para pruebas locales. - golpe

Otra pregunta, ¿la url "url(r'^push_msg/$', 'chat.events.on_message')" tiene problemas? - liao

No parece. ¿Tienes problemas con eso? - golpe

Quiero decir que todas las solicitudes son manejadas por views.py, ¿puedo usar event.py? - liao

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.