Я пытаюсь настроить простой python сервер для чтения и хранения входящих пользовательских данных из клиентского запроса POST. Клиент отправляет данные в формате Json, и я хочу, чтобы сервер добавил эту информацию в существующий файл userDataBase. json.
Код клиента:
import os
import sys
import json
import requests
userData = {}
userData.update({
'email':'bob@gmail.com',
'password':'12345',
'payment_ref' : 'a34fqw4'
})
# userData = json.dumps(userData)
print(userData)
url = "<address>:4758/"
response = requests.post(url,json=userData)
Код сервера
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import os
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
with open('gameData.json') as file:
self.wfile.write(file.read().encode())
def do_POST(self):
self.data_string = self.rfile.read(int(self.headers['Content-Length']))
self.send_response(200)
self.end_headers()
data = self.data_string.decode()
if os.path.isfile('userDataBase.json') == False:
print('Making New File')
userData = {}
userData["users"] = []
with open('userDataBase.json','w') as outfile:
json.dump(userData,outfile)
print('Appending userDataBase File')
with open('userDataBase.json','r') as file:
userData = json.load(file)
userData["users"].append(data)
print(userData)
with open('userDataBase.json','w') as file:
json.dump(userData,file,indent=4)
print('Stated Server Listening on Port 4758...')
httpd = HTTPServer(('', 4758), SimpleHTTPRequestHandler)
httpd.serve_forever()
Это почти работает, но результат выглядит следующим образом:
ubuntu@address:~$ cat userDataBase.json
{
"users": [
"{\"email\": \"jeff@gmail.com\", \"password\": \"12345\", \"payment_ref\": \"a34fqw4\"}",
"{\"email\": \"bob@gmail.com\", \"password\": \"12345\", \"payment_ref\": \"a34fqw4\"}"
]
}
Но я хочу, чтобы он выглядел так:
{
"users": [
{"email": "jeff@gmail.com", "password": "12345", "payment_ref": "a34fqw4"},
{"email": "bob@gmail.com", "password": "12345", "payment_ref": "a34fqw4"}
]
}
Я читайте вокруг, и я думаю, что проблема связана с тем, что я дважды кодирую входящие данные Json. Но я не могу решить свою проблему.