博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅
1、项目介绍
技术栈:
Python语言、Django框架 、MySQL数据库、Vue框架、Scrapy爬虫、Echarts可视化、懂车帝网数据、HTML
2、项目界面
(1)汽车详情信息页面
(2)汽车数据分析—销量走势、销量排名曲线、投诉走势等等
(3)首页----按条件选车
(4)数据可视化分析----降价排行榜、汽车品牌分布、价格分布分析
(5)销量榜单分析
(6)差评榜单—质量、服务、其他
(7)汽车详情页面
(8)注册登录
(9)后台数据管理
3、项目说明
项目功能模块介绍
1. 汽车详情信息页面
- 功能:展示汽车的详细信息,包括车辆参数、配置、图片等。
- 技术实现:通过 Django 框架从 MySQL 数据库中查询汽车的详细信息,并通过 Vue 框架在前端展示。
2. 汽车数据分析
- 功能:
- 展示汽车销量走势、销量排名曲线。
- 分析投诉走势等数据。
- 技术实现:使用 Scrapy 爬虫从懂车帝网等平台采集数据,存储到 MySQL 数据库中。通过 Django 后端处理数据,结合 Echarts 进行可视化展示。
3. 首页——按条件选车
- 功能:用户可以根据品牌、价格、车型等条件筛选汽车。
- 技术实现:前端使用 Vue 框架实现筛选功能,后端通过 Django 框架从数据库中查询符合条件的汽车数据。
4. 数据可视化分析
- 功能:
- 展示降价排行榜。
- 分析汽车品牌分布和价格分布。
- 技术实现:利用 Echarts 进行数据可视化,将复杂的数据以直观的图表形式展示给用户。
5. 销量榜单分析
- 功能:展示各品牌、各车型的销量榜单。
- 技术实现:通过 Django 后端从数据库中提取销量数据,并通过 Vue 前端展示。
6. 差评榜单
- 功能:展示汽车的质量、服务等方面的差评情况。
- 技术实现:从数据库中提取用户评价数据,通过 Echarts 进行可视化展示。
7. 汽车详情页面
- 功能:展示汽车的详细信息,包括配置、参数、用户评价等。
- 技术实现:结合 Django 和 Vue 框架,从数据库中查询并展示汽车的详细信息。
8. 注册登录
- 功能:用户可以注册账号并登录,保护用户数据和隐私。
- 技术实现:使用 Django 的用户认证系统,结合 Vue 前端实现安全的注册和登录功能。
9. 后台数据管理
- 功能:管理员可以管理汽车数据、用户数据、评价数据等。
- 技术实现:通过 Django 框架搭建后台管理系统,实现数据的增、删、改、查等操作。
4、核心代码
from django.shortcuts import render
from datetime import datetime, timedelta
from .models import *
from django.http.response import JsonResponse
from itertools import groupby
from .models import *
import json
from django.http.response import HttpResponse
from django.shortcuts import render
from django.http import JsonResponse
from pyecharts import options as opts
from pyecharts.charts import Map, Grid, Bar, Line, Pie, WordCloud, Radar, Timeline
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
from pyecharts.options.charts_options import MapItem
from datetime import datetime, time
from django.core.paginator import Paginator
from django.db.models import Q, F
from pyecharts.globals import SymbolType
from django.db.models import Sum, Count, Max, Min, Avg
from collections import Counter
from requests_html import requests
from itertools import chain
from functools import lru_cache
def to_dict(l, exclude=tuple(), single=False):
# 将数据库模型 变为 字典数据 的工具类函数
def transform(v):
if isinstance(v, datetime):
return v.strftime("%Y-%m-%d %H:%M:%S")
return v
def _todict(obj):
j = {
k: transform(v)
for k, v in obj.__dict__.items()
if not k.startswith("_") and k not in exclude
}
return j
if single:
return _todict(l)
return [_todict(i) for i in l]
def car_rank(request):
body = request.json
id = body.get("id")
return _car_rank(id)
@lru_cache()
def _car_rank(id):
# 获取当前日期及1年前的日期
today = datetime.now().date()
one_year_ago = today - timedelta(days=365)
# 设置查询条件
q = Q(month__gte=one_year_ago.strftime("%Y%m"), month__lte=today.strftime("%Y%m"))
result = (
CarSale.objects.filter(q)
.values("series_id", "series_name")
.annotate(total_sales=Sum("rank_value"))
.filter(total_sales__gt=0)
.order_by("-total_sales")
)
sales_rank = next(
(
i
for i, e in enumerate(
result,
start=1,
)
if e["series_id"] == int(id)
),
-1,
)
# ---------
# 获取当前日期及1年前的日期
q = Q(
stime__gte=one_year_ago.strftime("%Y-%m-%d"),
stime__lte=today.strftime("%Y-%m-%d"),
)
result = (
CarIssue.objects.filter(q)
.values("series_id", "series_name")
.annotate(total_issues=Sum("count"))
.filter(total_issues__gt=0)
.order_by("-total_issues")
)
issue_rank = next(
(
i
for i, e in enumerate(
result,
start=1,
)
if e["series_id"] == int(id)
),
-1,
)
return JsonResponse(dict(sales_rank=sales_rank, issue_rank=issue_rank))
def car_sales_rank(request):
# 获取请求体中的数据
body = request.json
# 获取请求体中的月份
month = body.get("month")
# 定义查询条件
q = Q()
# 根据月份设置查询条件
if month == "1y":
# 获取当前日期及1年前的日期
today = datetime.now().date()
one_year_ago = today - timedelta(days=365)
# 设置查询条件
q &= Q(
month__gte=one_year_ago.strftime("%Y%m"), month__lte=today.strftime("%Y%m")
)
elif month == "6m":
# 近半年,即6个月
today = datetime.now().date()
half_year_ago = today - timedelta(days=365 // 2)
# 设置查询条件
q &= Q(
month__gte=half_year_ago.strftime("%Y%m"), month__lte=today.strftime("%Y%m")
)
else:
q &= Q(month=month)
# 统计各个车系一年内的总销量,并按照销量进行排序和排名
result = (
CarSale.objects.filter(q)
.values("series_id", "series_name")
.annotate(total_sales=Sum("rank_value"))
.order_by("-total_sales")
)
# 对结果进行排名
result_list = list(result)
for i, item in enumerate(result_list):
item["sales_rank"] = i + 1
# 分页处理数据
pagesize = body.get("pagesize", 20)
page_num = body.get("page", 1)
paginator = Paginator(result_list, pagesize) # 创建Paginator对象
page = paginator.get_page(page_num) # 获取指定页码的数据
result = list(page.object_list)
# 获取每个车系的详细信息,并将其添加到结果中
for i in result:
car_series = to_dict([CarSeries.objects.get(series_id=i["series_id"])])[0]
i.update(**car_series)
# 返回分页后的结果
return JsonResponse({"total": paginator.count, "records": result})
def car_issue_rank(request):
body = request.json
stime = body.get("stime")
type = body.get("type")
q = Q()
if stime == "1y":
# 获取当前日期及1年前的日期
today = datetime.now().date()
one_year_ago = today - timedelta(days=365)
q &= Q(
stime__gte=one_year_ago.strftime("%Y-%m-%d"),
stime__lte=today.strftime("%Y-%m-%d"),
)
elif stime == "6m":
# 近半年,即6个月
today = datetime.now().date()
half_year_ago = today - timedelta(days=365 // 2)
q &= Q(
stime__gte=half_year_ago.strftime("%Y-%m-%d"),
stime__lte=today.strftime("%Y-%m-%d"),
)
else:
q &= Q(stime=stime)
if type:
q &= Q(type=type)
# 统计各个车系一年内的总问题数,并按照问题数进行排序和排名
result = (
CarIssue.objects.filter(q)
.values("series_id", "series_name")
.annotate(total_issues=Sum("count"))
.order_by("-total_issues")
)
# 对结果进行排名
result_list = list(result)
for i, item in enumerate(result_list):
item["issues_rank"] = i + 1
# 分页处理数据
pagesize = body.get("pagesize", 20)
page_num = body.get("page", 1)
paginator = Paginator(result_list, pagesize) # 创建Paginator对象
page = paginator.get_page(page_num) # 获取指定页码的数据
result = list(page.object_list)
for i in result:
car_series = to_dict([CarSeries.objects.get(series_id=i["series_id"])])[0]
counter = Counter()
for x in CarIssue.objects.filter(q, series_id=i["series_id"]).values_list(
"dxwt", flat=True
):
counter.update(dict([(j["ctiTitle"], j["count"]) for j in x]))
i["issues"] = counter.most_common(10)
i.update(**car_series)
return JsonResponse({"total": paginator.count, "records": result})
def get_detail(request):
body = request.json
id = body.get("id")
o = CarSeries.objects.get(pk=id)
o = to_dict(o, single=True)
o["brand"] = to_dict(Brand.objects.get(brand_id=o["brand_id"]), single=True)
return JsonResponse(o)
def car_360_color_pic(request):
body = request.json
id = body.get("id")
try:
color_pic_list = requests.get(
f"https://www.dongchedi.com/motor/pc/car/series/car_360_color_pic?aid=1839&app_name=auto_web_pc&series_id={id}"
).json()["data"]["color_pic_list"]
except:
color_pic_list = []
return JsonResponse(color_pic_list, safe=False)
5、项目获取
biyesheji0005 或 biyesheji0001 (绿色聊天软件)
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻