1、新建项目和app。
流程简单,不再详细说明。不知道可以看前几篇文章。
2、准备材料
(1)、movie.html
(2)、电影接口:http://api.map.baidu.com/telematics/v3/movie?qt=hot_movie&location=郑州市&ak=TueGDhCvwI6fOrQnLM0qmXxY9N0OkOiQ&output=json
(3)、定位接口:https://api.map.baidu.com/location/ip?ak=T9NhMLzkmysEGY82fG7vayxnBeCTV26m
3、原movie.html模板展示
4、最终效果展示。(没有图片的原因是百度的这个接口图片地址加了防盗链)。
5、项目结构,将movie.html模板文件放置templates文件夹下。
6、要求
①需要使用IP定位接口,默认展示当前城市的最新电影信息。
②在输入框中输入想查询的城市,点击搜索显示结果。
7、实现思路
①根据定位接口,在进入页面时根据当前访问ip进行定位,获取当前城市。
②根据电影接口,利用当前城市,获取当前城市最新电影信息。
③第一次访问页面时get请求,再进行搜索时是采用get请求还是post请求。
8、代码实现
①在urls.py文件中编写路由
from django.contrib import admin
from django.urls import path
from movieapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index', views.index),
]
②、在views.py文件中编写业务逻辑。(此逻辑使用get请求提交form表单。即同get类型的请求处理不同的逻辑。)
from django.shortcuts import render
import requests
def index(request):
# 使用ip定位接口,当第一次访问页面时,根据ip定位的城市,解析这个城市的最新电影信息
try:
city = request.GET['city'] #通过获取搜索框的城市,若抛出异常则表明是第一次进入页面,反之,则是进行搜索。
except:
ip_url = 'https://api.map.baidu.com/location/ip?ak=T9NhMLzkmysEGY82fG7vayxnBeCTV26m'
result = requests.get(ip_url).json()
city = result['content']['address_detail']['city'] #解析ip定位接口返回的城市定位信息
movie_url = 'http://api.map.baidu.com/telematics/v3/movie?qt=hot_movie&location{}&ak=TueGDhCvwI6fOrQnLM0qmXxY9N0OkOiQ&output=json'.format(city)
movie_data = requests.get(movie_url).json() #解析电影接口返回的最新电影信息
if movie_data['status'] != 'Success': #根据接口响应状态判断是否请求成功
context = {'city': city, 'error': '请求出现错误'} #出现错误时传递给模板错误信息
else:
movies = movie_data['result']['movie']
if movies: #如果电影数据存在,将其传递给模板
context = {'city': city, 'movies': movies}
else:
context = {'city': city, 'error': '当前城市没有查询到最新电影'}
return render(request, template_name='movie.html', context=context)
③修改movie.html模板文件。
a、修改form表单的提交地址。
b、修改展示数据的div。并加上一个for循环。遍历数据并展示。
④运行查看
a、进入首页根据当前ip定位的城市最新电影信息。
b、使用搜索框搜索展示的电影信息。