#ARC-16 Add postgresql driver and add async queries

remotes/origin/setup
Mukhtar 10 years ago
parent d97543382e
commit 813ca37ec1
  1. 10
      archilance/views.py
  2. 13
      archilance/views.py~
  3. 39
      chat/migrations/0003_auto_20160629_1914.py
  4. 5
      chat/models.py
  5. 22
      chat/models.py~
  6. 101
      chat/testapp.py
  7. 67
      templates/chat_test.html
  8. 70
      templates/chat_test.html~

@ -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})

@ -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})

@ -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'),
),
]

@ -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

@ -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 = 'Сообщения'

@ -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()

@ -5,26 +5,65 @@
<title>Title</title>
</head>
<body>
<h1>Всем привет , дети мои!!</h1>
<h1>Демо чат</h1>
<h2>{{ order}}</h2>
<div id="message_chat">
{% for msg in order.order_messages.all %}
<h3> {{msg}} <b>Автор: {{msg.sender.get_full_name}}</b></h3>
{% endfor%}
</div>
<form method="post" id="message_form">
<textarea id="message" name="message"></textarea>
<input type="submit" />
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var url = 'ws://127.0.0.1:8888/chat';
var socket = new WebSocket(url);
socket.onopen = function(){
console.log("Соединение установлено");
socket.send("start");
}
window.onload = function(){
var socket = new SocketHandler();
var form = document.getElementById('message_form');
form.onsubmit = function(e){
e.preventDefault();
console.log('submit click');
socket.send_message(form);
}
};
var SocketHandler = function(){
var url = 'ws://127.0.0.1:8888/chat';
var sock = new WebSocket(url);
var intervalId;
sock.onopen = function(){
console.log("Start connect");
intervalId = setInterval(function(){sock.send('{"dummy": 1}');}, 150000);
};
sock.onmessage = function(event){
console.log(event.data);
message = JSON.parse(event.data);
var inbox = document.getElementById('message_chat');
inbox.innerHTML += '<h2>' + message.msg + '</h2>';
};
this.send_message = function(form){
var elements = form.elements;
var data = {};
var i=0;
for(var i; i< elements.length; i++){
if (elements[i].name == 'message') {
data[elements[i].name] = elements[i].value;
}
}
sock.send(JSON.stringify(data));
var textareaMessage = document.getElementById("message");
textareaMessage.value = "";
}
socket.onmessage = function (event) {
console.log(event.data);
alert(event.data);
var data = JSON.parse(event.data);
console.log(data);
}
});
</script>
</body>

@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Демо чат</h1>
<h2>{{ order}}</h2>
<div id="message_chat">
{% for msg in order.order_messages.all %}
<h3> {{msg}} </h3>
{% endfor%}
</div>
<form method="post" id="message_form">
<textarea id="message" name="message"></textarea>
<input type="submit" />
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script type="text/javascript">
window.onload = function(){
var socket = new SocketHandler();
var form = document.getElementById('message_form');
form.onsubmit = function(e){
e.preventDefault();
console.log('submit click');
socket.send_message(form);
}
};
var SocketHandler = function(){
var url = 'ws://127.0.0.1:8888/chat';
var sock = new WebSocket(url);
var intervalId;
sock.onopen = function(){
console.log("Start connect");
intervalId = setInterval(function(){sock.send('{"dummy": 1}');}, 150000);
};
sock.onmessage = function(event){
console.log(event.data);
message = JSON.parse(event.data);
var inbox = document.getElementById('message_chat');
inbox.innerHTML += '<h2>' + message.msg + '</h2>';
};
this.send_message = function(form){
var elements = form.elements;
var data = {};
var i=0;
for(var i; i< elements.length; i++){
if (elements[i].name == 'message') {
data[elements[i].name] = elements[i].value;
}
}
sock.send(JSON.stringify(data));
var textareaMessage = document.getElementById("message");
textareaMessage.value = "";
}
}
</script>
</body>
</html>
Loading…
Cancel
Save