Python请求+;Django更改URL中的参数结构
基本上,我已经通过带有单个q参数的GoogleBooksAPI完成了Python请求和Django搜索功能(如下面的链接所示) 在提交表单之后,我得到了json中的DICT列表,就像我想要的一样,使用这个参数,我得到了json数据,其中appers关键字“Hobbit”和URL如下所示 但是当我尝试添加Google Books API提供的特殊关键字时, 标题、作者、出版者、主题等 试图搜索它,我得到了一个URL &intitle=&Inuthor=&inpublisher=&isbn=&lccn=&oclc= 它只返回单个q参数的数据,因为GoogleBooksAPI中特殊关键字的正确URL如下所示 +作者:凯斯+主题:某个主题 正如你们看到的那个样,正确的URL得到了标志 +反对&和:反对= 因此,我想要得到的正确URL如下所示 +intite:something+inuthor:something+inpublisher:something+isbn:something+lccn:something+oclc:something 我的问题是,如何改变这种结构,使之符合GoogleBooksAPI的要求 试图在python请求文档中找到这一点,但没有任何相关内容 views.pyPython请求+;Django更改URL中的参数结构,python,django,python-requests,Python,Django,Python Requests,基本上,我已经通过带有单个q参数的GoogleBooksAPI完成了Python请求和Django搜索功能(如下面的链接所示) 在提交表单之后,我得到了json中的DICT列表,就像我想要的一样,使用这个参数,我得到了json数据,其中appers关键字“Hobbit”和URL如下所示 但是当我尝试添加Google Books API提供的特殊关键字时, 标题、作者、出版者、主题等 试图搜索它,我得到了一个URL &intitle=&Inuthor=&inpublisher=&isbn=&l
defapi(请求):
书籍={
“intitle”:“intitle”,
“inuthor”:“inuthor”,
“inpublisher”:“inpublisher”,
“主题”:“主题”,
‘isbn’:‘isbn’,
“lccn”:“lccn”,
“oclc”:“oclc”
}
如果request.GET中有“books”:
books=请求。获取['books']
url='1〕https://www.googleapis.com/books/v1/volumes?q=%s%册
response=requests.get(url)
books=response.json()
印刷(打字(书籍))
将open(“data_file.json”,“w”)作为write_文件:
json.dump(书籍、写入文件)
返回呈现(请求'books/api.html',{'books':books})
您必须手动构造查询字符串。假设您的请求如下所示,您可以如下构造查询字符串:
def api(request):
# ...
if 'books' in request.GET:
books = request.GET['books']
query_dict = request.GET.copy()
del query_dict['books']
query = '+'.join([books, *['{}:{}'.format(k, v) for k, v in query_dict.items()]])
url = 'https://www.googleapis.com/books/v1/volumes?q=' + query
# ...
最终的google查询要求books作为第一个参数。因此,我们需要从
request.GET
中提取图书价值。现在,要获取所有其他值,我们需要删除books键。但是,request.GET
是一个对象,它是不可变的。要将其转换为可变对象,可以使用request.GET.copy()
(它创建了一个可变的副本)。Hey@Keyur,我的请求实际上现在看起来是这样的,但我想要的是更改每个符号&To+和每个=To:当您提交表单时,您将获得我在回答中提到的url。与更改url本身相比,使用url很容易构造为所需字符串。好的,但是您能解释一下copy的用法吗?我不明白答案中添加的解释。代码的其余部分将保持不变。你所做的应该有用。