Python API调用如何嵌入动态变量?Django搜索栏开发问题
Django 搜索栏嵌入OMDB API的正确实现方式
现有代码的核心问题
- 普通Python字符串中的
{movie_title}不会自动替换为实际变量值,会被当成字面文本直接传给API,根本无法匹配到对应电影 - 代码中出现的
&是HTML页面的转义字符,直接写在Python请求URL中会导致API端参数解析错误:API会把amp;t当成独立参数名,完全无法识别你传递的电影标题搜索条件,正确的参数分隔符为普通& - 手动硬拼接URL时,如果搜索内容包含空格、特殊符号,会因为未做URL编码导致请求失败
推荐实现方案
优先使用requests库自带的params参数传递请求参数,该方法会自动完成URL编码、参数拼接,避免手动拼接的各类问题,参考代码:
import requests from django.shortcuts import render def searchbar(request): search_result = None if request.method == "GET": movie_title = request.GET.get("movie_title") # 判空处理,避免无搜索关键词时发送无效API请求 if movie_title: api_response = requests.get( "http://www.omdbapi.com/", params={ "apikey": "9a63b7fd", "t": movie_title } ) search_result = api_response.json() return render(request, "search_result.html", {"searched_movie": search_result})
手动拼接字符串的实现方式(不推荐)
如果需要手动拼接完整URL字符串,必须使用f-string开启变量插值,同时修正转义字符问题:
if movie_title: searched_movie = requests.get( f'http://www.omdbapi.com/?apikey=9a63b7fd&t={movie_title}' )
注意:该写法无法自动处理搜索词中的特殊字符,遇到带空格、标点的搜索内容时,可能出现API返回无效结果的问题
内容的提问来源于stack exchange,提问作者Almuntasir Abir
相关产品推荐
相关产品推荐

