2016-01-20 32 views
0

我是python的新手。我創建了一個基於gui的應用程序來將值插入到數據庫中。 我已經創建了一個Rest api來處理數據庫操作。我如何追加與python中創建的json的api URL。通過python發送json數據到php api

app.py

from Tkinter import * 
import tkMessageBox 
import json 
import requests 
from urllib import urlopen 


top = Tk() 
L1 = Label(top, text="Title") 
L1.pack(side = TOP) 
E1 = Entry(top, bd =5) 
E1.pack(side = TOP) 


L2 = Label(top, text="Author") 
L2.pack(side = TOP) 
E2 = Entry(top, bd =5) 
E2.pack(side = TOP) 

L3 = Label(top, text="Body") 
L3.pack(side = TOP) 
E3 = Entry(top, bd =5) 
E3.pack(side = TOP) 
input = E2.get(); 

def callfunc(): 
data = {"author": E2.get(), 
    "body" : E3.get(), 
    "title" : E1.get()} 
data_json = json.dumps(data) 

# r = requests.get('http://localhost/spritle/api.php?action=get_uses') 
#url = "http://localhost/spritle/api.php?action=insert_list&data_json=" 
# 
url = urlopen("http://localhost/spritle/api.php?action=insert_list&data_json="%data_json).read() 

tkMessageBox.showinfo("Result",data_json) 
SubmitButton = Button(text="Submit", fg="White", bg="#0094FF", 
        font=("Grobold", 10), command = callfunc) 
SubmitButton.pack() 


top.mainloop() 

錯誤:

TypeError: not all arguments converted during string formatting 

而與data_json附加網址我得到的錯誤?

回答

0

上有串格式化的錯誤:

交換這樣的:

"http://localhost/spritle/api.php?action=insert_list&data_json="%data_json 

通過這樣的:

"http://localhost/spritle/api.php?action=insert_list&data_json=" + data_json 

或:

"http://localhost/spritle/api.php?action=insert_list&data_json={}".format(data_json) 

以下語句是等同:

"Python with " + "PHP" 
"Python with %s" % "PHP" 
"Python with {}".format("PHP") 
"Python with {lang}".format(lang="PHP") 

此外,我不認爲通過URL發送像這樣的JSON數據是一個好主意。至少應該對數據進行編碼。

+0

json.dumps將對json數據進行編碼。 – user3041822

+0

這不起作用 – user3041822

0

您正在嘗試使用%操作格式化字符串,你需要把%s佔位符到字符串:

"http://localhost/spritle/api.php?action=insert_list&data_json=%s" % data_json 

或使用另一個答案建議其他方法。

關於數據傳輸 - 您絕對需要使用POST請求,而不是GET。 檢查this, using urllib2this, using requests