Обработка javascript запросов на сервере python

180
26 сентября 2019, 05:20

Имеется простой вебсокет сервер на python.

import socket 
import json 
 
dictionary = {'Hello':'World'} 
dictionary_json = json.dumps(hardware) 
 
def parse_request(request): 
	try: 
		parsed = request.split() 
		method = parsed[0] 
		url = parsed[1] 
		return (method, url) 
	except: 
		pass 
 
def generate_headers(method, url): 
	if not method == "GET": 
		return ('HTTP/1.1 405 Method not allowed\n\n', 405) 
	return ('HTTP/1.1 200 OK\n\n', 200) 
 
def generate_content(code, url): 
	if code == 404: 
		return '<h1>404</h1><p>Not found</p>' 
	if code == 405: 
		return '<h1>405</h1><p>Method not allowed</p>' 
	return dictionary_json 
 
def generate_respose(request): 
	method, url = parse_request(request) 
	headers, code = generate_headers(method, url) 
	body = generate_content(code, url) 
	return (headers + body).encode() 
 
 
def run_server(): 
	server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
	server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
	server_socket.bind(('localhost', 8080)) 
	server_socket.listen() 
	while True: 
		client_socket, addr = server_socket.accept() 
		request = client_socket.recv(1024) 
		print(request) 
		response = generate_respose(request.decode('utf-8')) 
		print(response) 
		client_socket.sendall(response) 
		client_socket.close()

Если открыть браузер и перейти по localhost:8080, то выведется содержимое dictionary_json на экране. Я бы хотел, чтобы содержимое словаря выводилось по запросу javascript. То есть простая html страничка с кнопкой, по нажатию которой выводилось бы на экране содержимое словаря.

Вопрос собственно в том как можно это реализовать самым простым образом? Я так понимаю нужно использовать ajax запросы и тд, но тогда как их обрабатывать сервером?

Answer 1

Имеется простой вебсокет сервер на python.

import socket

распространённая ошибка, это не "WebSocket".

если вам действительно хочется использовать WS - читайте дальше.

Внимание, рекомендуемая библиотека, а так же приведённый код мной не проверялись, это первая попавшаяся ссылка из гугла (https://pypi.org/project/websockets/).

следующий ниже текст является вольным переводом части статьи "Getting started", а именно раздела "Browser-based example".

Requirements

Python ≥ 3.4(лучше Python ≥ 3.6).

Installation

установите зависимости следующей командой

pip install websockets

Browser-based example

это пример как запустить WebSocket сервер и подключиться к нему из браузера

запустите этот скрипт из консоли

#!/usr/bin/env python
# WS server that sends messages at random intervals
import asyncio
import datetime
import random
import websockets
async def time(websocket, path):
    while True:
        now = datetime.datetime.utcnow().isoformat() + 'Z'
        await websocket.send(now)
        await asyncio.sleep(random.random() * 3)
start_server = websockets.serve(time, '127.0.0.1', 5678)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

затем создайте index.html файл со следующим содержанием и откройте его в браузере (пр. от пер.: попробуйте просто перетащить файл в браузер)

<!DOCTYPE html>
<html>
    <head>
        <title>WebSocket demo</title>
    </head>
    <body>
        <script>
            var ws = new WebSocket("ws://127.0.0.1:5678/"),
                messages = document.createElement('ul');
            ws.onmessage = function (event) {
                var messages = document.getElementsByTagName('ul')[0],
                    message = document.createElement('li'),
                    content = document.createTextNode(event.data);
                message.appendChild(content);
                messages.appendChild(message);
            };
            document.body.appendChild(messages);
        </script>
    </body>
</html>
READ ALSO
Разработка android программ на web языках

Разработка android программ на web языках

Вопрос пожалуй даже слишком тривиален, но в интернете ясного ответа я не нашелТак вот собственно и вопрос: Можно ли писать программы под андроид...

156
API VK account.lookupContacts Access denied [закрыт]

API VK account.lookupContacts Access denied [закрыт]

не могу получить информацию по запросу VK API

173
имитировать клик submit

имитировать клик submit

подскажите, что-то туплю, как при клике на кнопки +- имитировать кнопку submit&

195