慕课网-Django入门到进阶-更适合Python小白的系统课程-第3章Django中的Template模板-3-10可选观看:项目练习模板引擎

第3章 Django中的Template模板

3-10 可选观看:项目练习模板引擎

1.在项目 simple_api_server_test 下,新建目录 templates

2.在项目 simple_api_server_test 下目录 simple_api_server_test,修改文件 settings.py,添加模板路径

#添加模板路径
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

3.在项目 simple_api_server_test 下目录 templates,添加文件 music.html、movie.html、book.html

4.在项目 simple_api_server_test 下目录 simple_api_server_test,修改文件 urls.py,修改 music 路径

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

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

urlpatterns = [
    path('music/<str:musicname>', Music.as_view(), name=''),
    path('movie', Movie.as_view(), name=''),
    path('book', Book.as_view(), name=''),
]

5.在项目 simple_api_server_test 下目录 get_by_douban,修改文件 views.py,修改类 Music

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

import requests

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

# Create your views here.

class Music(View):
    TEMPLATE = 'music.html'
    DOUBAN_MUSIC_API = 'https://api.douban.com/v2/music/search?q={0}'

    def get(self, request, musicname):
        url = self.DOUBAN_MUSIC_API.format(musicname)
        response = requests.get(url)
        data = response.json()
        data['search_name'] = musicname
        return render(request, self.TEMPLATE, context=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})

6.在项目 simple_api_server_test 下目录 templates,修改文件 music.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="referrer" content="no-referrer" />
    <title>Title</title>
</head>
<body>
    <h3>音乐:{{search_name}}</h3>
    <div>共{{count}}条数据</div>
    <ul>
        {% for music in musics %}
            <li>
                <p>歌名:{{music.title}};演唱:{% for person in music.author %} {{person.name}} {{endfor}}</p>
                <a href="{{music.alt}}"><img src="{{music.image}}" style="width:10%" alt="" /></a>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

7.在项目 simple_api_server_test 下目录 simple_api_server_test,修改文件 urls.py,修改 movie 路径 

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

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

urlpatterns = [
    path('music/<str:musicname>', Music.as_view(), name=''),
    path('movie/<str:moviename>', Movie.as_view(), name=''),
    path('book', Book.as_view(), name=''),
]

8.在项目 simple_api_server_test 下目录 get_by_douban,修改文件 views.py,修改类 Movie

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

import requests

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

# Create your views here.

class Music(View):
    TEMPLATE = 'music.html'
    DOUBAN_MUSIC_API = 'https://api.douban.com/v2/music/search?q={0}'

    def get(self, request, musicname):
        url = self.DOUBAN_MUSIC_API.format(musicname)
        response = requests.get(url)
        data = response.json()
        data['search_name'] = musicname
        return render(request, self.TEMPLATE, context=data)

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

    def get(self, request, moviename):
        url = self.DOUBAN_MOVIE_API.format(moviename)
        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()
        data['search_name'] = moviename
        return render(request, self.TEMPLATE, 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})

9.在项目 simple_api_server_test 下目录 templates,修改文件 movie.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="referrer" content="no-referrer" />
    <title></title>
</head>
<body>
    <h3>电影:{{search_name}}</h3>
    <div>共{{count}}条数据</div>
    <ul>
        {% for video in subjects %}
            <li>
                <p>电影:{{video.title}};演员:{% for person in video.casts %} {{person.name}} {{endfor}}</p>
                <a href="{{video.alt}}"><img src="{{video.images.small}}" style="width:10%" alt="" /></a>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

10.在项目 simple_api_server_test 下目录 simple_api_server_test,修改文件 urls.py,修改 book 路径 

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

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

urlpatterns = [
    path('music/<str:musicname>', Music.as_view(), name=''),
    path('movie/<str:moviename>', Movie.as_view(), name=''),
    path('book/<str:bookname>', Book.as_view(), name=''),
]

11.在项目 simple_api_server_test 下目录 get_by_douban,修改文件 views.py,修改类 Book

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

import requests

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

# Create your views here.

class Music(View):
    TEMPLATE = 'music.html'
    DOUBAN_MUSIC_API = 'https://api.douban.com/v2/music/search?q={0}'

    def get(self, request, musicname):
        url = self.DOUBAN_MUSIC_API.format(musicname)
        response = requests.get(url)
        data = response.json()
        data['search_name'] = musicname
        return render(request, self.TEMPLATE, context=data)

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

    def get(self, request, moviename):
        url = self.DOUBAN_MOVIE_API.format(moviename)
        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()
        data['search_name'] = moviename
        return render(request, self.TEMPLATE, data)

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

    def get(self, request, bookname):
        url = self.DOUBAN_BOOK_API.format(bookname)
        response = requests.get(url)
        data = response.json()
        data["search_name"] = bookname
        return render(request, self.TEMPLATE, data)

12.在项目 simple_api_server_test 下目录 templates,修改文件 book.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="referrer" content="no-referrer" />
    <title>Title</title>
</head>
<body>
    <h3>书籍:{{search_name}}</h3>
    <div>共{{count}}条数据</div>
    <ul>
        {% for book in books %}
            <li>
                <p>书名:{{book.title}};作者:{% for person in book.author %} {{person.name}} {{endfor}};出版日期:{{book.pubdate}};共{{book.pages}}页;</p>
                <p>价格:{{book.price}}</p>
                <p>作者介绍:{{book.author_intro}}</p>
                <a href="{{book.alt}}"><img src="{{book.image}}" style="width:10%" alt="" /></a>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

posted on 2020-01-26 12:38  herisson_pan  阅读(13)  评论(0)    收藏  举报

导航