Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求+;Django更改URL中的参数结构_Python_Django_Python Requests - Fatal编程技术网

Python请求+;Django更改URL中的参数结构

Python请求+;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

基本上,我已经通过带有单个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.py

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的用法吗?我不明白答案中添加的解释。代码的其余部分将保持不变。你所做的应该有用。