我是python的新手。我创建了一个基于gui的应用程序来将值插入数据库。 我创建了一个Rest api来处理db操作。如何使用在python中创建的json附加api URL。
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 :(得分: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数据是一个好主意。您应该至少对数据进行编码。
答案 1 :(得分:0)
您正尝试使用%
运算符格式化字符串,并且需要将%s
占位符放入字符串中:
"http://localhost/spritle/api.php?action=insert_list&data_json=%s" % data_json
或者使用其他答案中建议的其他方法。
关于数据传输 - 你肯定需要使用POST请求而不是GET。 查看this, using urllib2和this, using requests。