慕课网-Django入门到进阶-更适合Python小白的系统课程-第2章Django中的路由与视图-2.7可选观看:项目练习_url与views

第2章 Django中的路由与视图

2.7 可选观看:项目练习 _url 与 views

练习项目:simple api server

什么是 API 接口服务器

1.API 接口是一些预先定义的函数,每个接口对一类资源(Restful)或者说对接一项功能,通过服务器的形式承载起来

2.前后端分离,html、js、css 不在接口服务器中存在

API 服务器常用的传输数据类型

目前使用 json 格式比较流行

项目

创建中转接口服务器,通过访问我们的中转接口服务器,获取到豆瓣开源的音乐、电影、数据信息。

项目基础架构

所用知识点

1.Django2 中 url 和 views 模块

2.Requests http 模块的使用

3.初探 restful 规范写法

创建项目

django-admin startproject simple_api_server_test
cd simple_api_server_test
python manage.py startapp get_by_douban

安装 requests

pip install requests

 

实例

1.进入项目下目录 simple_api_server_test,修改文件 settings.py,修改编码、时区和注册应用

#注册应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'simple_api_server_test',
]
 
#修改编码
LANGUAGE_CODE = 'zh-hans'
 
#修改时区

2.进入项目下目录 get_by_douban,添加文件 urls.py,添加应用的路由

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from django.urls import path
from .views import Music,Movie,Book

urlpatterns = [
    path('music', Music.as_view(), name=''),
    path('movie', Movie.as_view(), name=''),
    path('book', Book.as_view(), name=''),
]

3.进入项目下目录 simple_api_server_test,修改文件 urls.py,添加 app 应用的路由

#!/usr/bin/env python
# -*- coding:utf-8 -*-

"""simple_api_server_test URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include
from get_by_douban import urls as douban_urls

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(douban_urls))
]

4.进入项目下目录 get_by_douban,修改文件 views.py,添加一个电影类、音乐类、图书类

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import requests

from django.views.generic import View
from django.http import JsonResponse

# Create your views here.

class Music(View):

    DOUBAN_MUSIC_API = 'https://api.douban.com/v2/music/search?q={0}'

    def get(self, request):
        music_name = request.GET.get('musicname', '')
        if not music_name:
            return JsonResponse({'errcode':-1, 'errmsg':'音乐名称不能为空'})
        url = self.DOUBAN_MUSIC_API.format(music_name)
        response = requests.get(url)
        data = response.json()
        return JsonResponse({'errcode':0, 'errmsg':'成功', 'data':data})

class Movie(View):
    DOUBAN_MOVIE_API = 'https://api.douban.com/v2/movie/search?q={0}'

    def get(self, request):
        movie_name = request.GET.get('moviename', '')

        if not movie_name:
            return JsonResponse({'errcode': -1, 'errmsg': '电影名称不能为空'})

        url = self.DOUBAN_MOVIE_API.format(movie_name)

        try:
            response = requests.get(url)
        except Exception as e:
            return JsonResponse({'errcode':-1, 'errmsg':str(e)})

        if response.status_code != 200:
            return JsonResponse({'errcode':-1, 'errmsg':'请求豆瓣异常'})

        data = response.json()

        return JsonResponse({'errcode': 0, 'errmsg': '成功', 'data': data})

class Book(View):
    DOUBAN_BOOK_API = 'https://api.douban.com/v2/book/search?q={0}'

    def get(self, request):
        book_name = request.GET.get('bookname', '')
        if not book_name:
            return JsonResponse({'errcode': -1, 'errmsg': '图书名称不能为空'})
        url = self.DOUBAN_BOOK_API.format(book_name)
        response = requests.get(url)
        data = response.json()
        return JsonResponse({'errcode': 0, 'errmsg': '成功', 'data': data})

5.思考,三个类内容代码类似,如何整合成一个

6.通过 ipython 测试豆瓣接口是否有效

posted on 2020-01-15 05:17  herisson_pan  阅读(10)  评论(0)    收藏  举报

导航