同步操作将从 Gitee 极速下载/FastAPI 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
WebSocketException and add it to docs (#5629)
from typing import Unionfrom fastapi import (Cookie,Depends,FastAPI,Query,WebSocket,WebSocketException,status,)from fastapi.responses import HTMLResponseapp = FastAPI()html = """<!DOCTYPE html><html><head><title>Chat</title></head><body><h1>WebSocket Chat</h1><form action="" onsubmit="sendMessage(event)"><label>Item ID: <input type="text" id="itemId" autocomplete="off" value="foo"/></label><label>Token: <input type="text" id="token" autocomplete="off" value="some-key-token"/></label><button onclick="connect(event)">Connect</button><hr><label>Message: <input type="text" id="messageText" autocomplete="off"/></label><button>Send</button></form><ul id='messages'></ul><script>var ws = null;function connect(event) {var itemId = document.getElementById("itemId")var token = document.getElementById("token")ws = new WebSocket("ws://localhost:8000/items/" + itemId.value + "/ws?token=" + token.value);ws.onmessage = function(event) {var messages = document.getElementById('messages')var message = document.createElement('li')var content = document.createTextNode(event.data)message.appendChild(content)messages.appendChild(message)};event.preventDefault()}function sendMessage(event) {var input = document.getElementById("messageText")ws.send(input.value)input.value = ''event.preventDefault()}</script></body></html>"""@app.get("/")async def get():return HTMLResponse(html)async def get_cookie_or_token(websocket: WebSocket,session: Union[str, None] = Cookie(default=None),token: Union[str, None] = Query(default=None),):if session is None and token is None:raise WebSocketException(code=status.WS_1008_POLICY_VIOLATION)return session or token@app.websocket("/items/{item_id}/ws")async def websocket_endpoint(websocket: WebSocket,item_id: str,q: Union[int, None] = None,cookie_or_token: str = Depends(get_cookie_or_token),):await websocket.accept()while True:data = await websocket.receive_text()await websocket.send_text(f"Session cookie or query token value is: {cookie_or_token}")if q is not None:await websocket.send_text(f"Query parameter q is: {q}")await websocket.send_text(f"Message text was: {data}, for item ID: {item_id}")
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。