diff --git a/archilance/views.py b/archilance/views.py index a4fa976..5cad4fc 100644 --- a/archilance/views.py +++ b/archilance/views.py @@ -1,7 +1,13 @@ -from django.views.generic import TemplateView +from django.views.generic import TemplateView, View +from django.shortcuts import render +from projects.models import Order class HomeTemplateView(TemplateView): template_name = 'home.html' -class TestChatTemplateView(TemplateView): +class TestChatTemplateView(View): template_name = 'chat_test.html' + + def get(self,request,*args,**kwargs): + order = Order.objects.get(pk=6) + return render(request, self.template_name, {'order': order}) diff --git a/archilance/views.py~ b/archilance/views.py~ new file mode 100644 index 0000000..5cad4fc --- /dev/null +++ b/archilance/views.py~ @@ -0,0 +1,13 @@ +from django.views.generic import TemplateView, View +from django.shortcuts import render +from projects.models import Order + +class HomeTemplateView(TemplateView): + template_name = 'home.html' + +class TestChatTemplateView(View): + template_name = 'chat_test.html' + + def get(self,request,*args,**kwargs): + order = Order.objects.get(pk=6) + return render(request, self.template_name, {'order': order}) diff --git a/chat/migrations/0003_auto_20160629_1914.py b/chat/migrations/0003_auto_20160629_1914.py new file mode 100644 index 0000000..571da68 --- /dev/null +++ b/chat/migrations/0003_auto_20160629_1914.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-06-29 16:14 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('chat', '0002_auto_20160608_1555'), + ] + + operations = [ + migrations.RemoveField( + model_name='message', + name='user', + ), + migrations.AddField( + model_name='message', + name='recipent', + field=models.ForeignKey(default=5, on_delete=django.db.models.deletion.CASCADE, related_name='recipent_messages', to=settings.AUTH_USER_MODEL), + preserve_default=False, + ), + migrations.AddField( + model_name='message', + name='sender', + field=models.ForeignKey(default=4, on_delete=django.db.models.deletion.CASCADE, related_name='sender_messages', to=settings.AUTH_USER_MODEL), + preserve_default=False, + ), + migrations.AlterField( + model_name='message', + name='order', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='order_messages', to='projects.Order'), + ), + ] diff --git a/chat/models.py b/chat/models.py index 7d9e21e..fb29a4d 100644 --- a/chat/models.py +++ b/chat/models.py @@ -8,8 +8,9 @@ from users.models import User class Message(models.Model): text = models.TextField() created = models.DateTimeField(default=timezone.now) - order = models.ForeignKey(Order, related_name='messages') - user = models.ForeignKey(User, related_name='messages') + order = models.ForeignKey(Order, related_name='order_messages') + sender = models.ForeignKey(User, related_name='sender_messages') + recipent = models.ForeignKey(User, related_name='recipent_messages') def __str__(self): return self.text diff --git a/chat/models.py~ b/chat/models.py~ new file mode 100644 index 0000000..fb29a4d --- /dev/null +++ b/chat/models.py~ @@ -0,0 +1,22 @@ +from django.db import models +from django.utils import timezone + +from projects.models import Order +from users.models import User + + +class Message(models.Model): + text = models.TextField() + created = models.DateTimeField(default=timezone.now) + order = models.ForeignKey(Order, related_name='order_messages') + sender = models.ForeignKey(User, related_name='sender_messages') + recipent = models.ForeignKey(User, related_name='recipent_messages') + + def __str__(self): + return self.text + + class Meta: + verbose_name = 'Сообщение' + verbose_name_plural = 'Сообщения' + + diff --git a/chat/testapp.py b/chat/testapp.py index b89c0d8..dc79397 100644 --- a/chat/testapp.py +++ b/chat/testapp.py @@ -1,6 +1,97 @@ +import os.path +from tornado import gen, web, websocket, escape, options +from tornado.ioloop import IOLoop +from tornado.httpserver import HTTPServer +from tornado.options import parse_command_line + import psycopg2 -conn = psycopg2.connect(database="archilance", user="postgres", password="postgres", host="localhost") -cursor = conn.cursor() -cursor.execute("SELECT 1") -rows = cursor.fetchall() -print(rows) +import momoko + + +settings = { + 'cookie_secret': '__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__', + 'template_path': os.path.join(os.path.dirname(__file__), 'templates'), + 'static_path': os.path.join(os.path.dirname(__file__), 'static'), + 'login_url': '/login', + 'xsrf_cookies': True, + 'debug': True, + 'autoreload': True, + 'server_traceback': True, +} + +class BaseHandler(web.RequestHandler): + @property + def db(self): + return self.application.db + + +class TutorialHandler(websocket.WebSocketHandler): + + @property + def db(self): + return self.application.db + + waiters = set() + + def open(self, *args, **kwargs): + self.waiters.add(self) + # cursor = self.db.execute("SELECT * FROM users_user WHERE id=2") + # data = cursor.fetchone() + print({'hello': 'test'}) + + @gen.coroutine + def on_message(self, message): + parsed = escape.json_decode(message) + if 'dummy' in parsed: + return + + insert_sql = "INSERT INTO chat_message (id,text,created,order_id, user_id) VALUES (DEFAULT,'{0}',NOW(),6,4)".format(str(parsed['message'])) + + yield self.db.execute(insert_sql) + + cursor = yield self.db.execute("SELECT * FROM chat_message") + data = cursor.fetchall() + + for waiter in self.waiters: + waiter.write_message({'msg': parsed['message']}) + + + def check_origin(self, origin): + return True + # @gen.coroutine + # def get(self): + # cursor = yield self.db.execute("SELECT * FROM users_user WHERE id=2") + # data = cursor.fetchone() + # print(data[0]) + # self.finish() + + +class Application(web.Application): + + def __init__(self): + handlers = [ + (r"/chat", TutorialHandler), + ] + super().__init__(handlers=handlers, **settings) + + +if __name__ == '__main__': + parse_command_line() + application = Application() + ioloop = IOLoop.instance() + + application.db = momoko.Pool( + dsn='dbname=archilance user=postgres password=postgres host=localhost', + size=1, + ioloop=ioloop, + ) + future = application.db.connect() + ioloop.add_future(future, lambda f: ioloop.stop()) + ioloop.start() + future.result() + + http_server = HTTPServer(application) + http_server.listen(8888, 'localhost') + ioloop.start() + + diff --git a/templates/chat_test.html b/templates/chat_test.html index 41fe191..c39479f 100644 --- a/templates/chat_test.html +++ b/templates/chat_test.html @@ -5,26 +5,65 @@ Title -

Всем привет , дети мои!!

+

Демо чат

+

{{ order}}

+ + +
+ {% for msg in order.order_messages.all %} +

{{msg}} Автор: {{msg.sender.get_full_name}}

+ {% endfor%} +
+ +
+ + +
diff --git a/templates/chat_test.html~ b/templates/chat_test.html~ new file mode 100644 index 0000000..b75b4ff --- /dev/null +++ b/templates/chat_test.html~ @@ -0,0 +1,70 @@ + + + + + Title + + +

Демо чат

+

{{ order}}

+ + +
+ {% for msg in order.order_messages.all %} +

{{msg}}

+ {% endfor%} +
+ +
+ + +
+ + + + +