计算机毕业设计 基于Hadoop的B站数据分析可视化系统的设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】

发布于:2025-09-14 ⋅ 阅读:(17) ⋅ 点赞:(0)

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python、大数据、人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
————————————————
计算机毕业设计《1000套》

Python毕设精品项目

微信小程序毕设精品项目

大数据及机器学习毕设精品项目

PS:Java、Python、大数据、机器学习等,可以用源码,或者定制开发!

目录

1、项目介绍及开发技术 

1.1 项目介绍

1.2 开发技术

2、系统功能设计结构图

3、功能截图 

3.1 前台功能

3.2 后台功能

4、关键代码 

4.1 setting.py

4.2 urls.py

4.3 config_v.py

4.4 yonghu_v.py

5、论文目录结构 

6、源码获取 


1、项目介绍及开发技术 

1.1 项目介绍

      随着大数据时代的到来,数据分析和可视化成为了洞察业务趋势、提升决策质量的关键手段。B站数据分析可视化系统应运而生,旨在通过对海量数据的采集、处理、分析和展示,为业务决策提供强有力的数据支持。该系统采用Python语言进行开发,利用其强大的数据处理能力和丰富的库支持,实现数据的高效分析。Scrapy技术的应用使得系统能够快速爬取B站的公开数据,为分析提供原始素材。看板可视化技术则将分析结果以直观、易理解的方式呈现给用户,提升信息传递的效率。预测功能通过构建数据模型,对B站的未来趋势进行预测,为战略规划提供依据。Hadoop框架的应用解决了大数据环境下的存储和计算问题,保障了系统的可扩展性。Django框架的使用简化了Web应用的开发,使得系统功能更加丰富、稳定。MySQL数据库作为数据存储的核心,以其可靠性和易用性,为平台提供了强大的数据支持。B站数据分析可视化系统的建设和应用,不仅提高了数据分析的效率和质量,也为业务创新和发展提供了新的动力,推动了数据分析技术在视频平台领域的应用和发展。

1.2 开发技术

      该系统旨在对B站数据进行分析和可视化展示。通过爬虫技术爬取B站的相关数据,利用Hadoop进行数据存储和处理,使用Python和Django框架搭建后端服务,对数据进行清洗、分析和处理。前端使用Vue技术构建用户界面,将分析结果以直观的图表、报表等形式展示给用户,方便用户了解B站的热门视频、用户行为等信息。 

序号 技术名称 类型 版本/备注 用途描述
1 Python 编程语言 Python 3.7.7 广泛用于Web开发、数据科学、AI等领域
2 Django Web框架 Django2.0 高级Web框架,用于快速开发Web应用
3 Flask Web框架 Flask2.0.0 轻量级Web框架,适合小型项目
4 Scrapy 爬虫框架 Scrapy2.9.0 用于编写爬虫程序,快速抓取网页数据
5 Hadoop 大数据处理 分布式存储和计算框架,适合大数据存储和处理
6 Spark 大数据处理 pyspark3.3.2 快速、通用的集群计算系统
7 MySQL 数据库 MySQL5.7+ 关系型数据库,用于存储和管理数据
8 Navicat 数据库管理工具 Navicat11+ 数据库管理和开发工具,支持多种数据库
9 DataGrip 数据库管理工具 强大的数据库管理工具,支持多种数据库
10 PyCharm 开发环境 Pycharm2021 Python IDE,提供代码编辑、调试等功能
11 VSCode 开发环境 VSCode1.15.1 轻量级但功能强大的代码编辑器
12 Node.js 服务器端JS环境 Node 14.15.0 用于构建高性能的服务器端和网络应用

2、系统功能设计结构图

      B站数据分析可视化系统将集成多种功能以提升数据分析的效率和可视化效果,进而优化用户体验和决策过程。系统将围绕用户分析、热门视频分析、热门视频预测、轮播图管理和个人中心等核心功能展开。用户分析功能将对B站用户的行为数据进行深入挖掘,包括用户活跃度、偏好内容、互动行为等,为平台运营提供用户画像和行为趋势。热门视频分析功能将聚焦于识别和分析平台上受欢迎的视频内容,包括视频观看次数、弹幕互动、分享传播等指标,以揭示热门视频的特征和影响因素。热门视频预测功能将运用机器学习算法对视频内容和用户行为进行建模,预测潜在的热门视频,为内容创作者和平台运营提供指导。轮播图管理功能将允许管理员方便地管理和更新首页的轮播图内容,以展示重要信息和推荐视频,提升用户的点击率和参与度。个人中心功能则为用户提供个人信息管理、观看历史、收藏列表等个性化服务,增强用户的归属感和忠诚度。通过整合这些功能,B站数据分析可视化系统将为平台运营者、内容创作者和普通用户提供全面、直观的数据支持和决策依据,推动B站内容生态的健康发展。该系统也将为数据分析和可视化技术在视频平台的应用提供实践案例和经验积累。系统总体功能模块图如下图所示:

图2-1 系统总体结构图

架构图(不同框架)参考展示: 

 

3、功能截图 

3.1 前台功能

      系统前台首页精心设计,以提升用户体验。“热门视频”功能展示当前最受欢迎的内容,吸引用户关注和参与,增加平台互动。用户可以通过这一板块迅速了解流行趋势和社区热点。“个人中心”则是用户管理个人信息的专属区域,用户可以在这里查看个人资料、历史记录、收藏内容以及设置偏好,实现个性化定制。这些功能的结合,旨在为用户提供一个直观、便捷的操作平台,增强用户粘性。系统首页界面如图5-1所示: 

图3-1 系统首页界面

      用户在点击“热门视频”界面后,将看到当前平台上最受欢迎的视频列表。用户可以根据自己的兴趣选择视频进行观看。观看过程中,用户有权利对视频内容进行评论,分享自己的看法和感受,与其他用户互动交流。如果用户对某个视频特别感兴趣,还可以选择将其收藏到个人中心,方便日后快速访问和再次观看。这些功能不仅增加了用户的参与度,也提升了平台的互动性和用户粘性。热门视频界面如图3-2所示: 

图3-2热门视频界面

     在个人中心页面,用户可以执行多项与个人信息管理相关的操作。用户能够查看和更新个人资料,确保账户信息的准确性。修改密码功能允许用户定期更新登录凭据,以增强账户安全性。此外,“我的收藏”功能让用户能够访问和管理自己收藏的视频列表,轻松找到之前感兴趣的内容。这些功能共同为用户提供了一个集中的平台,以便高效地管理自己的在线活动和偏好设置。如图3-3所示:

图3-3个人中心界面

       用户在个人中心界面点击“我的收藏”功能后,可以通过输入视频名称进行快速查询,系统将展示用户收藏的视频列表。用户可以方便地查看自己感兴趣的视频内容,包括之前收藏的各种热门或感兴趣的视频。这一功能使用户能够轻松管理和回顾个人收藏,快速访问喜爱的视频,提升用户体验。它也便于用户整理和追踪自己的兴趣点,确保不会错过任何想要再次观看的视频。我的收藏界面如图3-4所示:

图3-4我的收藏界面

3.2 后台功能

       后台管理员登录功能是系统管理的重要入口。管理员通过输入用户名和密码进行身份验证,确保只有授权人员才能访问系统后台。登录界面通常包含用户名和密码输入框,以及登录按钮。管理员成功登录后,将进入管理界面,拥有对用户管理、内容审核、数据分析等各项功能的访问权限。这一功能通过权限控制,保障了系统数据的安全性和操作的准确性,为高效管理提供了基础。管理员登录界面如图3-5所示:

图3-5 管理员登录界面

       管理员主页面作为系统控制中心,提供全面的管理功能。页面通常详细列出所有管理模块,包括用户、热门视频、热门视频预测、轮播图管理、个人中心等,确保管理员能够高效地进行日常管理工作。整个页面布局清晰,功能模块化,便于管理员快速定位和操作。管理员主界面如图3-6所示:

图3-6管理员主界面

管理员在系统中通过点击“用户”功能,能够输入用户账号进行精确查询,快速定位特定用户信息。系统展示匹配的用户列表后,管理员可以添加新用户信息或从列表中删除不再需要的用户,维护用户数据的准确性。管理员还可以查看用户的详细信息,进行必要的信息修改,如更新用户资料或权限设置。在必要时,管理员也可以执行删除操作,以确保系统中用户信息的及时更新和平台的安全运行。用户界面如图3-7所示:

图3-7用户界面

       管理员在系统中点击“热门视频”功能,可以通过输入视频标题、UP主、类型等关键词进行查询,快速定位特定视频。管理员能够添加新的热门视频到列表中,或从列表中删除不再受欢迎的视频。管理员还可以爬取视频数据,包括时长、播放量、弹幕量、点赞量、收藏量、分享量、投币量等关键指标,并根据UP主类型、视频类型等分类进行管理。管理员可以查看视频的详细信息,进行必要的信息修改,如更新视频描述或标签。在必要时,管理员也可以删除不当或过时的视频内容,以维护平台内容的质量和秩序。热门视频界面如图3-8所示:

图3-8热门视频界面

      管理员在系统中点击“热门视频预测”功能后,可以通过输入视频标题进行查询,系统将展示相关的预测信息列表。管理员能够根据平台的算法模型添加新的预测条目,或从列表中删除不再适用的预测。管理员还可以查看每条预测的详细信息,进行必要的信息修改,如调整预测参数或更新预测结果。管理员还可以利用系统提供的预测工具,对潜在热门视频进行分析和预测,以优化内容推荐策略。在必要时,管理员也可以执行删除操作,确保预测信息的准确性和时效性。热门视频预测界面如图3-9所示:

图3-9热门视频预测界面

      管理员点击“看板”功能后,将进入一个数据可视化界面,该界面集中展示了平台的关键统计数据。看板通过图表和图形直观地呈现用户总数、热门视频数量、预测的热门视频数量等核心指标。它还详细列出了视频点赞量、播放量、弹幕量等互动数据,以及UP主类型和视频类型等分类信息。这些数据帮助管理员快速把握平台的运营状况和用户行为特征。看板中的“预测播放量”功能尤为关键,它利用历史数据和算法模型预测视频的潜在播放量,为内容推荐和运营决策提供数据支持。这一功能不仅提升了内容管理的前瞻性,也为平台优化资源分配和提升用户体验提供了科学依据。看板界面如图3-10所示:

图3-10看板界面

4、关键代码 

4.1 setting.py

"""
Django settings for dj2 project.

Generated by 'django-admin startproject' using Django 2.0.

For more information on this file, see
https://docs.djangoproject.com/en/2.0/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.0/ref/settings/
"""

import os
from concurrent.futures.thread import ThreadPoolExecutor
executor = ThreadPoolExecutor(20)
from util.configread import config_read

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'w5yn#0gn2tt7pvu%hvwt0!lt=!$6+eqp4%m8)u3u#gknm@jm)k'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ["*"]

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "main",
    'corsheaders',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'threadlocals.middleware.ThreadLocalMiddleware',
    "xmiddleware.xparam.Xparam",
    "xmiddleware.xauth.Xauth",
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
]
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = ('*')

SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_COOKIE_NAME  = "sessionid"
SESSION_COOKIE_PATH  = "/"
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_AGE = 1209600
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_SAVE_EVERY_REQUEST = False

ROOT_URLCONF = 'dj2.urls'
TEMPLATES_DIR = os.path.join(BASE_DIR, "templates")
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [TEMPLATES_DIR],
        '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',
            ],
        },
    },
]

WSGI_APPLICATION = 'dj2.wsgi.application'

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = False
EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = 'yclw9@qq.com'
EMAIL_HOST_PASSWORD = 'mhbrkuayvkkgbijd'

# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }

dbtype, host, port, user, passwd, dbName, charset,hasHadoop = config_read("config.ini")
dbName=dbName.replace(" ","").strip()
print(dbtype, host, port, user, passwd, dbName, charset)

if dbtype == 'mysql':
    DATABASES = {
        'default': {
            # 'ENGINE': 'django.db.backends.sqlite3',
            # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'ENGINE': 'django.db.backends.mysql',
            'OPTIONS': {
                'sql_mode': 'traditional',
                'init_command': "SET sql_mode='traditional'",  # STRICT_TRANS_TABLES
            },
            'NAME': dbName,
            'USER': user,
            'PASSWORD': passwd,
            'HOST': host,
            'PORT': port,
            'charset': charset,
            'TEST': {
                'CHARSET': charset,
                'COLLATION': 'utf8_general_ci',
            },
            'CONN_MAX_AGE':60
        },
    }
else:
    print("请使用mysql5.5数据库")
    os._exit(1)

if 'spark' in hasHadoop or 'hive' in hasHadoop:
    jar_fielpath=os.path.join(BASE_DIR,"bin","mysql-connector-java-8.0.32.jar")
    print(jar_fielpath)
    if os.path.exists(jar_fielpath)==False:
        print('请检查mysql-connector-java-8.0.32.jar文件是否存在')
        os._exit(1)
    try:
        spark = SparkSession.builder.config("spark.jars",jar_fielpath).master("local").appName("django").getOrCreate()
    except Exception as e:
        print('请检查spark配置',e)
        os._exit(1)
    jdbc_url=f'jdbc:mysql://{host}:{port}/{dbName}?user={user}&password={passwd}&driver=com.mysql.jdbc.Driver'


# Password validation
# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'zh-Hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

# USE_TZ = True
USE_TZ = False

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/



STATIC_URL = '/assets/'
STATICFILES_DIRS =[
os.path.join(BASE_DIR, "templates/front/assets"),
]

# media
MEDIA_URL = "/media/"  # 自定义
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')  # 自定义
if os.path.isdir(MEDIA_ROOT) == False:
    os.mkdir(MEDIA_ROOT)

ALIPAY_APP_ID = ''
APP_PRIVATE_KEY_STRING = open('{}/util/alipay_key/app_private_2048.txt'.format(BASE_DIR)).read()
ALIPAY_PUBLIC_KEY_STRING = open('{}/util/alipay_key/alipay_public_2048.txt'.format(BASE_DIR)).read()
ALIPAY_SIGN_TYPE = 'RSA2'

4.2 urls.py

"""dj2 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.0/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'))
"""
import os
from django.contrib import admin
from django.urls import path,include,re_path
from django.conf.urls import url
from django.views.static import serve
from django.views.generic import TemplateView


from . import views
from dj2.settings import dbName as schemaName

urlpatterns = [
    path('xadmin/', admin.site.urls),
    path(r'index/',views.index),
    path('{}/'.format(schemaName),include('main.urls')),#导入schemaName
    re_path(r'admin/lib/(?P<p1>.*)/(?P<p2>.*)$', views.admin_lib2),
    re_path(r'admin/lib/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$', views.admin_lib3),
    re_path(r'admin/lib/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$', views.admin_lib4),
    re_path(r'admin/page/(?P<p1>.*)$', views.admin_page),
    re_path(r'admin/page/(?P<p1>.*)/(?P<p2>.*)$', views.admin_page2),
    re_path(r'admin/pages/(?P<p1>.*)$', views.admin_pages),
    re_path(r'admin/pages/(?P<p1>.*)/(?P<p2>.*)$', views.admin_pages2),
    
    re_path(r'front/(?P<p1>.*)$', views.schema_front1),
    re_path(r'front/(?P<p1>.*)/(?P<p2>.*)$', views.schema_front2),
    re_path(r'front/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$', views.schema_front3),
    re_path(r'front/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$', views.schema_front4),
    re_path(r'{}/front/(?P<p1>.*)$'.format(schemaName), views.schema_front1),
    re_path(r'{}/front/(?P<p1>.*)/(?P<p2>.*)$'.format(schemaName), views.schema_front2),
    re_path(r'{}/front/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$'.format(schemaName), views.schema_front3),
    re_path(r'{}/front/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$'.format(schemaName), views.schema_front4),
    # re_path(r'assets/(?P<p1>.*)$', views.assets1),
    # re_path(r'assets/(?P<p1>.*)/(?P<p2>.*)$',  views.assets2),
    # re_path(r'assets/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$',  views.assets3),
    # re_path(r'assets/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$',  views.assets4),
    #re_path(r'admin/(?P<p1>.*)$', views.admin_file1),
    re_path(r'admin/(?P<p1>.*)/(?P<p2>.*)$', views.admin_file2),
    re_path(r'admin/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$', views.admin_file3),
    re_path(r'admin/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$', views.admin_file4),
    re_path(r'layui/(?P<p1>.*)$', views.layui1),
    re_path(r'layui/(?P<p1>.*)/(?P<p2>.*)$',  views.layui2),
    re_path(r'layui/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)$',  views.layui3),
    re_path(r'layui/(?P<p1>.*)/(?P<p2>.*)/(?P<p3>.*)/(?P<p4>.*)$',  views.layui4),
    re_path(r'pages/(?P<p1>.*)$', views.front_pages),
    re_path(r'pages/(?P<p1>.*)/(?P<p2>.*)$',  views.front_pages2),
    # re_path(r'pages/(?P<p1>.*)$',  views.front_file1),
    # re_path(r'(?P<p1>css|jss|img|image|iamges|font|fonts)/(?P<p2>.*)$', views.front_file2),
    re_path(r'modules/(?P<p1>.*)$', views.front_modules),
    re_path(r'css/(?P<p1>.*)$', views.css1),
    re_path(r'js/(?P<p1>.*)$', views.js1),
    re_path(r'img/(?P<p1>.*)$', views.img1),
    path(r'test/<str:p1>/',views.test),
    path(r'null',views.null),
]

#判断admin使用vue还是jquery
if os.path.isdir(os.path.join(os.getcwd(),"templates/front/admin/dist/")):
    urlpatterns.extend([
        path(r'{}/admin/dist/index.html'.format(schemaName),
             TemplateView.as_view(template_name='front/admin/dist/index.html')),
        path(r'{}/admin/'.format(schemaName), TemplateView.as_view(template_name='front/admin/dist/index.html')),
        # 以下是后台admin的url匹配规则
        path(r'admin/dist/index.html'.format(schemaName),
             TemplateView.as_view(template_name='front/admin/dist/index.html')),
        path(r'admin/', TemplateView.as_view(template_name='front/admin/dist/index.html')),
    ])
else:
    urlpatterns.extend([
        path(r'{}/admin/index.html'.format(schemaName),
             TemplateView.as_view(template_name='front/admin/index.html')),
        path(r'{}/admin/'.format(schemaName), TemplateView.as_view(template_name='front/admin/index.html')),
        # 以下是后台admin的url匹配规则
        path(r'admin/index.html'.format(schemaName),
             TemplateView.as_view(template_name='front/admin/index.html')),
        path(r'admin/', TemplateView.as_view(template_name='front/admin/index.html')),

    ])


if os.path.isfile(os.path.join(os.getcwd(),"templates/front/index.html")):
    urlpatterns.extend([
    path(r'index.html', TemplateView.as_view(template_name='front/index.html')),
     path(r'{}/index.html'.format(schemaName), TemplateView.as_view(template_name='front/index.html')),
     path(r'{}/front/index.html'.format(schemaName), TemplateView.as_view(template_name='front/index.html')),
    path(r'', TemplateView.as_view(template_name='front/index.html')),
    ])

4.3 config_v.py

# coding:utf-8

import logging

from django.http import JsonResponse

from .config_model import config
from util.codes import *
from util import message as mes


def config_page(request):
    '''
    获取参数信息
    :return:
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code,
               "data": {"currPage": 1, "totalPage": 1, "total": 1, "pageSize": 10, "list": []}}
        req_dict = request.session.get('req_dict')
        msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \
        msg['data']['pageSize'] = config.page(config, config, req_dict)
        return JsonResponse(msg)


def config_list(request):
    '''
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code,
               "data": {"currPage": 1, "totalPage": 1, "total": 1, "pageSize": 10, "list": []}}
        req_dict = request.session.get("req_dict")

        msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \
        msg['data']['pageSize'] = config.page(config, config, req_dict)

        return JsonResponse(msg)


def config_info(request, id_):
    '''
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}

        data = config.getbyid(config, config, int(id_))
        if len(data) > 0:
            msg['data'] = data[0]
        return JsonResponse(msg)


def config_detail(request, id_):
    '''
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}

        data = config.getbyid(config, config, int(id_))
        if len(data) > 0:
            msg['data'] = data[0]
        return JsonResponse(msg)


def config_save(request):
    '''
    创建参数信息
    :return:
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}

        req_dict = request.session.get('req_dict')
        param1 = config.getbyparams(config, config, req_dict)
        if param1:
            msg['code'] = id_exist_code
            msg['msg'] = mes.id_exist_code
            return JsonResponse(msg)

        error = config.createbyreq(config, config, req_dict)
        logging.warning("save_config.res=========>{}".format(error))
        if error != None:
            msg['code'] = crud_error_code
            msg['msg'] = error
        return JsonResponse(msg)


def config_add(request):
    '''
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}
        req_dict = request.session.get("req_dict")

        error = config.createbyreq(config, config, req_dict)
        if error != None:
            msg['code'] = crud_error_code
            msg['msg'] = error
        return JsonResponse(msg)


def config_update(request):
    '''
    更新参数信息
    :return:
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}

        req_dict = request.session.get('req_dict')

        config.updatebyparams(config, config, req_dict)

        return JsonResponse(msg)


def config_delete(request):
    '''
    删除参数信息
    :return:
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}

        req_dict = request.session.get('req_dict')
        config.deletes(config,
            config,
            req_dict.get("ids")
        )

        return JsonResponse(msg)

4.4 yonghu_v.py

def yonghu_register(request):
    if request.method in ["POST", "GET"]:
        msg = {'code': normal_code, "msg": mes.normal_code}
        req_dict = request.session.get("req_dict")


        error = yonghu.createbyreq(yonghu, yonghu, req_dict)
        if error is Exception or (type(error) is str and "Exception" in error):
            msg['code'] = crud_error_code
            msg['msg'] = "用户已存在,请勿重复注册!"
        else:
            msg['data'] = error
        return JsonResponse(msg, encoder=CustomJsonEncoder)

def yonghu_login(request):
    if request.method in ["POST", "GET"]:
        msg = {'code': normal_code, "msg": mes.normal_code}
        req_dict = request.session.get("req_dict")
        datas = yonghu.getbyparams(yonghu, yonghu, req_dict)
        if not datas:
            msg['code'] = password_error_code
            msg['msg'] = mes.password_error_code
            return JsonResponse(msg, encoder=CustomJsonEncoder)

        try:
            __sfsh__= yonghu.__sfsh__
        except:
            __sfsh__=None

        if  __sfsh__=='是':
            if datas[0].get('sfsh')!='是':
                msg['code']=other_code
                msg['msg'] = "账号已锁定,请联系管理员审核!"
                return JsonResponse(msg, encoder=CustomJsonEncoder)
                
        req_dict['id'] = datas[0].get('id')


        return Auth.authenticate(Auth, yonghu, req_dict)


def yonghu_logout(request):
    if request.method in ["POST", "GET"]:
        msg = {
            "msg": "登出成功",
            "code": 0
        }

        return JsonResponse(msg, encoder=CustomJsonEncoder)


def yonghu_resetPass(request):
    '''
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code}

        req_dict = request.session.get("req_dict")

        columns=  yonghu.getallcolumn( yonghu, yonghu)

        try:
            __loginUserColumn__= yonghu.__loginUserColumn__
        except:
            __loginUserColumn__=None
        username=req_dict.get(list(req_dict.keys())[0])
        if __loginUserColumn__:
            username_str=__loginUserColumn__
        else:
            username_str=username
        if 'mima' in columns:
            password_str='mima'
        else:
            password_str='password'

        init_pwd = '123456'
        recordsParam = {}
        recordsParam[username_str] = req_dict.get("username")
        records=yonghu.getbyparams(yonghu, yonghu, recordsParam)
        if len(records)<1:
            msg['code'] = 400
            msg['msg'] = '用户不存在'
            return JsonResponse(msg, encoder=CustomJsonEncoder)

        eval('''yonghu.objects.filter({}='{}').update({}='{}')'''.format(username_str,username,password_str,init_pwd))
        
        return JsonResponse(msg, encoder=CustomJsonEncoder)
def yonghu_page(request):
    '''
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": mes.normal_code,  "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}}
        req_dict = request.session.get("req_dict")

        global yonghu
        #当前登录用户信息
        tablename = request.session.get("tablename")

        msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \
        msg['data']['pageSize']  =yonghu.page(yonghu, yonghu, req_dict, request)
        return JsonResponse(msg, encoder=CustomJsonEncoder)

5、论文目录结构 

第一章 概述    1
1.1 课题背景与意义    1
1.2 国内外研究现状    1
1.3 本课题研究的主要内容    2
第二章 开发工具及技术介绍    3
2.1 Django框架    3
2.2 Python语言    3
2.3 vue.js前端框架    3
2.4 MySQL数据库    3
2.5 B/S架构    3
2.6 Scrapy技术    4
2.7 Hadoop框架    4
第三章 系统分析    1
3.1系统性能分析    1
3.2系统可行性分析    1
3.3 系统用例分析    2
3.4系统流程分析    2
3.4.1 登录流程图    2
3.4.2 添加新用户流程图    3
第四章 系统概要设计    5
4.1系统设计原理    5
4.2功能模块设计    5
4.3 数据库设计    6
4.3.1数据库设计原则    6
4.3.2数据库E-R图设计    6
4.3.3数据库表结构设计    8
第五章 系统功能实现    12
5.1前台功能实现    12
5.1.1系统首页页面    12
5.1.2个人中心    13
5.2管理员功能实现    14
第六章 系统测试    18
6.1系统测试的目的    18
6.2系统测试方法    18
6.3系统测试用例    18
结    论    20
致  谢    21
参考文献    22

 更多源码:

计算机毕业设计选题1000套等你来!!!

Python毕设精品项目

微信小程序毕设精品项目  

大数据及机器学习毕设精品项目 

6、源码获取 

感谢大家的阅读,如有不懂的问题可以评论区交流或私聊!

喜欢文章可以点赞、收藏、关注、评论

下方联系方式扫描获取源码


网站公告

今日签到

点亮在社区的每一天
去签到