Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django保存和加载消息_Javascript_Django_Django Models - Fatal编程技术网

Javascript Django保存和加载消息

Javascript Django保存和加载消息,javascript,django,django-models,Javascript,Django,Django Models,我正在使用django制作聊天应用程序,我遵循youtube和文档中的教程,我遵循他们所说的一切,但我仍然得到了错误 chat/ __init__.py consumers.py routing.py templates/ urls.py views.py 这是我在consumers.py中的代码 这是my room.html中的脚本,我已经在重新连接websocket.js中有了脚本 <script> var roomNam

我正在使用django制作聊天应用程序,我遵循youtube和文档中的教程,我遵循他们所说的一切,但我仍然得到了错误

chat/
    __init__.py
    consumers.py
    routing.py
    templates/
    urls.py
    views.py
这是我在consumers.py中的代码

这是my room.html中的脚本,我已经在重新连接websocket.js中有了脚本

<script>
    var roomName = {{ room_name_json }};
    var username = {{ username }};

    var chatSocket = new ReconnectingWebSocket(
        'ws://' + window.location.host +
        '/ws/chat/' + roomName + '/');

    chatSocket.onmessage = function(e) {
        var data = JSON.parse(e.data);
        var message = data['message'];
        var author = message['author'];

        var msgListTag = document.createElement('li');
        var pTag = document.createElement('p');
        pTag.textContent = message.content;

        if (author === username){
            msgListTag.className='sent';
        }
        else{
            msgListTag.className = 'replies';
        }
        msgListTag.appendChild(pTag);
        document.querySelector('#chat-log').appendChild(msgListTag);
    };

    chatSocket.onclose = function(e) {
        console.error('Chat socket closed unexpectedly');
    };


    document.querySelector('#chat-message-input').onkeyup = function(e) {
        if (e.keyCode === 13) {  // enter, return
            document.querySelector('#chat-message-submit').click();
        }
    };

    document.querySelector('#chat-message-submit').onclick = function(e) {
        var messageInputDom = document.getElementById('#chat-message-input');
        var message = messageInputDom.value;
        chatSocket.send(JSON.stringify({
            'command': 'new_message',
            'message': message,
            'from': username
        }));
        messageInputDom.value = '';
    };
</script>

    class ChatConsumer(WebsocketConsumer):
        def fetch_messages(self, data):
            messages = Message.last_10_messages()
            content = {
                'messages': self.messages_to_json(messages)
            }
            self.send_message(content)
        def new_message(self, data):
            author = data['from']
            author_user =User.objects.filter(username=author)[0]
            message = Message.objects.create(
                author=author_user,
                content=data['message']
            )
            content = {
                'command': 'new_message',
                'message': self.messages_to_json(message)
            }
            return  self.send_chat_message(content)

        def messages_to_json(self, messages):
            result = []
            for message in messages:
                result.append(self.message_to_json(message))
            return result
        def message_to_json(self, message):
            return {
                'author':message.author.username,
                'content': message.content,
                'timestamp': str(message.timestamp)
            }
        commands = {
            'fetch_messages': fetch_messages,
            'new_message': new_message
        }
        def connect(self):
            self.room_name = self.scope['url_route']['kwargs']['room_name']
            self.room_group_name = 'chat_%s' % self.room_name
            async_to_sync(self.channel_layer.group_add)(
                self.room_group_name,
                self.channel_name
            )
            self.accept()

        def disconnect(self, close_code):
            async_to_sync(self.channel_layer.group_discard)(
                self.room_group_name,
                self.channel_name
            )
        def receive(self, text_data):
            data = json.loads(text_data)
            self.commands[data['command']](self, data)


        def send_chat_message(self, message):
            async_to_sync(self.channel_layer.group_send)(
                self.room_group_name,
                {
                    'type': 'chat_message',
                    'message': message
                }
            )

        def send_message(self, message):
            self.send(text_data=json.dump(message))

        def chat_message(self, event):
            message = event['message']
            self.send(text_data=json.dump(message))
我的模特

class Message(models.Model):
    author = models.ForeignKey(User, related_name='author_messages', on_delete=models.CASCADE)
    content = models.TextField(null=True, blank=True)
    timestamp = models.DateTimeField(auto_now_add=True,null=True, blank=True)

    def __str__(self):
        return self.author.username

    def last_10_messages(self):
        return Message.objects.order_by('-timestamp').all()[:10]
这就是我得到的错误

我从这一行得到错误信息

def messages_to_json(self, messages):
    result = []
    for message in messages:
        result.append(self.message_to_json(message))
    return result
对于消息中的消息:

当我尝试这个时更新

def messages_to_json(self, messages):
    content = {
        'command': 'new_message',
        'message': self.message_to_json(messages)
    }
我得到这个错误


您的消息实例不可iterable,因此您不能在for循环中使用它,它是从模型继承的消息模型的实例。模型不可iterable,因此您可以简单地使用message\u to\u json函数:

 content = {
                'command': 'new_message',
                'message': self.message_to_json(message)
            }

当我尝试回答def messages_to_json(self,messages):content={'command':'new_message','message':self.messages_to_json(messages)}dump()缺少1个必需的位置参数:“fp”WebSocket DISCONNECT/ws/chat/lobb/[127.0.0.1:31538]iget此错误使用json.dumps()而不是json.dump(),您可以共享教程链接吗?这是youtube教程
 content = {
                'command': 'new_message',
                'message': self.message_to_json(message)
            }