33/crawler

/urls.py
import os
import random
from django.http import JsonResponse
from django.shortcuts import render
from django.conf import settings
from django.core.cache import cache

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
import json

import json
import requests
from bs4 import BeautifulSoup

from .models import Crawler, News, NewsCategory, NewsCategoryRelation, User
from .utils import get_category_list, get_article_url

# Create your views here.

def index(request):
# 查询数据库,获取所有的分类
category_list = get_category_list()
# 查询数据库,获取所有的新闻
news_list = News.objects.all()
# 随机获取一个新闻
news = random.choice(news_list)
# 清理缓存
cache.clear()
# 清理数据库缓存
cache.delete_pattern('news*')
# 返回结果
return render(request, 'index.html', {'category_list': category_list, 'news': news})

@csrf_exempt
def upload_file(request):
# 获取文件的类型
file_type = request.POST.get('file_type')
# 获取文件名
filename = request.POST.get('filename')
# 获取文件
file = request.FILES.get('file')
# 获取文件路径
file_path = os.path.join(settings.MEDIA_ROOT, 'upload', filename)
# 文件写入
with open(file_path, 'wb') as f:
for chunk in file.chunks():
f.write(chunk)
# 获取文件名的类型
file_name = os.path.basename(file_path)
# 判断文件的类型
if file_type == 'pdf':
# 获取文件的md5值
file_md5 = get_md5(file_path)
# 获取文件名
file_name = str(file_md5) + '.pdf'
# 将文件移动到指定的文件夹中
new_file_path = os.path.join(settings.MEDIA_ROOT, 'upload', file_name)
# 移动文件
default_storage.delete(file_path)
default_storage.save(new_file_path, ContentFile(open(file_path, 'rb').read()))
# 删除旧的文件路径
os.remove(file_path)
# 删除文件的路径
os.remove(new_file_path)
# 获取文件的md5值
file_md5 = get_md5(file_path)
# 上传文件到服务器的地址
file_url = 'http://127.0.0.1:8000/upload/' + file_name
else:
file_name = os.path.basename(file_path)
file_url = 'http://127.0.0.1:8000/upload/' + file_name
# 返回结果
return JsonResponse({'file_url': file_url})

# 获取文件的md5值
def get_md5(file_path):
import hashlib
with open(file_path, 'rb') as f:
md5obj = hashlib.md5()
md5obj.update(f.read())
return md5obj.hexdigest()

# 获取指定文件夹下所有文件的md5值
def get_md5s(file_path):
import hashlib
md5s = []
for root, dirs, files in os.walk(file_path):
for file in files:
file_path = os.path.join(root, file)
with open(file_path, 'rb') as f:
md5obj = hashlib.md5()
md5obj.update(f.read())
md5s.append(md5obj.hexdigest())
return md5s

# 获取新闻
def get_news(request):
# 查询数据库,获取所有的新闻
news_list = News.objects.all()
# 返回结果
return JsonResponse({'news_list': list(news_list.values())})

# 获取分类
def get_category(request):
# 查询数据库,获取所有的分类
category_list = get_category_list()
# 返回结果
return JsonResponse({'category_list': list(category_list.values())})

# 获取文章url
def get_article_url(request):
# 获取新闻分类id
category_id = request.GET.get('category_id')
# 查询数据库,获取新闻分类
category = NewsCategory.objects.get(id=category_id)
# 获取新闻分类下的新闻
news_list = News.objects.filter(category=category)
# 返回结果
return JsonResponse({'news_list': list(news_list.values())})

/urls.py
import json
import requests
from bs4 import BeautifulSoup

from django.conf import settings
from django.core.cache import cache

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile

from .models import Crawler, News, NewsCategory, NewsCategoryRelation, User
from .utils import get_category_list, get_article_url, get_md5, get_md5s

# Create your views here.

def index(request):
# 查询数据库,获取所有的分类
category_list = get_category_list()
# 查询数据库,获取所有的新闻
news_list = News.objects.all()
# 随机获取一个新闻
news = random.choice(news_list)
# 清理缓存
cache.clear()
# 清理数据库缓存
cache.delete_pattern('news*')
# 返回结果
return render(request, 'index.html', {'category_list': category_list, 'news': news})

@csrf_exempt
def upload_file(request):
# 获取文件的类型
file_type = request.POST