私はWebSocketを使用してchatbotを作成します。各ユーザーは独自のアカウントを持つことができます。私はDjangoのバックエンドとフロントエンドをAngularで書いています。現時点ではメッセージオブジェクトに問題があります。私はバックエンドでこれを手に入れます:DjangoとAngularのWebソケットを使ってユーザーIDでメッセージを送受信するには、どうすればよいですか?
django_1 | django.db.utils.IntegrityError: null value in column "user_id" violates not-null constraint
django_1 | DETAIL: Failing row contains (212, {"message":"Hello"}, null).
フロントエンドからユーザーIDを送信しないように見えます。たぶん私はこのようなものを送るべきでしょう{"message":"Hello", "id":1}
?私はそれをどのように解決することができ、どのように正しく行われるべきなのだろうか?
export class HomeComponent {
response: string;
response2: string;
constructor(
private chatService: ChatService,
private router: Router,
private http: Http,
) {
chatService.messages.subscribe(msg => {
this.response = msg.message;
console.log("Response from backend: " + msg.message);
});
}
private message = {
message: 'this is a test message'
}
sendMsg() {
console.log('new message from client to websocket: ', this.message);
this.chatService.messages.next(this.message);
return this.message.message;
}
send(msg) {
this.message.message = msg;
this.sendMsg();
}
login() {
return this.http.get('/data',)
.map(response => response.json())
.subscribe(response2 => this.response2 = response2);
}
}
@Component({
selector: 'key-up3',
template: `
<input #box (keyup.enter)="keyup7.emit(box.value)">
<p>{{value}}</p>
`
})
export class KeyUpComponent_v3 {
@Output() keyup7 = new EventEmitter<string>();
}
UPDATE:
@channel_session_user_from_http
def msg_consumer(message):
text = message.content.get('text')
Message.objects.create(
message=text,
)
Group("chat").send({'text': text})
@channel_session_user
def ws_connect(message):
# Accept the connection
message.reply_channel.send({"accept": True})
# Add to the chat group
Group("chat").add(message.reply_channel)
message.reply_channel.send({
"text": json.dumps({
'message': 'Welcome'
})
})
@channel_session_user
def ws_receive(message):
message.reply_channel.send({"accept": True})
print("Backend received message: " + message.content['text'])
Message.objects.create(
message = message.content['text'],
)
Channel("chat").send({
"text": json.dumps({
'message': 'Can we start?'
})
})
@channel_session_user
def ws_disconnect(message):
Group("chat").discard(message.reply_channel)
これは私の角度成分の一部である:これは私のバックエンドの消費者は
class Message(models.Model):
user = models.ForeignKey('auth.User')
message = models.CharField(max_length=200)
です:
私のDjangoのメッセージモデルは、このように見えます 私が解決した瞬間それはバックエンドで以下のように表示されます。
デフws_receive(メッセージ):
message.reply_channel.send({"accept": True})
print("Backend received message: " + message.content['text'])
data = json.loads(message.content['text'])
Message.objects.create(
user_id=data['user_id'],
message = data['message'],
)
私はこの '{" message ":" Hello "、" id ":1}'のように本文を送信する必要があることを理解していますか?それとも別のやり方でやるべきか? – wahtdbogh
私はあなたのエラーがあなたが送信しなければならないチャンネルまたはjsonボディに関連しているかどうかはわかりません。しかし、あなたのモデル 'Message'は' user'を 'is_null = True'のない外部キーフィールドとして宣言します。デフォルトで 'is_null = False'であるため、' Message'インスタンスを作成するときには、ユーザインスタンス(またはユーザpk)を指定する必要があります。 – Antwane