- 1 创建django项目和所需数据库及应用
- 2 修改setting.py配置文件
- 3 修改WebExpress/urls.py配置
- 4 修改picture/urls.py配置
- 5 修改picture/models.py配置
- 6 添加picture/baidu_picture.py文件
- 7 修改picture/views.py
- 8 添加picture/templates/picture_list.html文件
- 9 数据库迁移并生成数据表
- 10 运行项目
- 11 页面显示
参考视频链接:
https://www.bilibili.com/video/BV1Tu411r7qx?p=43
# 1 创建数据库WebExpress mysql -uroot -p123456 create database WebExpress default charset utf8; # 2 创建项目project django-admin startproject WebExpress # 3 创建应用app01 cd project python manage.py startapp picture2 修改setting.py配置文件
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'picture.apps.PictureConfig',
]
DATABASES = https://blog.csdn.net/wang_ze6456/article/details/{
'default': https://blog.csdn.net/wang_ze6456/article/details/{
'ENGINE': 'django.db.backends.mysql',
'NAME': 'WebExpress',
'USER': 'root',
'PASSWORD': 'Huawei@123',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
3 修改WebExpress/urls.py配置
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('picture/', include('picture.urls')),
]
4 修改picture/urls.py配置
from . import views
from django.urls import path
urlpatterns = [
path('list/', views.picture_list, name='picture_list'),
]
5 修改picture/models.py配置
from django.db import models
class PictureList(models.Model):
picture_name = models.CharField(max_length=200)
query_word = models.CharField(max_length=200)
picture_url = models.CharField(max_length=200)
6 添加picture/baidu_picture.py文件
# -*- coding:utf8 -*-
import json
import requests
import random
from . import models
class BaiduPictureDownload:
def __init__(self, query_word):
self.query_word = query_word
self.user_agent = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
]
self.headers = https://blog.csdn.net/wang_ze6456/article/details/{
"User-Agent": random.choice(self.user_agent),
"sec-ch-ua-platform": "macOS",
"X-Requested-With": "XMLHttpRequest",
"Sec-Fetch-Site": "same-origin",
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"',
}
def response(self):
url = "https://image.baidu.com/search/acjson?tn=resultjson_com&"
"logid=8570046982900849301&"
"ipn=rj&"
"ct=201326592&"
"is=&fp=result&fr=&"
"word=%s"
"queryWord=%s"
"cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&"
"z=0&ic=0&hd=0&latest=0©right=0&s=&se=&tab=&"
"width=&height=&face=0&istype=2&qc=&nc=1&"
"expermode=&nojc=&isAsync=&pn=100&rn=100&gsm=3c&1654497570412=" %(self.query_word, self.query_word)
resp = requests.get(url=url, headers=self.headers)
return json.loads(resp.text)
def result(self):
json_info = self.response().get('data')
for picture_info in json_info:
if picture_info.get('thumbURL') and picture_info.get('fromPageTitleEnc'):
data = https://blog.csdn.net/wang_ze6456/article/details/{
'picture_url': picture_info.get('thumbURL'),
'query_word': self.query_word,
'picture_name': picture_info.get('fromPageTitleEnc')
}
if not models.PictureList.objects.filter(**data).first():
models.PictureList.objects.create(**data)
if __name__ == '__main__':
response = BaiduPictureDownload('娜扎')
response.result()
7 修改picture/views.py
from django.shortcuts import render
from .baidu_picture import BaiduPictureDownload
from . import models
from django.utils.safestring import mark_safe
def picture_list(request):
search_data = request.GET.get('q', "")
if search_data:
try:
models.PictureList.objects.all().delete()
response = BaiduPictureDownload(search_data)
response.result()
except Exception:
pass
page = int(request.GET.get('page', 1))
page_size = 5
start_page = (page - 1) * page_size
end_page = page * page_size
queryset = models.PictureList.objects.all()[start_page: end_page]
#数据总条数
total_count = models.PictureList.objects.all().count()
# 总页码
total_page_count, div = divmod(total_count, page_size)
if div:
total_page_count = total_page_count + 1
# 计算出当前页,前5页后5页
plus = 3
if total_page_count <= (2 * plus + 1):
# 数据库中的数据比较少,都没有达到11页
first_5_pages = 1
last_5_pages = total_page_count
else:
# 数据库中数据较多时
# 当前页小于5
if page <= plus:
first_5_pages = 1
last_5_pages = 2 * plus
else:
# 当前页 > 5
# 当前页+5 > 总页面
if (page + plus) > total_page_count:
first_5_pages = total_page_count - 2 * plus
last_5_pages = total_page_count
else:
first_5_pages = page - plus
last_5_pages = page + plus
page_str_list = []
# ul开始标签
ul_body_start_string = '- '
page_str_list.append(ul_body_start_string)
# 首页页码
home_page = '
- 首页 '.format(1) page_str_list.append(home_page) # 上一页 if page > 1: previous = '
- 上一页 '.format(page - 1 ) else: previous = '
- 上一页 '.format(1) page_str_list.append(previous) # 翻页主体 for i in range(first_5_pages, last_5_pages + 1): if i == page: ele = '
- {} '.format(i,i) else: ele = '
- {} '.format(i,i) page_str_list.append(ele) # 下一页 if page < total_page_count: nextpage = '
- 下一页 '.format(page + 1) else: nextpage = '
- 下一页 '.format(total_page_count) page_str_list.append(nextpage) # 尾页 last_page = '
- 尾页 '.format(total_page_count) page_str_list.append(last_page) # 搜索框 search_string = """
- """ page_str_list.append(search_string) # ul开始标签 ul_body_end_string = '
Picture List
https://blog.csdn.net/wang_ze6456/article/details/{{ queryset.0.query_word }}
ID
图片展示
图片名称
{% for i in queryset %}
{ forloop.counter }}-->
https://blog.csdn.net/wang_ze6456/article/details/{{ i.id }}

https://blog.csdn.net/wang_ze6456/article/details/{{ i.picture_name }}
{% endfor %}
https://blog.csdn.net/wang_ze6456/article/details/{{ page_string }}
')
9 数据库迁移并生成数据表
python manage.py makemigrations python manage.py migrate10 运行项目
python manage.py runserver 0.0.0.0:800011 页面显示
http://127.0.0.1:8000/picture/list/?page=2



