私はチャット アプリケーションを作成しようとしています。ここにいくつかの設計上の考えがあります:
Django がメインの Web サイト サービスを提供しています。
Sockjs-tornado はチャットを提供し、その間に redis をセットアップしたいと思います。
sockjs-tornado がチャットでメッセージを受信すると、それを処理して他の接続されたクライアントに送信し、さらに redis に配置するため、Django はこのメッセージを永続的なデータベースに保存できます。redis の pubsub 機能を使用する必要があることはわかっています。tornado (brukva ライブラリ) でセットアップする方法は知っていますが、django で redis のチャンネルを購読するにはどうすればよいですか? djangoでメッセージを受信してデータベースに保存できますか? あなたはなにか考えはありますか?
1635 次
1 に答える
7
sockjs の使用方法はわかりませんが、この例では、django モデル
#in tornadoに保存する方法を示しています
import brukva
import tornado.web
import tornado.websocket
c = brukva.Client()
c.connect()
class MessagesHandler(tornado.websoket.WebsocketHandler):
def open(self):
#....
def handle_request(self, response):
pass
def on_message(self, message):
#....
c.publish(self.channel, json.dumps({
"sender": self.sender_name,
"text": message,
}))
http_client = tornado.httpclient.AsyncHTTPClient()
request = tornado.httpclient.HTTPRequest(
'/to/django_project/url/chat_save_base/',
method="POST",
body=urllib.urlencode({
"message": message.encode("utf-8"),
"sender": self.sender.name,
})
http_client.fetch(request, self.handle_request)
#django_url で
url(r'/to/django_project/url/chat_save_base/','app.my_view')
#私の見解
from django.views.decorators.csrf import csrf_exempt
from messages.models import Message
@csrf_exempt
def my_view(request):
message_text = request.POST.get("message")
sender = User.objects.get(id=request.POST.get("sender_id"))
message = Message()
message.text = message_text
message.sender_id = sender_id
message.save()
追加情報のソース: http://habrahabr.ru/post/160123/
于 2013-03-03T23:52:28.457 に答える