python - 如何摆脱这个错误 405 ?(烧瓶/Py)
问题描述
我想用 Flask 和 socket.io 制作一个聊天应用程序,但是每当我点击“发送”时,我都会收到错误 405。我一直在努力使这项工作,但它不会(只是一个用户名和消息的基本东西)。这是错误的内容:
“方法不允许 请求的 URL 不允许该方法。”
我真的不知道出了什么问题。当我检查我的 cmd 时,我看到:
POST / HTTP/1.1" 405 362 0.001000 127.0.0.1 - - [2021 年 5 月 28 日 16:44:29] "GET /socket.io/?EIO=3&transport=websocket&sid=7392cec39d5841bcaa7d7c8faaa1b6fb HTTP/1.1" 200 0 3.13483
主要.py:
from flask import Flask, render_template #Importation du modèle flask et de render_template
from flask_socketio import SocketIO #Importation du modèle socketio
app = Flask(__name__)
app.config['SECRET_KEY'] =b'\xba!\xe3];\xce\xe6V}\x1d\xee\xda\x03\x8b\xbfS\xb9\x0fE\x8f\x15\x98O\x92' #Clé secrète afin de garder la partie client sécurisée
socketio = SocketIO(app)
@app.route('/')
def index(): #Définition de la fonction index
return render_template('index.html') #Affichage de la page index.html
def messageReceived(methods=['GET', 'POST']): #Définition de la fonction message reçu
print('Message reçu')
@socketio.on('my event')
def handle_my_custom_event(json, methods=['GET', 'POST']): #Définition de la fonction message envoyé
print('Mon événement a été reçu: ' + str(json))
socketio.emit('Ma réponse', json, callback=messageReceived) #Émission du message
if __name__ == '__main__': #Boucle permettant à l'application web de continuer de fonctionner à l'infinie
socketio.run(app, debug=True)
索引.html:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Chat Flask</title>
<link rel="stylesheet" href="{{url_for('static', filename='index.css')}}">
</head>
<body>
<p id="para1" style='color: #9cd374;font-size: 30px;'>Pas de message...</p>
<div class="message_holder"></div>
<form action="" method="POST">
<div class="inputs">
<input type="text" id="username" placeholder="Nom d'utilisateur"/>
<input type="text" id="message" placeholder="Message"/>
<input type="image" id="send" src="static/send.png"/>
<!-- Utilisation direct du <style> car le css ne fonctionne pas pour les entrées -->
<style>
input[type="email"] {
text-align: center;
}
input[type="text"] {
text-align: right;
}
input[type="tel"] {
text-align: left;
}
body {
text-align: center;
}
label {
display: block;
margin-bottom: 30px;
}
</style>
</div>
</form>
<!-- Script JS nécessaire pour utiliser socketIO -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<script type="text/javascript">
var socket;
$(document).ready(function(){
socket = io.connect('http://' + document.domain + ':' + location.port + '/chat');
socket.on('connect', function() {
socket.emit('joined', {});
});
socket.on('status', function(data) {
$('#chat').val($('#chat').val() + '<' + data.msg + '>\n');
$('#chat').scrollTop($('#chat')[0].scrollHeight);
});
socket.on('message', function(data) {
$('#chat').val($('#chat').val() + data.msg + '\n');
$('#chat').scrollTop($('#chat')[0].scrollHeight);
});
$('#text').keypress(function(e) {
var code = e.keyCode || e.which;
if (code == 13) {
text = $('#text').val();
$('#text').val('');
socket.emit('text', {msg: text});
}
});
});
</script>
</body>
</html>
解决方案
看来您正在使用此博客:https ://codeburst.io/building-your-first-chat-application-using-flask-in-7-minutes-f98de4adfa5d
首先,您应该尝试在不做任何修改的情况下遵循指南。当您有一个可行的解决方案时,您可以一个一个地进行小的调整,并始终检查它是否仍然有效,直到您有信心使用该技术。
我第一眼看到的一些问题:
io.connect('http://' + document.domain + ':' + location.port + '/chat');
但是在您的服务器上,您已经定义了它没有路径,所以您应该只使用域+端口:'http://' + document.domain + ':' + location.port
- 您已经定义了在服务器端收听的消息类型:
@socketio.on('my event')
,但是您在 JavaScript 中发送不同的事件:socket.emit('joined', {});
- 另一个方向也是如此。在服务器上,您使用 type 向客户端发送事件
socketio.emit('Ma réponse', ...
,但在客户端,您正在侦听以下事件:socket.on('status', ...
推荐阅读
- acl - Varnish:多个 IP 与使用波浪号的 ACL 进行比较
- xquery - 检查 XQuery 查询的类型
- mysql - MySQL Workbench 无法连接到服务器 (Windows)
- javascript - 如何在 Angular 9 中使用 Browser-Update.org?
- python - 如何保存随机输出以在 python 的另一个函数中使用它
- ios - AVAggregateAssetDownloadTask 在进入后台时停止发送更新(可能停止下载)
- xml - 在任何地方使用自动化读取 xml 文件中的特定值
- c++ - 使用类模板“迭代器”需要模板参数
- python - Python被精确的子字符串分割?
- javascript - 执行上下文已被销毁 Puppeteer