├── README.md ├── 介绍PPT.pptx ├── 工程文件 ├── Django后端 │ └── testproject │ │ ├── api │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-38.pyc │ │ │ ├── admin.cpython-38.pyc │ │ │ ├── apps.cpython-38.pyc │ │ │ ├── models.cpython-38.pyc │ │ │ ├── permissions.cpython-38.pyc │ │ │ ├── serializers.cpython-38.pyc │ │ │ ├── urls.cpython-38.pyc │ │ │ └── views.cpython-38.pyc │ │ ├── admin.py │ │ ├── apps.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_z_hot.py │ │ │ ├── 0003_z_hot_item.py │ │ │ ├── 0004_alter_z_hot_item_z_hot_list_id.py │ │ │ ├── 0005_alter_z_hot_item_z_hot_list_id.py │ │ │ ├── 0006_alter_z_hot_item_z_hot_list_id.py │ │ │ ├── 0007_rename_z_hot_item_id_z_hot_item_z_item_id.py │ │ │ ├── 0008_auto_20220410_1612.py │ │ │ ├── 0009_crawltimemanage.py │ │ │ ├── __init__.py │ │ │ └── __pycache__ │ │ │ │ ├── 0001_initial.cpython-38.pyc │ │ │ │ ├── 0002_z_hot.cpython-38.pyc │ │ │ │ ├── 0003_z_hot_item.cpython-38.pyc │ │ │ │ ├── 0004_alter_z_hot_item_z_hot_list_id.cpython-38.pyc │ │ │ │ ├── 0005_alter_z_hot_item_z_hot_list_id.cpython-38.pyc │ │ │ │ ├── 0006_alter_z_hot_item_z_hot_list_id.cpython-38.pyc │ │ │ │ ├── 0007_rename_z_hot_item_id_z_hot_item_z_item_id.cpython-38.pyc │ │ │ │ ├── 0008_auto_20220410_1612.cpython-38.pyc │ │ │ │ ├── 0009_crawltimemanage.cpython-38.pyc │ │ │ │ └── __init__.cpython-38.pyc │ │ ├── models.py │ │ ├── permissions.py │ │ ├── serializers.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ │ ├── bili │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-38.pyc │ │ │ ├── admin.cpython-38.pyc │ │ │ ├── apps.cpython-38.pyc │ │ │ ├── models.cpython-38.pyc │ │ │ ├── serializers.cpython-38.pyc │ │ │ ├── urls.cpython-38.pyc │ │ │ └── views.cpython-38.pyc │ │ ├── admin.py │ │ ├── apps.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_dynasic_list.py │ │ │ ├── 0003_rename_dynasic_list_dynasic_time_list.py │ │ │ ├── __init__.py │ │ │ └── __pycache__ │ │ │ │ ├── 0001_initial.cpython-38.pyc │ │ │ │ ├── 0002_alter_followed_list_bili_followed_id.cpython-38.pyc │ │ │ │ ├── 0002_dynasic_list.cpython-38.pyc │ │ │ │ ├── 0003_rename_dynasic_list_dynasic_time_list.cpython-38.pyc │ │ │ │ └── __init__.cpython-38.pyc │ │ ├── models.py │ │ ├── serializers.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ │ ├── manage.py │ │ ├── testproject │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-38.pyc │ │ │ ├── settings.cpython-38.pyc │ │ │ ├── urls.cpython-38.pyc │ │ │ └── wsgi.cpython-38.pyc │ │ ├── asgi.py │ │ ├── settings.py │ │ ├── urls.py │ │ └── wsgi.py │ │ ├── weibo │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-38.pyc │ │ │ ├── admin.cpython-38.pyc │ │ │ ├── apps.cpython-38.pyc │ │ │ ├── models.cpython-38.pyc │ │ │ ├── serializers.cpython-38.pyc │ │ │ ├── urls.cpython-38.pyc │ │ │ └── views.cpython-38.pyc │ │ ├── admin.py │ │ ├── apps.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20220428_2223.py │ │ │ ├── 0003_alter_weibo_hot_item_weibo_item_hot.py │ │ │ ├── 0004_dynasic_dynasic_time_list_follow_list_up_list.py │ │ │ ├── 0005_alter_up_list_weibo_up_id.py │ │ │ ├── 0006_alter_dynasic_weibo_post_time.py │ │ │ ├── 0007_alter_dynasic_weibo_post_time.py │ │ │ ├── __init__.py │ │ │ └── __pycache__ │ │ │ │ ├── 0001_initial.cpython-38.pyc │ │ │ │ ├── 0002_auto_20220428_2223.cpython-38.pyc │ │ │ │ ├── 0003_alter_weibo_hot_item_weibo_item_hot.cpython-38.pyc │ │ │ │ ├── 0004_dynasic_dynasic_time_list_follow_list_up_list.cpython-38.pyc │ │ │ │ ├── 0005_alter_up_list_weibo_up_id.cpython-38.pyc │ │ │ │ ├── 0006_alter_dynasic_weibo_post_time.cpython-38.pyc │ │ │ │ ├── 0007_alter_dynasic_weibo_post_time.cpython-38.pyc │ │ │ │ └── __init__.cpython-38.pyc │ │ ├── models.py │ │ ├── serializers.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ │ └── zhihu │ │ ├── __init__.py │ │ ├── __pycache__ │ │ ├── __init__.cpython-38.pyc │ │ ├── admin.cpython-38.pyc │ │ ├── apps.cpython-38.pyc │ │ ├── models.cpython-38.pyc │ │ ├── serializers.cpython-38.pyc │ │ ├── urls.cpython-38.pyc │ │ └── views.cpython-38.pyc │ │ ├── admin.py │ │ ├── apps.py │ │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── __init__.py │ │ └── __pycache__ │ │ │ ├── 0001_initial.cpython-38.pyc │ │ │ └── __init__.cpython-38.pyc │ │ ├── models.py │ │ ├── serializers.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py ├── Scrapy爬虫 │ ├── main.py │ └── myspider │ │ ├── myspider │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-38.pyc │ │ │ ├── items.cpython-38.pyc │ │ │ ├── pipelines.cpython-38.pyc │ │ │ └── settings.cpython-38.pyc │ │ ├── bilibili.json │ │ ├── items.py │ │ ├── middlewares.py │ │ ├── pipelines.py │ │ ├── settings.py │ │ └── spiders │ │ │ ├── __init__.py │ │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-38.pyc │ │ │ ├── bili_hot.cpython-38.pyc │ │ │ ├── up.cpython-38.pyc │ │ │ ├── weibo_hot.cpython-38.pyc │ │ │ ├── weibouser.cpython-38.pyc │ │ │ └── zhihu.cpython-38.pyc │ │ │ ├── bili_hot.py │ │ │ ├── up.py │ │ │ ├── weibo_hot.py │ │ │ ├── weibouser.py │ │ │ └── zhihu.py │ │ └── scrapy.cfg └── vue3前端 │ ├── README.md │ ├── babel.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ └── index.html │ ├── src │ ├── App copy.vue │ ├── App.vue │ ├── api │ │ └── index.ts │ ├── assets │ │ ├── login.jpg │ │ ├── login2.jpg │ │ ├── login22.jpg │ │ └── logo.png │ ├── components │ │ ├── HelloWorld.vue │ │ ├── bishare.vue │ │ └── testApi.vue │ ├── http.ts │ ├── main.ts │ ├── mock.js │ ├── router │ │ └── index.ts │ ├── shims-vue.d.ts │ ├── static │ │ ├── comment.png │ │ ├── like.png │ │ └── share.png │ ├── store │ │ └── index.ts │ ├── test.vue │ └── views │ │ ├── A.vue │ │ ├── AboutView.vue │ │ ├── HomeDynasic.vue │ │ ├── HomeView-zhihu.zip │ │ ├── HomeView.vue │ │ ├── Login.vue │ │ ├── Manage copy.vue │ │ ├── Manage.vue │ │ ├── Register.vue │ │ ├── person.vue │ │ └── testApi.vue │ ├── tsconfig.json │ └── vue.config.js └── 数据库应用系统报告.pdf /README.md: -------------------------------------------------------------------------------- 1 | # Comprehensive-information-website 2 | 3 | 后端使用Django,前端使用Vue3,爬虫使用Scrapy ,数据库使用Mysql实现的资讯综合网站,包含微博、b站、知乎的热榜信息以及微博和b站的博主的动态信息,并将其统一展示在网页中以方便浏览,还包含完善的个人管理页面和超级用户管理页面 4 | 5 | **热榜** 6 | 7 | ![image](https://user-images.githubusercontent.com/65942634/233374822-07b57074-534e-4520-9d3f-c005ef808d53.png) 8 | 9 | ![image](https://user-images.githubusercontent.com/65942634/233374836-027f9cfc-a2ac-40a2-b933-507c3443f191.png) 10 | 11 | ![image](https://user-images.githubusercontent.com/65942634/233374851-25fb5290-5e92-444f-b4f8-506860081e26.png) 12 | 13 | **动态** 14 | 15 | ![image](https://user-images.githubusercontent.com/65942634/233374925-f3dace28-e54e-4706-abab-e6e891eccbbc.png) 16 | 17 | ![image](https://user-images.githubusercontent.com/65942634/233374938-78c1c69f-17db-4c5a-a3a7-e0df5ccb8fca.png) 18 | 19 | ## 数据流图 20 | 21 | ![image](https://user-images.githubusercontent.com/65942634/233379040-78dba2f9-ad50-4145-8cff-29f7365d737a.png) 22 | 23 | ## 后端功能介绍 24 | 25 | ![image](https://user-images.githubusercontent.com/65942634/233377275-b337afb7-a69b-42a2-ad48-d2ad1f7f6ff6.png) 26 | 27 | ## 爬虫功能介绍 28 | 29 | * 爬取知乎热榜 30 | * 爬取微博热榜 31 | * 爬取b站热榜 32 | * 爬取微博博主动态 33 | * 爬取b站up主动态 34 | 35 | ## 数据库需求介绍 36 | 37 | ![image](https://user-images.githubusercontent.com/65942634/233377666-5d6919d7-1875-417c-affa-895b993ebaa8.png) 38 | 39 | ![image](https://user-images.githubusercontent.com/65942634/233377676-c68942d1-5db3-4b83-a10e-70adf33633f5.png) 40 | 41 | ![image](https://user-images.githubusercontent.com/65942634/233377701-9cdfccc0-6abd-4236-93e6-c8f9496d4b80.png) 42 | 43 | ![image](https://user-images.githubusercontent.com/65942634/233377713-565936df-9451-4f7f-a076-903fd6f579ef.png) 44 | 45 | ![image](https://user-images.githubusercontent.com/65942634/233377724-cdd09fd2-582c-48d1-9a06-075479a50bf3.png) 46 | 47 | ![image](https://user-images.githubusercontent.com/65942634/233378930-d5e47f1a-df94-4707-a167-592efbfed134.png) 48 | 49 | 50 | ## 前端介绍 51 | 52 | 登陆页面 53 | 54 | * 走马灯式的设计 55 | * 一个页面承载3个热榜 56 | * 任何人都可以访问 57 | * 按钮随着身份进行变化 58 | 59 | ![image](https://user-images.githubusercontent.com/65942634/233377901-7c445465-35ab-4515-ae02-b0af3577499f.png) 60 | 61 | 热榜页面 62 | 63 | ![image](https://user-images.githubusercontent.com/65942634/233377965-f8adb582-e8e4-4541-8789-ffb408ef9340.png) 64 | 65 | ![image](https://user-images.githubusercontent.com/65942634/233377975-910e5e7a-c5c0-4321-b13e-3ef3f2973bac.png) 66 | 67 | ![image](https://user-images.githubusercontent.com/65942634/233377993-c94a9c7c-02fc-4bce-971d-e124758512e5.png) 68 | 69 | 动态页面 70 | 71 | * 走马灯式的设计 72 | * 一个页面承载2个动态 73 | * 不登录不能查看 74 | * 支持多种类的动态卡片 75 | 76 | ![image](https://user-images.githubusercontent.com/65942634/233378078-9053361b-5bd4-48ac-a120-2dd7fd2ce883.png) 77 | 78 | ![image](https://user-images.githubusercontent.com/65942634/233378097-c7bae3c8-ac15-4893-8bd3-ba4c77b07bfb.png) 79 | 80 | 个人页面 81 | 82 | * 展示b站、微博关注的人 83 | * 关注、取消关注b站、微博的人 84 | * 修改用户名 85 | * 修改密码 86 | * 退出登陆 87 | 88 | ![image](https://user-images.githubusercontent.com/65942634/233378301-c3f5f5fb-5ba4-4424-b499-2f4dadc88643.png) 89 | 90 | 超级用户管理页面 91 | 92 | * 添加、删除用户 93 | * 修改用户密码 94 | * 添加、删除b站、微博需要爬取的博主 95 | * 修改热榜的爬取时间间隔 96 | 97 | ![image](https://user-images.githubusercontent.com/65942634/233378561-609fdcad-85e7-4bb9-bbdd-f7c5e54d0ef8.png) 98 | 99 | ![image](https://user-images.githubusercontent.com/65942634/233378577-4d5c61c6-c8ca-40d0-b395-db0b900a53d1.png) 100 | 101 | ![image](https://user-images.githubusercontent.com/65942634/233378599-f82e1c2e-d3c1-40d1-bc48-b4f6b94b022a.png) 102 | 103 | ![image](https://user-images.githubusercontent.com/65942634/233378617-d4b16509-1ed5-4fd0-b641-76f797008531.png) 104 | 105 | ![image](https://user-images.githubusercontent.com/65942634/233378632-20044db6-834b-4d4d-a707-d60c63e3a1dc.png) 106 | 107 | -------------------------------------------------------------------------------- /介绍PPT.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/介绍PPT.pptx -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__pycache__/admin.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__pycache__/admin.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__pycache__/apps.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__pycache__/apps.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__pycache__/models.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__pycache__/models.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__pycache__/permissions.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__pycache__/permissions.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__pycache__/serializers.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__pycache__/serializers.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__pycache__/urls.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__pycache__/urls.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/__pycache__/views.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/__pycache__/views.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Article,crawlTimeManage 3 | 4 | 5 | # Register your models here. 6 | class ArticleAdmin(admin.ModelAdmin): 7 | list_display = ('title', 'author', 'status', 'create_date') 8 | 9 | '''filter options''' 10 | list_filter = ('status',) 11 | 12 | '''10 items per page''' 13 | list_per_page = 10 14 | 15 | class crawlTimeManageAdmin(admin.ModelAdmin): 16 | list_display = ('biliHotTime', 'weiboHotTime', 'zhihuHotTime', 'biliDynasicTime','weiboDynasicTime') 17 | 18 | '''10 items per page''' 19 | list_per_page = 10 20 | 21 | # admin.site.register(Article, ArticleAdmin) 22 | admin.site.register(crawlTimeManage, crawlTimeManageAdmin) -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ApiConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'api' 7 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-09 12:39 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | initial = True 11 | 12 | dependencies = [ 13 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='Article', 19 | fields=[ 20 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 21 | ('title', models.CharField(db_index=True, max_length=90, verbose_name='Title (*)')), 22 | ('body', models.TextField(blank=True, verbose_name='Body')), 23 | ('status', models.CharField(blank=True, choices=[('p', 'Published'), ('d', 'Draft')], default='s', max_length=1, null=True, verbose_name='Status (*)')), 24 | ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Create Date')), 25 | ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='articles', to=settings.AUTH_USER_MODEL, verbose_name='Author')), 26 | ], 27 | options={ 28 | 'verbose_name': 'Article', 29 | 'verbose_name_plural': 'Articles', 30 | 'ordering': ['-create_date'], 31 | }, 32 | ), 33 | ] 34 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0002_z_hot.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 02:54 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='Z_hot', 15 | fields=[ 16 | ('Z_hot_list_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='知乎热榜id')), 17 | ('Z_hot_list_time', models.DateTimeField(auto_now_add=True, verbose_name='知乎热榜更新时间')), 18 | ('Z_hot_list_sum', models.IntegerField(default=0, verbose_name='知乎热榜查看次数')), 19 | ], 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0003_z_hot_item.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 03:05 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0002_z_hot'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='Z_hot_item', 16 | fields=[ 17 | ('Z_hot_item_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='知乎热榜条目id')), 18 | ('Z_item_rank', models.IntegerField(verbose_name='知乎热榜条目排名')), 19 | ('Z_item_name', models.CharField(max_length=500, verbose_name='知乎热榜条目标题')), 20 | ('Z_item_hot', models.CharField(max_length=500, verbose_name='知乎热榜条目热度值')), 21 | ('Z_item_cover_url', models.CharField(max_length=500, verbose_name='知乎热榜条目封面图片url')), 22 | ('Z_item_click_sum', models.IntegerField(default=0, verbose_name='知乎热榜条目查看次数')), 23 | ('Z_item_url', models.CharField(max_length=500, verbose_name='知乎热榜条目url')), 24 | ('Z_hot_list_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='z_hot', to='api.z_hot', verbose_name='知乎热榜id')), 25 | ], 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0004_alter_z_hot_item_z_hot_list_id.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 03:07 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0003_z_hot_item'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='z_hot_item', 16 | name='Z_hot_list_id', 17 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.z_hot', verbose_name='知乎热榜id'), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0005_alter_z_hot_item_z_hot_list_id.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 03:12 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0004_alter_z_hot_item_z_hot_list_id'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='z_hot_item', 16 | name='Z_hot_list_id', 17 | field=models.ForeignKey(db_column='f', on_delete=django.db.models.deletion.CASCADE, related_name='z_hot', to='api.z_hot', verbose_name='知乎热榜id'), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0006_alter_z_hot_item_z_hot_list_id.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 03:13 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0005_alter_z_hot_item_z_hot_list_id'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='z_hot_item', 16 | name='Z_hot_list_id', 17 | field=models.ForeignKey(db_column='Z_hot_list_id', on_delete=django.db.models.deletion.CASCADE, related_name='z_hot', to='api.z_hot', verbose_name='知乎热榜id'), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0007_rename_z_hot_item_id_z_hot_item_z_item_id.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 07:39 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0006_alter_z_hot_item_z_hot_list_id'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='z_hot_item', 15 | old_name='Z_hot_item_id', 16 | new_name='Z_item_id', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0008_auto_20220410_1612.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 08:12 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0007_rename_z_hot_item_id_z_hot_item_z_item_id'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name='z_hot_item', 15 | name='Z_hot_list_id', 16 | ), 17 | migrations.DeleteModel( 18 | name='Z_hot', 19 | ), 20 | migrations.DeleteModel( 21 | name='Z_hot_item', 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/0009_crawltimemanage.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-06-12 10:11 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0008_auto_20220410_1612'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='crawlTimeManage', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('biliHotTime', models.IntegerField(default=1, verbose_name='b站热门刷新时间/min')), 18 | ('weiboHotTime', models.IntegerField(default=1, verbose_name='微博热门刷新时间/min')), 19 | ('zhihuHotTime', models.IntegerField(default=1, verbose_name='知乎热门刷新时间/min')), 20 | ('biliDynasicTime', models.IntegerField(default=1, verbose_name='b站动态刷新时间/min')), 21 | ('weiboDynasicTime', models.IntegerField(default=1, verbose_name='微博动态刷新时间/min')), 22 | ], 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0001_initial.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0001_initial.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0002_z_hot.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0002_z_hot.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0003_z_hot_item.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0003_z_hot_item.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0004_alter_z_hot_item_z_hot_list_id.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0004_alter_z_hot_item_z_hot_list_id.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0005_alter_z_hot_item_z_hot_list_id.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0005_alter_z_hot_item_z_hot_list_id.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0006_alter_z_hot_item_z_hot_list_id.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0006_alter_z_hot_item_z_hot_list_id.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0007_rename_z_hot_item_id_z_hot_item_z_item_id.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0007_rename_z_hot_item_id_z_hot_item_z_item_id.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0008_auto_20220410_1612.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0008_auto_20220410_1612.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/0009_crawltimemanage.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/0009_crawltimemanage.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/migrations/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/api/migrations/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.utils.translation import ugettext_lazy as _ 3 | from django.contrib.auth import get_user_model 4 | 5 | User = get_user_model() 6 | class crawlTimeManage(models.Model): 7 | biliHotTime=models.IntegerField (verbose_name=_('b站热门刷新时间/min'),default=1) 8 | weiboHotTime=models.IntegerField (verbose_name=_('微博热门刷新时间/min'),default=1) 9 | zhihuHotTime=models.IntegerField (verbose_name=_('知乎热门刷新时间/min'),default=1) 10 | biliDynasicTime=models.IntegerField (verbose_name=_('b站动态刷新时间/min'),default=1) 11 | weiboDynasicTime=models.IntegerField (verbose_name=_('微博动态刷新时间/min'),default=1) 12 | 13 | class Article(models.Model): 14 | """Article Model""" 15 | STATUS_CHOICES = ( 16 | ('p', _('Published')), 17 | ('d', _('Draft')), 18 | ) 19 | 20 | title = models.CharField(verbose_name=_('Title (*)'), max_length=90, db_index=True) 21 | body = models.TextField(verbose_name=_('Body'), blank=True) 22 | author = models.ForeignKey(User, verbose_name=_('Author'), on_delete=models.CASCADE, related_name='articles') 23 | status = models.CharField(_('Status (*)'), max_length=1, choices=STATUS_CHOICES, default='s', null=True, blank=True) 24 | create_date = models.DateTimeField(verbose_name=_('Create Date'), auto_now_add=True) 25 | 26 | def __str__(self): 27 | return self.title 28 | 29 | class Meta: 30 | ordering = ['-create_date'] 31 | verbose_name = "Article" 32 | verbose_name_plural = "Articles" 33 | 34 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/permissions.py: -------------------------------------------------------------------------------- 1 | # blog/permissions.py 2 | from rest_framework import permissions 3 | 4 | class IsOwnerOrReadOnly(permissions.BasePermission): 5 | """ 6 | 自定义权限只允许对象的创建者才能编辑它。""" 7 | def has_object_permission(self, request, view, obj): 8 | # 读取权限被允许用于任何请求, 9 | # 所以我们始终允许 GET,HEAD 或 OPTIONS 请求。 10 | if request.method in permissions.SAFE_METHODS: 11 | return True 12 | # 写入权限只允许给 article 的作者。 13 | return obj.author == request.user -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from .models import Article,crawlTimeManage 3 | from django.contrib.auth import get_user_model 4 | 5 | User = get_user_model() 6 | class UserSerializer(serializers.ModelSerializer): 7 | 8 | class Meta: 9 | model = User 10 | fields = ('id', 'username', 'email','is_staff','date_joined') 11 | class crawlTimeManageSerializer(serializers.ModelSerializer): 12 | class Meta: 13 | model=crawlTimeManage 14 | fields = '__all__' 15 | # class UserSerializer(serializers.ModelSerializer): 16 | # articles = serializers.PrimaryKeyRelatedField(many=True, read_only=True) 17 | # 18 | # class Meta: 19 | # model = User 20 | # fields = ('id', 'username', 'articles',) 21 | # read_only_fields = ('id', 'username',) 22 | 23 | class ArticleSerializer(serializers.ModelSerializer): 24 | # author = UserSerializer() # required=False表示可接受匿名用户,many=True表示有多个用户。 25 | status = serializers.ReadOnlyField(source="get_status_display") 26 | # cn_status = serializers.SerializerMethodField() 27 | # author = UserSerializer(read_only=True) 28 | 29 | class Meta: 30 | model = Article 31 | fields = '__all__' 32 | read_only_fields = ('id','create_date')#,'author' 33 | 34 | def get_cn_status(self, obj): 35 | if obj.status == 'p': 36 | return "已发表" 37 | elif obj.status == 'd': 38 | return "草稿" 39 | else: 40 | return '' 41 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import re_path,include,path 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | from . import views 4 | 5 | urlpatterns = [ 6 | # re_path(r'^articles/$', views.article_list), 7 | # re_path(r'^articles/(?P[0-9]+)$', views.article_detail), 8 | # # re_path(r'articles', views.ArticleList.as_view()), 9 | # re_path(r'^articles/$', views.ArticleList.as_view()), 10 | # # re_path(r'^users/$', views.ArticleList.as_view()), 11 | # re_path(r'^articles/(?P[0-9]+)$', views.ArticleDetail.as_view()), 12 | # re_path(r'^users/$', views.ArticleList.as_view()), 13 | re_path('register', views.Register.as_view()), 14 | re_path('login', views.Login.as_view()), 15 | re_path('chpasswd', views.ChangePasswd.as_view()), 16 | re_path('chname', views.ChangeName.as_view()), 17 | re_path('normalUser', views.normalUser.as_view()), 18 | re_path('superUser', views.superUser.as_view()), 19 | re_path('isRoot', views.isRoot.as_view()), 20 | re_path('timeManage',views.crawlTimeManageList.as_view()), 21 | re_path('rootChangePasswd',views.rootChangePasswd.as_view()), 22 | # re_path(r'^bili/$', include('bili.urls')), 23 | ] 24 | 25 | urlpatterns = format_suffix_patterns(urlpatterns) 26 | urlpatterns.append(path('bili/',include('bili.urls'))) 27 | urlpatterns.append(path('weibo/',include('weibo.urls'))) 28 | urlpatterns.append(path('zhihu/',include('zhihu.urls'))) 29 | 30 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/api/views.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.models import User 2 | from .models import Article,crawlTimeManage 3 | from rest_framework.authtoken.views import APIView,AuthTokenSerializer 4 | from rest_framework.authtoken.models import Token 5 | from rest_framework.response import Response 6 | from rest_framework import generics 7 | from rest_framework import permissions 8 | from django.contrib.auth.hashers import make_password 9 | from rest_framework.authentication import TokenAuthentication 10 | from .serializers import UserSerializer,crawlTimeManageSerializer 11 | # 用户注册 12 | class Register(APIView): 13 | authentication_classes = [] 14 | def post(self,request, *args, **kwargs): 15 | username = request.data.get('username') 16 | password = request.data.get('password') 17 | print('username,password:',username,password) 18 | try: 19 | is_staff=request.data.get("is_staff") 20 | if not is_staff: 21 | is_staff = "False" 22 | except: 23 | is_staff="False" 24 | if User.objects.filter(username=username).exists(): 25 | resp = { 26 | 'status':False, 27 | 'data':'用户名已被注册' 28 | } 29 | else: 30 | user = User.objects.create_user(username=username,password=password,is_staff=is_staff) 31 | token, created = Token.objects.get_or_create(user=user) 32 | resp = { 33 | 'status':True, 34 | 'token': token.key, 35 | 'user_id': user.pk, 36 | 'user_name': user.username, 37 | } 38 | return Response(resp) 39 | class ChangePasswd(generics.CreateAPIView): 40 | queryset = User.objects.all() 41 | serializer_class = UserSerializer 42 | authentication_classes = (TokenAuthentication,) # token认证 43 | def post(self, request, *args, **kwargs): 44 | user=User.objects.get(username=self.request.user) 45 | user.set_password(request.data.get('newpassword')) 46 | user.save() 47 | return Response(status=200) 48 | 49 | class ChangeName(generics.CreateAPIView): 50 | queryset = User.objects.all() 51 | serializer_class = UserSerializer 52 | authentication_classes = (TokenAuthentication,) # token认证 53 | def post(self, request, *args, **kwargs): 54 | user=User.objects.get(username=self.request.user) 55 | user.username=request.data.get('newname') 56 | user.save() 57 | return Response(status=200) 58 | 59 | class rootChangePasswd(APIView): 60 | authentication_classes = [] 61 | def post(self, request, *args, **kwargs): 62 | print(request.data) 63 | user=User.objects.get(username=request.data['username']) 64 | user.set_password(request.data['newpassword']) 65 | user.save() 66 | return Response(status=200) 67 | 68 | 69 | class normalUser(APIView): 70 | authentication_classes = [] 71 | def get(self, request, *args, **kwargs): 72 | a=User.objects.all().filter(is_staff="False") 73 | s=UserSerializer(a,many=True) 74 | return Response(s.data) 75 | def post(self, request, *args, **kwargs): 76 | m=User.objects.get(username=request.data['data']['username']) 77 | m.delete() 78 | resp = { 79 | 'status': True, 80 | 'data': '删除成功' 81 | } 82 | return Response(resp) 83 | class superUser(APIView): 84 | authentication_classes = [] 85 | def get(self, request, *args, **kwargs): 86 | a=User.objects.all().filter(is_staff="True") 87 | s=UserSerializer(a,many=True) 88 | return Response(s.data) 89 | def post(self, request, *args, **kwargs): 90 | print(request.data) 91 | m=User.objects.get(username=request.data['data']['username']) 92 | m.delete() 93 | resp = { 94 | 'status': True, 95 | 'data': '删除成功' 96 | } 97 | return Response(resp) 98 | class isRoot(generics.ListAPIView): 99 | authentication_classes = (TokenAuthentication,) # token认证 100 | permission_classes = (permissions.IsAuthenticated,) # IsAuthenticatedOrReadOnly 101 | def get(self, request, *args, **kwargs): 102 | res=User.objects.filter(username=self.request.user) 103 | resp = { 104 | 'status': res[0].is_staff, 105 | } 106 | return Response(resp) 107 | # 用户登录 108 | class Login(APIView): 109 | authentication_classes = [] 110 | def get(self, request, *args, **kwargs): 111 | a=User.objects.all() 112 | s=UserSerializer(a,many=True) 113 | return Response(s.data) 114 | def post(self, request, *args, **kwargs): 115 | print("request.data:",request.data) 116 | serializer = AuthTokenSerializer(data=request.data,context={'request': request}) 117 | if not serializer.is_valid(): 118 | return Response({ 119 | 'status':403, 120 | 'data':"用户名或密码不正确", 121 | }) 122 | user = serializer.validated_data['user'] 123 | token, created = Token.objects.get_or_create(user=user) 124 | return Response({ 125 | 'status':200, 126 | 'token': token.key, 127 | 'user_id': user.pk, 128 | 'user_name':user.username, 129 | }) 130 | from rest_framework import generics 131 | from rest_framework import permissions 132 | from .permissions import IsOwnerOrReadOnly 133 | from .models import Article 134 | from .serializers import ArticleSerializer 135 | from rest_framework.authentication import TokenAuthentication 136 | 137 | class ArticleList(generics.ListCreateAPIView): 138 | queryset = Article.objects.all() 139 | serializer_class = ArticleSerializer 140 | authentication_classes = (TokenAuthentication,) # token认证 141 | permission_classes = (permissions.IsAuthenticated,)#IsAuthenticatedOrReadOnly 142 | # important 143 | def get(self, request, *args, **kwargs): 144 | print('==================') 145 | print(self.request.user) 146 | print('==================') 147 | print(request.data) 148 | return Response(ArticleSerializer(Article.objects.get(pk=3)).data) 149 | # return self.list(request, *args, **kwargs) 150 | 151 | def perform_create(self, serializer): 152 | print('==================') 153 | print(self.request.user) 154 | print('==================') 155 | serializer.save()#(author=self.request.user) 156 | 157 | class ArticleDetail(generics.RetrieveUpdateDestroyAPIView): 158 | queryset = Article.objects.all() 159 | serializer_class =ArticleSerializer 160 | authentication_classes = (TokenAuthentication,) # token认证 161 | permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly) 162 | 163 | class crawlTimeManageList(APIView): 164 | authentication_classes = [] 165 | def get(self, request, *args, **kwargs): 166 | a=crawlTimeManage.objects.filter(pk=1)[0] 167 | print(a) 168 | s=crawlTimeManageSerializer(a) 169 | return Response(s.data) 170 | def post(self, request, *args, **kwargs): 171 | print(request.data) 172 | flag=True 173 | if not (str(request.data['biliDynasicTime']).isdigit() and str(request.data['weiboDynasicTime']).isdigit() 174 | and str(request.data['biliHotTime']).isdigit()and str(request.data['weiboHotTime']).isdigit() 175 | and str(request.data['zhihuHotTime']).isdigit()): 176 | flag=False 177 | if flag: 178 | a = crawlTimeManage.objects.filter(pk=1)[0] 179 | a.biliDynasicTime = request.data['biliDynasicTime'] 180 | a.weiboDynasicTime = request.data['weiboDynasicTime'] 181 | a.biliHotTime = request.data['biliHotTime'] 182 | a.weiboHotTime = request.data['weiboHotTime'] 183 | a.zhihuHotTime = request.data['zhihuHotTime'] 184 | a.save() 185 | resp = { 186 | 'status': True, 187 | 'data': '修改成功' 188 | } 189 | else: 190 | resp = { 191 | 'status': False, 192 | 'data': '数据错误' 193 | } 194 | return Response(resp) 195 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/__pycache__/admin.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/__pycache__/admin.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/__pycache__/apps.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/__pycache__/apps.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/__pycache__/models.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/__pycache__/models.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/__pycache__/serializers.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/__pycache__/serializers.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/__pycache__/urls.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/__pycache__/urls.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/__pycache__/views.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/__pycache__/views.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Bili_hot,Bili_hot_item,up_list,dynasic,follow_list 3 | class Bili_hotAdmin(admin.ModelAdmin): 4 | list_display = ('Bili_hot_list_id', 'Bili_hot_list_time', 'Bili_hot_list_sum') 5 | 6 | '''10 items per page''' 7 | list_per_page = 10 8 | class Bili_hot_itemAdmin(admin.ModelAdmin): 9 | list_display = ('Bili_item_id', 'Bili_hot_list_id','Bili_item_name', 10 | 'Bili_item_up','Bili_item_view','Bili_item_comment','Bili_item_cover_url', 11 | 'Bili_item_click_sum','Bili_item_url') 12 | 13 | '''10 items per page''' 14 | list_per_page = 10 15 | class Bili_up_listAdmin(admin.ModelAdmin): 16 | list_display = ('Bili_up_id', 'Bili_up_name','Bili_up_face_url') 17 | 18 | '''10 items per page''' 19 | list_per_page = 10 20 | class Bili_dynasicAdmin(admin.ModelAdmin): 21 | list_display = ('Bili_dynasic_id', 'Bili_up_id','Bili_type','Bili_share','Bili_comment' 22 | ,'Bili_like','Bili_post_time','Bili_url_id','Bili_content','Bili_pic_urls', 23 | 'Bili_video_title','Bili_video_url','Bili_video_pic_url','Bili_video_desc' 24 | ,'Bili_original_up','Bili_original_content') 25 | 26 | '''10 items per page''' 27 | list_per_page = 10 28 | 29 | class Bili_follow_listAdmin(admin.ModelAdmin): 30 | list_display = ('Bili_up_id', 'Bili_user_id','Bili_is_special',) 31 | '''10 items per page''' 32 | list_per_page = 10 33 | admin.site.register(Bili_hot, Bili_hotAdmin) 34 | admin.site.register(Bili_hot_item, Bili_hot_itemAdmin) 35 | admin.site.register(up_list, Bili_up_listAdmin) 36 | admin.site.register(dynasic, Bili_dynasicAdmin) 37 | admin.site.register(follow_list, Bili_follow_listAdmin) -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class BiliConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'bili' 7 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-29 09:20 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | initial = True 11 | 12 | dependencies = [ 13 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='Bili_hot', 19 | fields=[ 20 | ('Bili_hot_list_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='b站热门id')), 21 | ('Bili_hot_list_time', models.DateTimeField(auto_now_add=True, verbose_name='b站热门更新时间')), 22 | ('Bili_hot_list_sum', models.IntegerField(default=0, verbose_name='b站热门查看次数')), 23 | ], 24 | ), 25 | migrations.CreateModel( 26 | name='up_list', 27 | fields=[ 28 | ('Bili_up_id', models.IntegerField(db_index=True, primary_key=True, serialize=False, verbose_name='b站up主id')), 29 | ('Bili_up_name', models.CharField(max_length=500, verbose_name='b站up主昵称')), 30 | ('Bili_up_face_url', models.CharField(max_length=500, verbose_name='b站up主头像url')), 31 | ], 32 | ), 33 | migrations.CreateModel( 34 | name='follow_list', 35 | fields=[ 36 | ('Bili_follow_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='关注列表关系id')), 37 | ('Bili_is_special', models.IntegerField(default=0, verbose_name='是否特别关注')), 38 | ('Bili_up_id', models.ForeignKey(db_column='Bili_up_id', on_delete=django.db.models.deletion.CASCADE, related_name='follow_up_list', to='bili.up_list', verbose_name='b站up主id')), 39 | ('Bili_user_id', models.ForeignKey(db_column='Bili_user_id', on_delete=django.db.models.deletion.CASCADE, related_name='follow_auth_user', to=settings.AUTH_USER_MODEL, verbose_name='本站用户id')), 40 | ], 41 | ), 42 | migrations.CreateModel( 43 | name='dynasic', 44 | fields=[ 45 | ('Bili_dynasic_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='b站动态id')), 46 | ('Bili_type', models.IntegerField(verbose_name='b站动态类型')), 47 | ('Bili_share', models.IntegerField(verbose_name='b站动态分享数')), 48 | ('Bili_comment', models.IntegerField(verbose_name='b站动态评论数')), 49 | ('Bili_like', models.IntegerField(verbose_name='b站动态点赞数')), 50 | ('Bili_post_time', models.IntegerField(verbose_name='b站动态发布时间')), 51 | ('Bili_url_id', models.CharField(blank=True, max_length=500, null=True, verbose_name='b站动态链接id')), 52 | ('Bili_content', models.CharField(blank=True, max_length=5000, null=True, verbose_name='b站动态文字内容')), 53 | ('Bili_pic_urls', models.CharField(blank=True, max_length=900, null=True, verbose_name='b站动态图片链接集合')), 54 | ('Bili_video_title', models.CharField(blank=True, max_length=500, null=True, verbose_name='b站动态视频标题')), 55 | ('Bili_video_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='b站动态视频url')), 56 | ('Bili_video_pic_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='b站动态视频封面url')), 57 | ('Bili_video_desc', models.CharField(blank=True, max_length=1000, null=True, verbose_name='b站动态视频简介')), 58 | ('Bili_original_up', models.CharField(blank=True, max_length=1000, null=True, verbose_name='b站动态转发的原up')), 59 | ('Bili_original_content', models.CharField(blank=True, max_length=5000, null=True, verbose_name='b站动态转发的原内容')), 60 | ('Bili_up_id', models.ForeignKey(db_column='Bili_up_id', on_delete=django.db.models.deletion.CASCADE, related_name='Bili_up_list', to='bili.up_list', verbose_name='b站up主id')), 61 | ], 62 | ), 63 | migrations.CreateModel( 64 | name='Bili_hot_item', 65 | fields=[ 66 | ('Bili_item_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='b站热门视频id')), 67 | ('Bili_item_name', models.CharField(max_length=500, verbose_name='b站热门视频标题')), 68 | ('Bili_item_up', models.CharField(max_length=500, verbose_name='b站热门视频Up主')), 69 | ('Bili_item_view', models.IntegerField(default=0, verbose_name='b站热门视频观看数')), 70 | ('Bili_item_comment', models.IntegerField(default=0, verbose_name='b站热门视频评论数')), 71 | ('Bili_item_cover_url', models.CharField(max_length=500, verbose_name='b站热门视频封面图片url')), 72 | ('Bili_item_click_sum', models.IntegerField(default=0, verbose_name='b站热门视频点击次数')), 73 | ('Bili_item_url', models.CharField(max_length=500, verbose_name='b站热门视频url')), 74 | ('Bili_hot_list_id', models.ForeignKey(db_column='Bili_hot_list_id', on_delete=django.db.models.deletion.CASCADE, related_name='bili_hot', to='bili.bili_hot', verbose_name='b站热门id')), 75 | ], 76 | ), 77 | ] 78 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/0002_dynasic_list.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-30 03:13 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('bili', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='dynasic_list', 15 | fields=[ 16 | ('up_date_time', models.DateTimeField(db_index=True, primary_key=True, serialize=False, verbose_name='b站动态更新时间')), 17 | ], 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/0003_rename_dynasic_list_dynasic_time_list.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-30 03:14 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('bili', '0002_dynasic_list'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameModel( 14 | old_name='dynasic_list', 15 | new_name='dynasic_time_list', 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/migrations/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/__pycache__/0001_initial.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/migrations/__pycache__/0001_initial.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/__pycache__/0002_alter_followed_list_bili_followed_id.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/migrations/__pycache__/0002_alter_followed_list_bili_followed_id.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/__pycache__/0002_dynasic_list.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/migrations/__pycache__/0002_dynasic_list.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/__pycache__/0003_rename_dynasic_list_dynasic_time_list.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/migrations/__pycache__/0003_rename_dynasic_list_dynasic_time_list.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/migrations/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/bili/migrations/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.utils.translation import ugettext_lazy as _ 3 | from django.contrib.auth import get_user_model 4 | from django.contrib.auth import settings 5 | User = get_user_model() 6 | # Create your models here. 7 | class Bili_hot(models.Model): 8 | Bili_hot_list_id=models.AutoField(verbose_name=_('b站热门id'),primary_key=True,db_index=True) 9 | Bili_hot_list_time = models.DateTimeField(verbose_name=_('b站热门更新时间'), auto_now_add=True) 10 | Bili_hot_list_sum=models.IntegerField (verbose_name=_('b站热门查看次数'),default=0) 11 | 12 | class Bili_hot_item(models.Model): 13 | Bili_item_id=models.AutoField(verbose_name=_('b站热门视频id'),primary_key=True,db_index=True) 14 | Bili_hot_list_id=models.ForeignKey(Bili_hot, verbose_name=_('b站热门id'), on_delete=models.CASCADE, db_column='Bili_hot_list_id', related_name='bili_hot') 15 | Bili_item_name=models.CharField(verbose_name=_('b站热门视频标题'),max_length=500) 16 | Bili_item_up = models.CharField(verbose_name=_('b站热门视频Up主'), max_length=500) 17 | Bili_item_view = models.IntegerField(verbose_name=_('b站热门视频观看数'), default=0) 18 | Bili_item_comment = models.IntegerField(verbose_name=_('b站热门视频评论数'), default=0) 19 | Bili_item_cover_url=models.CharField(verbose_name=_('b站热门视频封面图片url'),max_length=500) 20 | Bili_item_click_sum=models.IntegerField (verbose_name=_('b站热门视频点击次数'),default=0) 21 | Bili_item_url=models.CharField(verbose_name=_('b站热门视频url'),max_length=500) 22 | 23 | class up_list(models.Model): 24 | Bili_up_id=models.IntegerField (verbose_name=_('b站up主id'),primary_key=True,db_index=True) 25 | Bili_up_name=models.CharField(verbose_name=_('b站up主昵称'),max_length=500) 26 | Bili_up_face_url=models.CharField(verbose_name=_('b站up主头像url'),max_length=500) 27 | def __str__(self): 28 | return self.Bili_up_name 29 | 30 | class follow_list(models.Model):#,on_delete=models.CASCADE, db_column='Bili_up_id', related_name='up_list' 31 | Bili_follow_id = models.AutoField(verbose_name=_('关注列表关系id'), primary_key=True, db_index=True) 32 | Bili_up_id=models.ForeignKey(up_list,verbose_name=_('b站up主id'), db_index=True,on_delete=models.CASCADE, db_column='Bili_up_id', related_name='follow_up_list') 33 | Bili_user_id=models.ForeignKey(User, db_index=True,verbose_name=_('本站用户id'),on_delete=models.CASCADE, db_column='Bili_user_id', related_name='follow_auth_user') 34 | Bili_is_special=models.IntegerField(verbose_name=_('是否特别关注'),default=0) 35 | 36 | class dynasic_time_list(models.Model): 37 | up_date_time=models.DateTimeField(verbose_name=_('b站动态更新时间'),primary_key=True,db_index=True) 38 | 39 | class dynasic(models.Model):#,null=True, blank=True 40 | Bili_dynasic_id=models.AutoField(verbose_name=_('b站动态id'),primary_key=True,db_index=True) 41 | Bili_up_id=models.ForeignKey(up_list, verbose_name=_('b站up主id'), on_delete=models.CASCADE, db_column='Bili_up_id', related_name='Bili_up_list') 42 | Bili_type=models.IntegerField (verbose_name=_('b站动态类型')) 43 | Bili_share=models.IntegerField (verbose_name=_('b站动态分享数')) 44 | Bili_comment=models.IntegerField (verbose_name=_('b站动态评论数')) 45 | Bili_like=models.IntegerField (verbose_name=_('b站动态点赞数')) 46 | Bili_post_time=models.IntegerField (verbose_name=_('b站动态发布时间')) 47 | Bili_url_id=models.CharField(verbose_name=_('b站动态链接id'),max_length=500,null=True, blank=True) 48 | Bili_content=models.CharField(verbose_name=_('b站动态文字内容'),max_length=5000,null=True, blank=True) 49 | Bili_pic_urls=models.CharField(verbose_name=_('b站动态图片链接集合'),max_length=900,null=True, blank=True) 50 | Bili_video_title=models.CharField(verbose_name=_('b站动态视频标题'),max_length=500,null=True, blank=True) 51 | Bili_video_url=models.CharField(verbose_name=_('b站动态视频url'),max_length=500,null=True, blank=True) 52 | Bili_video_pic_url=models.CharField(verbose_name=_('b站动态视频封面url'),max_length=500,null=True, blank=True) 53 | Bili_video_desc=models.CharField(verbose_name=_('b站动态视频简介'),max_length=1000,null=True, blank=True) 54 | Bili_original_up = models.CharField(verbose_name=_('b站动态转发的原up'), max_length=1000, null=True, blank=True) 55 | Bili_original_content=models.CharField(verbose_name=_('b站动态转发的原内容'), max_length=5000, null=True, blank=True) 56 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from .models import Bili_hot,Bili_hot_item,dynasic,up_list,follow_list 3 | from django.contrib.auth import get_user_model 4 | 5 | class Bili_hot_Serializer(serializers.ModelSerializer): 6 | class Meta: 7 | model = Bili_hot 8 | fields = '__all__' 9 | 10 | class Bili_hot_item_Serializer(serializers.ModelSerializer): 11 | class Meta: 12 | model = Bili_hot_item 13 | fields = '__all__'#('Z_item_rank','Z_item_name','Z_item_hot','Z_item_cover_url','Z_item_url') 14 | class Bili_up_list_Serializer(serializers.ModelSerializer): 15 | class Meta: 16 | model = up_list 17 | fields = '__all__' 18 | 19 | 20 | class Bili_dynasic_Serializer(serializers.ModelSerializer): 21 | class Meta: 22 | model = dynasic 23 | depth=1 24 | Bili_pic_urls = serializers.JSONField()#serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python') 25 | fields = '__all__' 26 | 27 | class Bili_follow_list_Serializer(serializers.ModelSerializer): 28 | class Meta: 29 | model = follow_list 30 | fields = '__all__' 31 | depth=1 -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import re_path,include 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | from . import views 4 | 5 | urlpatterns = [ 6 | re_path(r'^hot_item/$', views.Bili_hot_item_view.as_view()), 7 | re_path(r'^hot/$', views.Bili_hot_view.as_view()), 8 | re_path(r'^uplist/$', views.Bili_up_list_view.as_view()), 9 | re_path(r'^dynasic/$', views.Bili_dynasic_view.as_view()), 10 | re_path(r'^followlist/$', views.Bili_follow_view.as_view()), 11 | ] 12 | 13 | urlpatterns = format_suffix_patterns(urlpatterns) 14 | 15 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/bili/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from rest_framework import generics 3 | import json 4 | from rest_framework import permissions 5 | from .models import Bili_hot,Bili_hot_item,up_list,dynasic,follow_list 6 | from .serializers import Bili_hot_Serializer,Bili_hot_item_Serializer,Bili_dynasic_Serializer,Bili_up_list_Serializer,Bili_follow_list_Serializer 7 | from rest_framework.authentication import TokenAuthentication 8 | from rest_framework.response import Response 9 | from rest_framework import status 10 | from django.http import QueryDict 11 | from rest_framework import mixins 12 | from rest_framework import generics 13 | from django.contrib.auth import get_user_model 14 | User = get_user_model() 15 | # Create your views here. 16 | class Bili_hot_view(generics.ListAPIView): 17 | queryset = Bili_hot.objects.all() 18 | serializer_class = Bili_hot_Serializer 19 | 20 | class Bili_hot_item_view(generics.ListAPIView): 21 | queryset = Bili_hot_item.objects.all() 22 | serializer_class = Bili_hot_item_Serializer 23 | def get(self, request, *args, **kwargs): 24 | q = Bili_hot.objects.order_by('-Bili_hot_list_id')[0].Bili_hot_list_id 25 | queryset = self.queryset.filter(Bili_hot_list_id=q) 26 | while len(queryset)==0: 27 | q-=1 28 | queryset = self.queryset.filter(Bili_hot_list_id=q) 29 | return Response(self.serializer_class(queryset, many=True).data) 30 | 31 | class Bili_up_list_view(mixins.ListModelMixin,mixins.CreateModelMixin,mixins.DestroyModelMixin,generics.GenericAPIView): 32 | queryset = up_list.objects.all() 33 | 34 | authentication_classes = [] 35 | serializer_class = Bili_up_list_Serializer 36 | def get(self, request, *args, **kwargs): 37 | return self.list(request, *args, **kwargs) 38 | def post(self, request, *args, **kwargs): 39 | Bili_up_name=request.data.get('Bili_up_name') 40 | Bili_up_id=request.data.get('Bili_up_id') 41 | Bili_up_face_url=request.data.get('Bili_up_face_url') 42 | if up_list.objects.filter(Bili_up_id=Bili_up_id).exists(): 43 | resp = { 44 | 'status':False, 45 | 'data':'该up主已存在' 46 | } 47 | return Response(resp) 48 | else: 49 | up_list.objects.create(Bili_up_id=Bili_up_id,Bili_up_name=Bili_up_name,Bili_up_face_url=Bili_up_face_url) 50 | resp = { 51 | 'status':True, 52 | 'data':'创建成功' 53 | } 54 | return Response(resp) 55 | def delete(self, request, *args, **kwargs): 56 | print('delete') 57 | DELETE = QueryDict(request.body) 58 | data_id=list(DELETE.keys())[0] 59 | dic=json.loads(data_id) 60 | del_id=dic["Bili_up_id"] 61 | m=up_list.objects.get(Bili_up_id=del_id) 62 | m.delete() 63 | resp = { 64 | 'status': True, 65 | 'data': '删除成功' 66 | } 67 | return Response(resp) 68 | 69 | class Bili_dynasic_view(generics.ListAPIView): 70 | queryset = dynasic.objects.all() 71 | serializer_class = Bili_dynasic_Serializer 72 | authentication_classes = (TokenAuthentication,) # token认证 73 | permission_classes = (permissions.IsAuthenticated,) # IsAuthenticatedOrReadOnly 74 | def get(self, request, *args, **kwargs): 75 | print(self.request.user) 76 | user_id=User.objects.get(username=self.request.user).id 77 | follow_up=follow_list.objects.filter(Bili_user_id=user_id) 78 | allup_id=[] 79 | for fup in follow_up: 80 | up_id=fup.Bili_up_id.Bili_up_id 81 | allup_id.append(up_id) 82 | alldyna=dynasic.objects.filter(Bili_up_id__in=allup_id).order_by('-Bili_post_time') 83 | return Response(Bili_dynasic_Serializer(alldyna, many=True).data) 84 | 85 | class Bili_follow_view(mixins.ListModelMixin,mixins.CreateModelMixin,mixins.DestroyModelMixin,generics.GenericAPIView): 86 | queryset = follow_list.objects.all() 87 | serializer_class = Bili_follow_list_Serializer 88 | authentication_classes = (TokenAuthentication,) # token认证 89 | permission_classes = (permissions.IsAuthenticated,) # IsAuthenticatedOrReadOnly 90 | def get(self, request, *args, **kwargs): 91 | user_id=User.objects.get(username=self.request.user).id 92 | follow_up=follow_list.objects.filter(Bili_user_id=user_id) 93 | return Response(Bili_follow_list_Serializer(follow_up, many=True).data) 94 | 95 | def post(self, request, *args, **kwargs): 96 | Bili_user_id=User.objects.get(username=self.request.user)#.id 97 | Bili_is_special = request.data.get('Bili_is_special') 98 | Bili_follow_name = request.data.get('Bili_follow_name') 99 | Bili_up_id = up_list.objects.filter(Bili_up_name=Bili_follow_name)#.Bili_up_face_url 100 | Bid=0 101 | for b in Bili_up_id: 102 | Bid=b 103 | print("Bili_up_id",b) 104 | follow_list.objects.create(Bili_up_id=Bid,Bili_user_id=Bili_user_id,Bili_is_special=Bili_is_special) 105 | resp = { 106 | 'status': False, 107 | 'data': 'ok' 108 | } 109 | return Response(resp) 110 | def delete(self, request, *args, **kwargs): 111 | Bili_user_id=User.objects.get(username=self.request.user) 112 | DELETE = QueryDict(request.body) 113 | follow_name=list(DELETE.keys())[0] 114 | Bili_up = up_list.objects.get(Bili_up_name=follow_name) 115 | m=follow_list.objects.get(Bili_up_id=Bili_up,Bili_user_id=Bili_user_id) 116 | m.delete() 117 | resp = { 118 | 'status': True, 119 | 'data': '删除成功' 120 | } 121 | return Response(resp) 122 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testproject.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/testproject/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/testproject/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/__pycache__/settings.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/testproject/__pycache__/settings.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/__pycache__/urls.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/testproject/__pycache__/urls.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/__pycache__/wsgi.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/testproject/__pycache__/wsgi.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for testproject project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testproject.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for testproject project. 3 | 4 | Generated by 'django-admin startproject' using Django 3.2.5. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.2/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/3.2/ref/settings/ 11 | """ 12 | 13 | from pathlib import Path 14 | 15 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 16 | BASE_DIR = Path(__file__).resolve().parent.parent 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'django-insecure-1s1k^b!zft6up*a^x1d_)y2jjywfb9^$-%#nyeczy@6csrn#xu' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = "*"#[] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 'rest_framework', 41 | 'rest_framework.authtoken', 42 | 'api', 43 | 'bili', 44 | 'weibo', 45 | 'zhihu', 46 | ] 47 | 48 | 49 | MIDDLEWARE = [ 50 | 'corsheaders.middleware.CorsMiddleware', # 注意顺序!!!(可以放第一个) 51 | 'django.middleware.security.SecurityMiddleware', 52 | 'django.contrib.sessions.middleware.SessionMiddleware', 53 | 'django.middleware.common.CommonMiddleware', 54 | 'django.middleware.csrf.CsrfViewMiddleware', 55 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 56 | 'django.contrib.messages.middleware.MessageMiddleware', 57 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 58 | ] 59 | 60 | CORS_ORIGIN_ALLOW_ALL = True 61 | CORS_ALLOW_CREDENTIALS = True 62 | ROOT_URLCONF = 'testproject.urls' 63 | 64 | TEMPLATES = [ 65 | { 66 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 67 | 'DIRS': [], 68 | 'APP_DIRS': True, 69 | 'OPTIONS': { 70 | 'context_processors': [ 71 | 'django.template.context_processors.debug', 72 | 'django.template.context_processors.request', 73 | 'django.contrib.auth.context_processors.auth', 74 | 'django.contrib.messages.context_processors.messages', 75 | ], 76 | }, 77 | }, 78 | ] 79 | 80 | WSGI_APPLICATION = 'testproject.wsgi.application' 81 | 82 | 83 | # Database 84 | # https://docs.djangoproject.com/en/3.2/ref/settings/#databases 85 | import pymysql 86 | pymysql.version_info = (1,4,13, 'final', 0) 87 | pymysql.install_as_MySQLdb() 88 | DATABASES = { 89 | 'default': { 90 | # 'ENGINE': 'django.db.backends.sqlite3', 91 | # 'NAME': BASE_DIR / 'db.sqlite3', 92 | # 连接mysql 93 | 'ENGINE': 'django.db.backends.mysql', 94 | 'NAME': 'dweb', #需要提前创建 95 | 'USER': 'root', 96 | 'PASSWORD': 'huahuadan1234', 97 | 'HOST': '47.102.114.76', 98 | 'PORT': '3306', 99 | 'charset':'utf8mb4' 100 | } 101 | } 102 | 103 | 104 | # Password validation 105 | # https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators 106 | 107 | AUTH_PASSWORD_VALIDATORS = [ 108 | { 109 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 110 | }, 111 | { 112 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 113 | }, 114 | { 115 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 116 | }, 117 | { 118 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 119 | }, 120 | ] 121 | 122 | 123 | # Internationalization 124 | # https://docs.djangoproject.com/en/3.2/topics/i18n/ 125 | 126 | LANGUAGE_CODE = 'en-us' 127 | 128 | TIME_ZONE = 'UTC' 129 | 130 | USE_I18N = True 131 | 132 | USE_L10N = True 133 | 134 | USE_TZ = True 135 | 136 | 137 | # Static files (CSS, JavaScript, Images) 138 | # https://docs.djangoproject.com/en/3.2/howto/static-files/ 139 | 140 | STATIC_URL = '/static/' 141 | 142 | # Default primary key field type 143 | # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field 144 | 145 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 146 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/urls.py: -------------------------------------------------------------------------------- 1 | """testproject URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/3.2/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path,include 18 | 19 | urlpatterns = [ 20 | path('admin/', admin.site.urls), 21 | path('api/',include('api.urls')), 22 | # path('bili/',include('bili.urls')), 23 | ] 24 | 25 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/testproject/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for testproject project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testproject.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/__pycache__/admin.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/__pycache__/admin.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/__pycache__/apps.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/__pycache__/apps.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/__pycache__/models.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/__pycache__/models.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/__pycache__/serializers.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/__pycache__/serializers.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/__pycache__/urls.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/__pycache__/urls.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/__pycache__/views.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/__pycache__/views.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Weibo_hot,Weibo_hot_item,up_list,dynasic,follow_list 3 | 4 | class Weibo_hotAdmin(admin.ModelAdmin): 5 | list_display = ('Weibo_hot_list_id', 'Weibo_hot_list_time', 'Weibo_hot_list_sum') 6 | 7 | '''10 items per page''' 8 | list_per_page = 10 9 | class Weibo_hot_itemAdmin(admin.ModelAdmin): 10 | list_display = ('Weibo_item_id', 'Weibo_hot_list_id', 'Weibo_item_rank','Weibo_item_name', 11 | 'Weibo_item_click_sum','Weibo_item_url') 12 | 13 | '''10 items per page''' 14 | list_per_page = 10 15 | 16 | class Weibo_up_listAdmin(admin.ModelAdmin): 17 | list_display = ('Weibo_up_id', 'Weibo_up_name','Weibo_up_face_url') 18 | 19 | '''10 items per page''' 20 | list_per_page = 10 21 | class Weibo_dynasicAdmin(admin.ModelAdmin): 22 | list_display = ('Weibo_dynasic_id', 'Weibo_up_id','Weibo_share','Weibo_comment' 23 | ,'Weibo_like','Weibo_post_time','Weibo_url_id','Weibo_content','Weibo_pic_urls', 24 | ) 25 | 26 | '''10 items per page''' 27 | list_per_page = 10 28 | 29 | class Weibo_follow_listAdmin(admin.ModelAdmin): 30 | list_display = ('Weibo_up_id', 'Weibo_user_id','Weibo_is_special',) 31 | '''10 items per page''' 32 | list_per_page = 10 33 | admin.site.register(Weibo_hot, Weibo_hotAdmin) 34 | admin.site.register(Weibo_hot_item, Weibo_hot_itemAdmin) 35 | admin.site.register(up_list, Weibo_up_listAdmin) 36 | admin.site.register(dynasic, Weibo_dynasicAdmin) 37 | admin.site.register(follow_list, Weibo_follow_listAdmin) -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WeiboConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'weibo' 7 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 07:59 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | initial = True 10 | 11 | dependencies = [ 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Weibo_hot', 17 | fields=[ 18 | ('Weibo_hot_list_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='微博热门id')), 19 | ('Weibo_hot_list_time', models.DateTimeField(auto_now_add=True, verbose_name='微博热门更新时间')), 20 | ('Weibo_hot_list_sum', models.IntegerField(default=0, verbose_name='微博热门查看次数')), 21 | ], 22 | ), 23 | migrations.CreateModel( 24 | name='Weibo_hot_item', 25 | fields=[ 26 | ('Weibo_item_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='微博热门条目id')), 27 | ('Weibo_item_rank', models.IntegerField(verbose_name='微博热门条目排名')), 28 | ('Weibo_item_name', models.CharField(max_length=500, verbose_name='微博热门条目标题')), 29 | ('Weibo_item_tag', models.CharField(max_length=500, verbose_name='微博热门条目tag')), 30 | ('Weibo_item_hot', models.CharField(max_length=500, verbose_name='微博热门条目热度值')), 31 | ('Weibo_item_cover_url', models.CharField(max_length=500, verbose_name='微博热门条目封面图片url')), 32 | ('Weibo_item_click_sum', models.IntegerField(default=0, verbose_name='微博热门条目点击次数')), 33 | ('Weibo_item_url', models.CharField(max_length=500, verbose_name='微博热门条目url')), 34 | ('Weibo_hot_list_id', models.ForeignKey(db_column='Weibo_hot_list_id', on_delete=django.db.models.deletion.CASCADE, related_name='weibo_hot', to='weibo.weibo_hot', verbose_name='微博热门id')), 35 | ], 36 | ), 37 | ] 38 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/0002_auto_20220428_2223.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-28 14:23 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('weibo', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name='weibo_hot_item', 15 | name='Weibo_item_cover_url', 16 | ), 17 | migrations.RemoveField( 18 | model_name='weibo_hot_item', 19 | name='Weibo_item_tag', 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/0003_alter_weibo_hot_item_weibo_item_hot.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-28 14:34 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('weibo', '0002_auto_20220428_2223'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='weibo_hot_item', 15 | name='Weibo_item_hot', 16 | field=models.CharField(blank=True, max_length=500, null=True, verbose_name='微博热门条目热度值'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/0004_dynasic_dynasic_time_list_follow_list_up_list.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-05-01 02:07 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 12 | ('weibo', '0003_alter_weibo_hot_item_weibo_item_hot'), 13 | ] 14 | 15 | operations = [ 16 | migrations.CreateModel( 17 | name='dynasic_time_list', 18 | fields=[ 19 | ('up_date_time', models.DateTimeField(db_index=True, primary_key=True, serialize=False, verbose_name='微博动态更新时间')), 20 | ], 21 | ), 22 | migrations.CreateModel( 23 | name='up_list', 24 | fields=[ 25 | ('Weibo_up_id', models.IntegerField(db_index=True, primary_key=True, serialize=False, verbose_name='微博博主id')), 26 | ('Weibo_up_name', models.CharField(max_length=500, verbose_name='微博博主昵称')), 27 | ('Weibo_up_face_url', models.CharField(max_length=500, verbose_name='微博博主头像url')), 28 | ], 29 | ), 30 | migrations.CreateModel( 31 | name='follow_list', 32 | fields=[ 33 | ('Weibo_follow_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='关注列表关系id')), 34 | ('Weibo_is_special', models.IntegerField(default=0, verbose_name='是否特别关注')), 35 | ('Weibo_up_id', models.ForeignKey(db_column='Weibo_up_id', on_delete=django.db.models.deletion.CASCADE, related_name='wbfollow_up_list', to='weibo.up_list', verbose_name='微博博主id')), 36 | ('Weibo_user_id', models.ForeignKey(db_column='Weibo_user_id', on_delete=django.db.models.deletion.CASCADE, related_name='wbfollow_auth_user', to=settings.AUTH_USER_MODEL, verbose_name='本站用户id')), 37 | ], 38 | ), 39 | migrations.CreateModel( 40 | name='dynasic', 41 | fields=[ 42 | ('Weibo_dynasic_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='微博动态id')), 43 | ('Weibo_share', models.IntegerField(verbose_name='微博动态分享数')), 44 | ('Weibo_comment', models.IntegerField(verbose_name='微博动态评论数')), 45 | ('Weibo_like', models.IntegerField(verbose_name='微博动态点赞数')), 46 | ('Weibo_post_time', models.IntegerField(verbose_name='微博动态发布时间')), 47 | ('Weibo_url_id', models.CharField(blank=True, max_length=500, null=True, verbose_name='微博动态链接id')), 48 | ('Weibo_content', models.CharField(blank=True, max_length=5000, null=True, verbose_name='微博动态文字内容')), 49 | ('Weibo_pic_urls', models.CharField(blank=True, max_length=900, null=True, verbose_name='微博动态图片链接集合')), 50 | ('Weibo_up_id', models.ForeignKey(db_column='Weibo_up_id', on_delete=django.db.models.deletion.CASCADE, related_name='Weibo_up_list', to='weibo.up_list', verbose_name='微博博主id')), 51 | ], 52 | ), 53 | ] 54 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/0005_alter_up_list_weibo_up_id.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-05-01 02:13 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('weibo', '0004_dynasic_dynasic_time_list_follow_list_up_list'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='up_list', 15 | name='Weibo_up_id', 16 | field=models.CharField(db_index=True, max_length=500, primary_key=True, serialize=False, verbose_name='微博博主id'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/0006_alter_dynasic_weibo_post_time.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-05-01 03:23 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('weibo', '0005_alter_up_list_weibo_up_id'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='dynasic', 15 | name='Weibo_post_time', 16 | field=models.CharField(max_length=500, verbose_name='微博动态发布时间'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/0007_alter_dynasic_weibo_post_time.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-05-01 04:44 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('weibo', '0006_alter_dynasic_weibo_post_time'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='dynasic', 15 | name='Weibo_post_time', 16 | field=models.IntegerField(verbose_name='微博动态发布时间'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__pycache__/0001_initial.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__pycache__/0001_initial.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__pycache__/0002_auto_20220428_2223.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__pycache__/0002_auto_20220428_2223.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__pycache__/0003_alter_weibo_hot_item_weibo_item_hot.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__pycache__/0003_alter_weibo_hot_item_weibo_item_hot.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__pycache__/0004_dynasic_dynasic_time_list_follow_list_up_list.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__pycache__/0004_dynasic_dynasic_time_list_follow_list_up_list.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__pycache__/0005_alter_up_list_weibo_up_id.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__pycache__/0005_alter_up_list_weibo_up_id.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__pycache__/0006_alter_dynasic_weibo_post_time.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__pycache__/0006_alter_dynasic_weibo_post_time.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__pycache__/0007_alter_dynasic_weibo_post_time.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__pycache__/0007_alter_dynasic_weibo_post_time.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/migrations/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/weibo/migrations/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.utils.translation import ugettext_lazy as _ 3 | from django.contrib.auth import get_user_model 4 | from django.contrib.auth import get_user_model 5 | from django.contrib.auth import settings 6 | User = get_user_model() 7 | 8 | # Create your models here. 9 | class Weibo_hot(models.Model): 10 | Weibo_hot_list_id=models.AutoField(verbose_name=_('微博热门id'),primary_key=True,db_index=True) 11 | Weibo_hot_list_time = models.DateTimeField(verbose_name=_('微博热门更新时间'), auto_now_add=True) 12 | Weibo_hot_list_sum=models.IntegerField (verbose_name=_('微博热门查看次数'),default=0) 13 | 14 | class Weibo_hot_item(models.Model): 15 | Weibo_item_id=models.AutoField(verbose_name=_('微博热门条目id'),primary_key=True,db_index=True) 16 | Weibo_hot_list_id=models.ForeignKey(Weibo_hot, verbose_name=_('微博热门id'), on_delete=models.CASCADE, db_column='Weibo_hot_list_id', related_name='weibo_hot') 17 | Weibo_item_rank=models.IntegerField (verbose_name=_('微博热门条目排名')) 18 | Weibo_item_name=models.CharField(verbose_name=_('微博热门条目标题'),max_length=500) 19 | Weibo_item_hot = models.CharField(verbose_name=_('微博热门条目热度值'), max_length=500,null=True, blank=True) 20 | Weibo_item_click_sum=models.IntegerField (verbose_name=_('微博热门条目点击次数'),default=0) 21 | Weibo_item_url=models.CharField(verbose_name=_('微博热门条目url'),max_length=500) 22 | 23 | class up_list(models.Model): 24 | Weibo_up_id=models.CharField (verbose_name=_('微博博主id'),max_length=500,primary_key=True,db_index=True) 25 | Weibo_up_name=models.CharField(verbose_name=_('微博博主昵称'),max_length=500) 26 | Weibo_up_face_url=models.CharField(verbose_name=_('微博博主头像url'),max_length=500) 27 | def __str__(self): 28 | return self.Weibo_up_name 29 | 30 | class follow_list(models.Model): 31 | Weibo_follow_id = models.AutoField(verbose_name=_('关注列表关系id'), primary_key=True, db_index=True) 32 | Weibo_up_id=models.ForeignKey(up_list,verbose_name=_('微博博主id'), db_index=True,on_delete=models.CASCADE, db_column='Weibo_up_id', related_name='wbfollow_up_list') 33 | Weibo_user_id=models.ForeignKey(User, db_index=True,verbose_name=_('本站用户id'),on_delete=models.CASCADE, db_column='Weibo_user_id', related_name='wbfollow_auth_user') 34 | Weibo_is_special=models.IntegerField(verbose_name=_('是否特别关注'),default=0) 35 | 36 | class dynasic_time_list(models.Model): 37 | up_date_time=models.DateTimeField(verbose_name=_('微博动态更新时间'),primary_key=True,db_index=True) 38 | 39 | class dynasic(models.Model):#,null=True, blank=True 40 | Weibo_dynasic_id=models.AutoField(verbose_name=_('微博动态id'),primary_key=True,db_index=True) 41 | Weibo_up_id=models.ForeignKey(up_list, verbose_name=_('微博博主id'), on_delete=models.CASCADE, db_column='Weibo_up_id', related_name='Weibo_up_list') 42 | # Weibo_type=models.IntegerField (verbose_name=_('微博动态类型')) 43 | Weibo_share=models.IntegerField (verbose_name=_('微博动态分享数')) 44 | Weibo_comment=models.IntegerField (verbose_name=_('微博动态评论数')) 45 | Weibo_like=models.IntegerField (verbose_name=_('微博动态点赞数')) 46 | Weibo_post_time=models.IntegerField (verbose_name=_('微博动态发布时间')) 47 | Weibo_url_id=models.CharField(verbose_name=_('微博动态链接id'),max_length=500,null=True, blank=True) 48 | Weibo_content=models.CharField(verbose_name=_('微博动态文字内容'),max_length=5000,null=True, blank=True) 49 | Weibo_pic_urls=models.CharField(verbose_name=_('微博动态图片链接集合'),max_length=900,null=True, blank=True) 50 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from .models import Weibo_hot,Weibo_hot_item,up_list,dynasic,follow_list 3 | from django.contrib.auth import get_user_model 4 | 5 | class Weibo_hot_Serializer(serializers.ModelSerializer): 6 | class Meta: 7 | model = Weibo_hot 8 | fields = '__all__' 9 | 10 | class Weibo_hot_item_Serializer(serializers.ModelSerializer): 11 | class Meta: 12 | model = Weibo_hot_item 13 | fields = '__all__' 14 | class Weibo_up_list_Serializer(serializers.ModelSerializer): 15 | class Meta: 16 | model = up_list 17 | fields = '__all__' 18 | 19 | class Weibo_dynasic_Serializer(serializers.ModelSerializer): 20 | class Meta: 21 | model = dynasic 22 | depth=1 23 | Weibo_pic_urls = serializers.JSONField()#serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python') 24 | fields = '__all__' 25 | 26 | class Weibo_follow_list_Serializer(serializers.ModelSerializer): 27 | class Meta: 28 | model = follow_list 29 | fields = '__all__' 30 | depth=1 -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import re_path,include 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | from . import views 4 | 5 | urlpatterns = [ 6 | re_path(r'^hot_item/$', views.Weibo_hot_item_view.as_view()), 7 | re_path(r'^hot/$', views.Weibo_hot_view.as_view()), 8 | re_path(r'^uplist/$', views.Weibo_up_list_view.as_view()), 9 | re_path(r'^dynasic/$', views.Weibo_dynasic_view.as_view()), 10 | re_path(r'^followlist/$', views.Weibo_follow_view.as_view()), 11 | ] 12 | 13 | urlpatterns = format_suffix_patterns(urlpatterns) 14 | 15 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/weibo/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from rest_framework import generics 3 | import json 4 | from rest_framework import permissions 5 | from .models import Weibo_hot,Weibo_hot_item,up_list,dynasic,follow_list 6 | from .serializers import Weibo_hot_Serializer,Weibo_hot_item_Serializer,Weibo_dynasic_Serializer,Weibo_up_list_Serializer,Weibo_follow_list_Serializer 7 | from rest_framework.authentication import TokenAuthentication 8 | from rest_framework.response import Response 9 | from django.http import QueryDict 10 | from rest_framework import mixins 11 | from rest_framework import generics 12 | from django.contrib.auth import get_user_model 13 | User = get_user_model() 14 | # Create your views here. 15 | class Weibo_hot_view(generics.ListAPIView): 16 | queryset = Weibo_hot.objects.all() 17 | serializer_class = Weibo_hot_Serializer 18 | 19 | class Weibo_hot_item_view(generics.ListAPIView): 20 | queryset = Weibo_hot_item.objects.all() 21 | serializer_class = Weibo_hot_item_Serializer 22 | def get(self, request, *args, **kwargs): 23 | q = Weibo_hot.objects.order_by('-Weibo_hot_list_id')[0].Weibo_hot_list_id 24 | queryset = self.queryset.filter(Weibo_hot_list_id=q) 25 | while len(queryset)==0: 26 | q-=1 27 | queryset = self.queryset.filter(Weibo_hot_list_id=q) 28 | return Response(self.serializer_class(queryset, many=True).data) 29 | 30 | 31 | 32 | class Weibo_up_list_view(mixins.ListModelMixin,mixins.CreateModelMixin,mixins.DestroyModelMixin,generics.GenericAPIView): 33 | queryset = up_list.objects.all() 34 | serializer_class = Weibo_up_list_Serializer 35 | def get(self, request, *args, **kwargs): 36 | return self.list(request, *args, **kwargs) 37 | def post(self, request, *args, **kwargs): 38 | Weibo_up_name=request.data.get('Weibo_up_name') 39 | Weibo_up_id=request.data.get('Weibo_up_id') 40 | Weibo_up_face_url=request.data.get('Weibo_up_face_url') 41 | if up_list.objects.filter(Weibo_up_id=Weibo_up_id).exists(): 42 | resp = { 43 | 'status':False, 44 | 'data':'该博主已存在' 45 | } 46 | # return Response(None) 47 | return Response(resp) 48 | else: 49 | up_list.objects.create(Weibo_up_id=Weibo_up_id,Weibo_up_name=Weibo_up_name,Weibo_up_face_url=Weibo_up_face_url) 50 | resp = { 51 | 'status':True, 52 | 'data':'创建成功' 53 | } 54 | return Response(resp) 55 | def delete(self, request, *args, **kwargs): 56 | DELETE = QueryDict(request.body) 57 | data_id=list(DELETE.keys())[0] 58 | dic=json.loads(data_id) 59 | del_id=dic["Weibo_up_id"] 60 | m=up_list.objects.get(Weibo_up_id=del_id) 61 | m.delete() 62 | resp = { 63 | 'status': True, 64 | 'data': '删除成功' 65 | } 66 | return Response(resp) 67 | 68 | class Weibo_dynasic_view(generics.ListAPIView): 69 | queryset = dynasic.objects.all() 70 | serializer_class = Weibo_dynasic_Serializer 71 | authentication_classes = (TokenAuthentication,) # token认证 72 | permission_classes = (permissions.IsAuthenticated,) # IsAuthenticatedOrReadOnly 73 | def get(self, request, *args, **kwargs): 74 | user_id=User.objects.get(username=self.request.user).id 75 | follow_up=follow_list.objects.filter(Weibo_user_id=user_id) 76 | allup_id=[] 77 | for fup in follow_up: 78 | up_id=fup.Weibo_up_id.Weibo_up_id 79 | allup_id.append(up_id) 80 | alldyna=dynasic.objects.filter(Weibo_up_id__in=allup_id).order_by('-Weibo_post_time')[:20] 81 | return Response(Weibo_dynasic_Serializer(alldyna, many=True).data) 82 | 83 | class Weibo_follow_view(mixins.ListModelMixin,mixins.CreateModelMixin,mixins.DestroyModelMixin,generics.GenericAPIView): 84 | queryset = follow_list.objects.all() 85 | serializer_class = Weibo_follow_list_Serializer 86 | authentication_classes = (TokenAuthentication,) # token认证 87 | permission_classes = (permissions.IsAuthenticated,) # IsAuthenticatedOrReadOnly 88 | def get(self, request, *args, **kwargs): 89 | user_id=User.objects.get(username=self.request.user).id 90 | follow_up=follow_list.objects.filter(Weibo_user_id=user_id) 91 | return Response(Weibo_follow_list_Serializer(follow_up, many=True).data) 92 | def post(self, request, *args, **kwargs): 93 | Weibo_user_id=User.objects.get(username=self.request.user)#.id 94 | Weibo_is_special = request.data.get('Weibo_is_special') 95 | Weibo_follow_name = request.data.get('Weibo_follow_name') 96 | Weibo_up_id = up_list.objects.filter(Weibo_up_name=Weibo_follow_name)#.Weibo_up_face_url 97 | Bid=0 98 | for b in Weibo_up_id: 99 | Bid=b 100 | follow_list.objects.create(Weibo_up_id=Bid,Weibo_user_id=Weibo_user_id,Weibo_is_special=Weibo_is_special) 101 | resp = { 102 | 'status': False, 103 | 'data': 'ok' 104 | } 105 | return Response(resp) 106 | def delete(self, request, *args, **kwargs): 107 | Weibo_user_id=User.objects.get(username=self.request.user) 108 | print('delete') 109 | DELETE = QueryDict(request.body) 110 | print(DELETE) 111 | follow_name=list(DELETE.keys())[0] 112 | # dic=json.loads(data_id) 113 | print(follow_name) 114 | # del_id=dic["Weibo_up_id"] 115 | Weibo_up = up_list.objects.get(Weibo_up_name=follow_name) 116 | m=follow_list.objects.get(Weibo_up_id=Weibo_up,Weibo_user_id=Weibo_user_id) 117 | m.delete() 118 | resp = { 119 | 'status': True, 120 | 'data': '删除成功' 121 | } 122 | return Response(resp) -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/__pycache__/admin.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/__pycache__/admin.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/__pycache__/apps.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/__pycache__/apps.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/__pycache__/models.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/__pycache__/models.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/__pycache__/serializers.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/__pycache__/serializers.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/__pycache__/urls.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/__pycache__/urls.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/__pycache__/views.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/__pycache__/views.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Z_hot,Z_hot_item 3 | # Register your models here. 4 | class Z_hotAdmin(admin.ModelAdmin): 5 | list_display = ('Z_hot_list_id', 'Z_hot_list_time', 'Z_hot_list_sum') 6 | 7 | 8 | '''10 items per page''' 9 | list_per_page = 10 10 | class Z_hot_itemAdmin(admin.ModelAdmin): 11 | list_display = ('Z_item_id', 'Z_hot_list_id', 'Z_item_rank','Z_item_name','Z_item_hot','Z_item_cover_url','Z_item_click_sum','Z_item_url') 12 | 13 | 14 | '''10 items per page''' 15 | list_per_page = 10 16 | 17 | admin.site.register(Z_hot,Z_hotAdmin) 18 | admin.site.register(Z_hot_item,Z_hot_itemAdmin) -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ZhihuConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'zhihu' 7 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2022-04-10 08:12 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | initial = True 10 | 11 | dependencies = [ 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Z_hot', 17 | fields=[ 18 | ('Z_hot_list_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='知乎热榜id')), 19 | ('Z_hot_list_time', models.DateTimeField(auto_now_add=True, verbose_name='知乎热榜更新时间')), 20 | ('Z_hot_list_sum', models.IntegerField(default=0, verbose_name='知乎热榜查看次数')), 21 | ], 22 | ), 23 | migrations.CreateModel( 24 | name='Z_hot_item', 25 | fields=[ 26 | ('Z_item_id', models.AutoField(db_index=True, primary_key=True, serialize=False, verbose_name='知乎热榜条目id')), 27 | ('Z_item_rank', models.IntegerField(verbose_name='知乎热榜条目排名')), 28 | ('Z_item_name', models.CharField(max_length=500, verbose_name='知乎热榜条目标题')), 29 | ('Z_item_hot', models.CharField(max_length=500, verbose_name='知乎热榜条目热度值')), 30 | ('Z_item_cover_url', models.CharField(max_length=500, verbose_name='知乎热榜条目封面图片url')), 31 | ('Z_item_click_sum', models.IntegerField(default=0, verbose_name='知乎热榜条目查看次数')), 32 | ('Z_item_url', models.CharField(max_length=500, verbose_name='知乎热榜条目url')), 33 | ('Z_hot_list_id', models.ForeignKey(db_column='Z_hot_list_id', on_delete=django.db.models.deletion.CASCADE, related_name='z_hot', to='zhihu.z_hot', verbose_name='知乎热榜id')), 34 | ], 35 | ), 36 | ] 37 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/migrations/__init__.py -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/migrations/__pycache__/0001_initial.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/migrations/__pycache__/0001_initial.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/migrations/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Django后端/testproject/zhihu/migrations/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.utils.translation import ugettext_lazy as _ 3 | from django.contrib.auth import get_user_model 4 | 5 | class Z_hot(models.Model): 6 | Z_hot_list_id=models.AutoField(verbose_name=_('知乎热榜id'),primary_key=True,db_index=True) 7 | Z_hot_list_time = models.DateTimeField(verbose_name=_('知乎热榜更新时间'), auto_now_add=True) 8 | Z_hot_list_sum=models.IntegerField (verbose_name=_('知乎热榜查看次数'),default=0) 9 | # Z_hot_list_url= models.CharField(verbose_name=_('知乎热榜链接')) 10 | 11 | class Z_hot_item(models.Model): 12 | Z_item_id=models.AutoField(verbose_name=_('知乎热榜条目id'),primary_key=True,db_index=True) 13 | Z_hot_list_id=models.ForeignKey(Z_hot, verbose_name=_('知乎热榜id'), on_delete=models.CASCADE, db_column='Z_hot_list_id', related_name='z_hot') 14 | Z_item_rank=models.IntegerField (verbose_name=_('知乎热榜条目排名')) 15 | Z_item_name=models.CharField(verbose_name=_('知乎热榜条目标题'),max_length=500) 16 | Z_item_hot=models.CharField(verbose_name=_('知乎热榜条目热度值'),max_length=500) 17 | Z_item_cover_url=models.CharField(verbose_name=_('知乎热榜条目封面图片url'),max_length=500) 18 | Z_item_click_sum=models.IntegerField (verbose_name=_('知乎热榜条目查看次数'),default=0) 19 | Z_item_url=models.CharField(verbose_name=_('知乎热榜条目url'),max_length=500) 20 | 21 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from .models import Z_hot,Z_hot_item 3 | from django.contrib.auth import get_user_model 4 | class Z_hot_Serializer(serializers.ModelSerializer): 5 | class Meta: 6 | model = Z_hot 7 | fields = '__all__' 8 | 9 | class Z_hot_item_Serializer(serializers.ModelSerializer): 10 | class Meta: 11 | model = Z_hot_item 12 | fields = '__all__' -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import re_path,include 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | from . import views 4 | 5 | urlpatterns = [ 6 | re_path(r'^hot_item/$', views.Z_hot_item_view.as_view()), 7 | re_path(r'^hot/$', views.Z_hot_view.as_view()), 8 | ] 9 | 10 | urlpatterns = format_suffix_patterns(urlpatterns) 11 | 12 | -------------------------------------------------------------------------------- /工程文件/Django后端/testproject/zhihu/views.py: -------------------------------------------------------------------------------- 1 | from rest_framework import generics 2 | from rest_framework import permissions 3 | # from .permissions import IsOwnerOrReadOnly 4 | from .models import Z_hot,Z_hot_item 5 | from .serializers import Z_hot_Serializer,Z_hot_item_Serializer 6 | from rest_framework.authentication import TokenAuthentication 7 | from rest_framework.response import Response 8 | 9 | class Z_hot_view(generics.ListAPIView): 10 | queryset = Z_hot.objects.all() 11 | serializer_class = Z_hot_Serializer 12 | 13 | class Z_hot_item_view(generics.ListAPIView): 14 | queryset = Z_hot_item.objects.all() 15 | serializer_class = Z_hot_item_Serializer 16 | 17 | def get(self, request, *args, **kwargs): 18 | q = Z_hot.objects.order_by('-Z_hot_list_id')[0].Z_hot_list_id 19 | queryset = self.queryset.filter(Z_hot_list_id=q) 20 | while len(queryset)==0: 21 | q-=1 22 | queryset = self.queryset.filter(Z_hot_list_id=q) 23 | return Response(self.serializer_class(queryset, many=True).data) 24 | -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/main.py: -------------------------------------------------------------------------------- 1 | from twisted.internet import reactor 2 | from scrapy.crawler import * 3 | from scrapy.utils.project import get_project_settings 4 | from scrapy.utils.log import configure_logging 5 | import os 6 | import datetime 7 | import time 8 | import pymysql 9 | from threading import Thread 10 | cursor=None 11 | def time2stamp(last_time): 12 | # 转换成时间数组 13 | timeArray = time.strptime(last_time, "%Y-%m-%d %H:%M:%S") 14 | # 转换成时间戳 15 | lasttimestamp = int(time.mktime(timeArray)) 16 | return lasttimestamp 17 | # def bili_spider(): 18 | # ############################b站热榜 19 | # #''' 20 | # #查询现在热榜表的最大id 21 | # sql = 'select * from bili_bili_hot order by Bili_hot_list_id desc limit 1' 22 | # cursor.execute(sql) 23 | # res =cursor.fetchall() 24 | # now_index=0 25 | # for i in res: 26 | # now_index=i[0] 27 | # #插入一行热榜表 28 | # date_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 29 | # sql = 'INSERT INTO bili_bili_hot(Bili_hot_list_time,Bili_hot_list_sum) VALUES ("{0}",0)'.format(date_time) 30 | # cursor.execute(sql) 31 | # db_connect.commit() 32 | # #启动爬虫 33 | # configure_logging() 34 | # runner = CrawlerRunner(settings=get_project_settings()) 35 | # runner.crawl('bili_hot',now_index+1) 36 | # 37 | # # ''' 38 | # ########################知乎热榜 39 | # #''' 40 | # sql = 'select * from zhihu_z_hot order by Z_hot_list_id desc limit 1' 41 | # cursor.execute(sql) 42 | # res =cursor.fetchall() 43 | # now_index=0 44 | # for i in res: 45 | # now_index=i[0] 46 | # print(now_index) 47 | # #插入一行热榜表 48 | # date_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 49 | # sql = 'INSERT INTO zhihu_z_hot VALUES (null,"{0}",0)'.format(date_time) 50 | # cursor.execute(sql) 51 | # db_connect.commit() 52 | # #启动爬虫 53 | # # configure_logging() 54 | # # runner = CrawlerRunner(settings=get_project_settings()) 55 | # runner.crawl('zhihu',now_index+1) 56 | # #''' 57 | # ########################微博热榜 58 | # #''' 59 | # sql = 'select * from weibo_weibo_hot order by Weibo_hot_list_id desc limit 1' 60 | # cursor.execute(sql) 61 | # res =cursor.fetchall() 62 | # now_index=0 63 | # for i in res: 64 | # now_index=i[0] 65 | # print(now_index) 66 | # #插入一行热榜表 67 | # date_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 68 | # sql = 'INSERT INTO weibo_weibo_hot VALUES (null,"{0}",0)'.format(date_time) 69 | # cursor.execute(sql) 70 | # db_connect.commit() 71 | # #启动爬虫 72 | # # configure_logging() 73 | # # runner = CrawlerRunner(settings=get_project_settings()) 74 | # runner.crawl('weibo_hot',now_index+1) 75 | # #''' 76 | # #######################b站动态 77 | # #''' 78 | # #获得上一次更新的时间 79 | # sql = 'select * from bili_dynasic_time_list order by up_date_time desc limit 1' 80 | # cursor.execute(sql) 81 | # res =cursor.fetchall() 82 | # last_time='' 83 | # for i in res: 84 | # last_time=str(i[0]) 85 | # # last_time='2022-04-28 11:20:22' 86 | # print(last_time) 87 | # # 转换成时间数组 88 | # timeArray = time.strptime(last_time, "%Y-%m-%d %H:%M:%S") 89 | # # 转换成时间戳 90 | # lasttimestamp = int(time.mktime(timeArray)) 91 | # print(lasttimestamp) 92 | # #获得所有需要爬取的uid 93 | # sql = 'select Bili_up_id from bili_up_list' 94 | # cursor.execute(sql) 95 | # res =cursor.fetchall() 96 | # up_list=[] 97 | # for i in res: 98 | # up_list.append(i[0]) 99 | # print(up_list) 100 | # #启动爬虫 101 | # # configure_logging() 102 | # # runner = CrawlerRunner(settings=get_project_settings()) 103 | # for uid in up_list: 104 | # runner.crawl('up',uid,lasttimestamp) 105 | # 106 | # #插入一行时间 107 | # date_time = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) 108 | # value=(date_time) 109 | # sql = 'INSERT INTO bili_dynasic_time_list VALUES (%s)' 110 | # print(sql,value) 111 | # 112 | # 113 | # cursor.execute(sql,value) 114 | # db_connect.commit() 115 | # #''' 116 | # #########################微博动态 117 | # #''' 118 | # sql = 'select * from weibo_dynasic_time_list order by up_date_time desc limit 1' 119 | # cursor.execute(sql) 120 | # res = cursor.fetchall() 121 | # last_time='2022-04-27 11:20:22' 122 | # for i in res: 123 | # last_time = str(i[0]) 124 | # print(last_time) 125 | # lasttimestamp=time2stamp(last_time) 126 | # print(lasttimestamp) 127 | # # 获得所有需要爬取的uid 128 | # sql = 'select weibo_up_id from weibo_up_list' 129 | # cursor.execute(sql) 130 | # res = cursor.fetchall() 131 | # up_list = [] 132 | # for i in res: 133 | # up_list.append(i[0]) 134 | # print(up_list) 135 | # # 启动爬虫 136 | # # configure_logging() 137 | # # runner = CrawlerRunner(settings=get_project_settings()) 138 | # for uid in up_list: 139 | # runner.crawl('weibouser', uid, lasttimestamp) 140 | # 141 | # # 插入一行时间 142 | # date_time = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) 143 | # value = (date_time) 144 | # sql = 'INSERT INTO weibo_dynasic_time_list VALUES (%s)' 145 | # print(sql, value) 146 | # cursor.execute(sql, value) 147 | # db_connect.commit() 148 | # #''' 149 | # ######################开始爬取 150 | # deferred = runner.join() 151 | # deferred.addBoth(lambda _: reactor.stop()) 152 | # reactor.run() 153 | 154 | def biliDynasicCraw(): 155 | host = '127.0.0.1' 156 | port = 3300 157 | database = 'web' 158 | user = 'root' 159 | password = '123456' 160 | db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, 161 | charset='utf8') 162 | cursor = db_connect.cursor() 163 | while(1): 164 | # 获得上一次更新的时间 165 | sql = 'select * from bili_dynasic_time_list order by up_date_time desc limit 1' 166 | cursor.execute(sql) 167 | res = cursor.fetchall() 168 | last_time='2022-04-28 11:20:22' 169 | for i in res: 170 | last_time = str(i[0]) 171 | print(last_time) 172 | # 转换成时间数组 173 | timeArray = time.strptime(last_time, "%Y-%m-%d %H:%M:%S") 174 | # 转换成时间戳 175 | lasttimestamp = int(time.mktime(timeArray)) 176 | print(lasttimestamp) 177 | # 获得所有需要爬取的uid 178 | sql = 'select Bili_up_id from bili_up_list' 179 | cursor.execute(sql) 180 | res = cursor.fetchall() 181 | up_list = [] 182 | for i in res: 183 | up_list.append(i[0]) 184 | print(up_list) 185 | # 启动爬虫 186 | # configure_logging() 187 | # runner = CrawlerRunner(settings=get_project_settings()) 188 | for uid in up_list: 189 | # print('4') 190 | os.system("scrapy crawl up -a uid=" + str(uid) + " -a lasttime=" + str(lasttimestamp)) 191 | # 插入一行时间 192 | date_time = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) 193 | value = (date_time) 194 | sql = 'INSERT INTO bili_dynasic_time_list VALUES (%s)' 195 | cursor.execute(sql, value) 196 | db_connect.commit() 197 | time.sleep(getSleepTime(4)) 198 | 199 | def weiboDynasicCraw(): 200 | host = '127.0.0.1' 201 | port = 3300 202 | database = 'web' 203 | user = 'root' 204 | password = '123456' 205 | db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, 206 | charset='utf8') 207 | cursor = db_connect.cursor() 208 | while(1): 209 | sql = 'select * from weibo_dynasic_time_list order by up_date_time desc limit 1' 210 | cursor.execute(sql) 211 | res = cursor.fetchall() 212 | last_time = '2022-04-27 11:20:22' 213 | for i in res: 214 | last_time = str(i[0]) 215 | print(last_time) 216 | lasttimestamp = time2stamp(last_time) 217 | print(lasttimestamp) 218 | # 获得所有需要爬取的uid 219 | sql = 'select weibo_up_id from weibo_up_list' 220 | cursor.execute(sql) 221 | res = cursor.fetchall() 222 | up_list = [] 223 | for i in res: 224 | up_list.append(i[0]) 225 | print(up_list) 226 | # 启动爬虫 227 | for uid in up_list: 228 | # print('5') 229 | os.system("scrapy crawl weibouser -a uid=" + str(uid)+" -a lasttime="+str(lasttimestamp)) 230 | # runner.crawl('weibouser', uid, lasttimestamp) 231 | # 插入一行时间 232 | date_time = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) 233 | value = (date_time) 234 | sql = 'INSERT INTO weibo_dynasic_time_list VALUES (%s)' 235 | print(sql, value) 236 | cursor.execute(sql, value) 237 | db_connect.commit() 238 | time.sleep(getSleepTime(5)) 239 | def weiboHotCraw(): 240 | host = '127.0.0.1' 241 | port = 3300 242 | database = 'web' 243 | user = 'root' 244 | password = '123456' 245 | db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, 246 | charset='utf8') 247 | cursor = db_connect.cursor() 248 | while(1): 249 | sql = 'select * from weibo_weibo_hot order by Weibo_hot_list_id desc limit 1' 250 | cursor.execute(sql) 251 | res = cursor.fetchall() 252 | now_index = 0 253 | for i in res: 254 | now_index = i[0] 255 | print(now_index) 256 | # 插入一行热榜表 257 | date_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 258 | sql = 'INSERT INTO weibo_weibo_hot VALUES (null,"{0}",0)'.format(date_time) 259 | cursor.execute(sql) 260 | db_connect.commit() 261 | # 启动爬虫 262 | os.system("scrapy crawl weibo_hot -a save_index=" + str(now_index + 1)) 263 | time.sleep(getSleepTime(2)) 264 | 265 | def biliHotCraw(): 266 | ############################b站热榜 267 | # ''' 268 | # 查询现在热榜表的最大id 269 | host = '127.0.0.1' 270 | port = 3300 271 | database = 'web' 272 | user = 'root' 273 | password = '123456' 274 | db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, 275 | charset='utf8') 276 | cursor = db_connect.cursor() 277 | while(1): 278 | sql = 'select * from bili_bili_hot order by Bili_hot_list_id desc limit 1' 279 | cursor.execute(sql) 280 | res = cursor.fetchall() 281 | now_index = 0 282 | for i in res: 283 | now_index = i[0] 284 | # 插入一行热榜表 285 | date_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 286 | sql = 'INSERT INTO bili_bili_hot(Bili_hot_list_time,Bili_hot_list_sum) VALUES ("{0}",0)'.format(date_time) 287 | cursor.execute(sql) 288 | db_connect.commit() 289 | # 启动爬虫 290 | os.system("scrapy crawl bili_hot -a save_index=" + str(now_index + 1)) 291 | time.sleep(getSleepTime(1)) 292 | 293 | def zhihuHotCraw(): 294 | host = '127.0.0.1' 295 | port = 3300 296 | database = 'web' 297 | user = 'root' 298 | password = '123456' 299 | db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, 300 | charset='utf8') 301 | cursor = db_connect.cursor() 302 | while(1): 303 | sql = 'select * from zhihu_z_hot order by Z_hot_list_id desc limit 1' 304 | cursor.execute(sql) 305 | res = cursor.fetchall() 306 | now_index = 0 307 | for i in res: 308 | now_index = i[0] 309 | print(now_index) 310 | # 插入一行热榜表 311 | date_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 312 | sql = 'INSERT INTO zhihu_z_hot VALUES (null,"{0}",0)'.format(date_time) 313 | cursor.execute(sql) 314 | db_connect.commit() 315 | # 启动爬虫 316 | os.system("scrapy crawl zhihu -a save_index="+str(now_index + 1)) 317 | time.sleep(getSleepTime(3)) 318 | 319 | 320 | def GMT2stamp(dd): 321 | GMT_FORMAT = '%a %b %d %H:%M:%S +0800 %Y' 322 | date_temp = str(datetime.datetime.strptime(dd, GMT_FORMAT)) 323 | # 转换成时间数组 324 | timeArray = time.strptime(date_temp, "%Y-%m-%d %H:%M:%S") 325 | # 转换成时间戳 326 | lasttimestamp = int(time.mktime(timeArray)) 327 | return lasttimestamp 328 | 329 | def getSleepTime(index): 330 | host = '127.0.0.1' 331 | port = 3300 332 | database = 'web' 333 | user = 'root' 334 | password = '123456' 335 | db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, 336 | charset='utf8') 337 | cursor = db_connect.cursor() 338 | # biliHotTime = t[1] 339 | # weiboHotTime = t[2] 340 | # zhihuHotTime = t[3] 341 | # biliDynasicTime = t[4] 342 | # weiboDynasicTime = t[5] 343 | sql = 'select * from api_crawltimemanage where id=1' 344 | cursor.execute(sql) 345 | res = cursor.fetchall() 346 | t= None 347 | for i in res: 348 | t = i 349 | return int(t[index])*60 350 | 351 | if __name__=="__main__": 352 | os.chdir('./myspider/myspider') 353 | 354 | t1 = Thread(target=biliDynasicCraw, args=()) 355 | t1.start() 356 | t2 = Thread(target=weiboDynasicCraw, args=()) 357 | t2.start() 358 | t3 = Thread(target=biliHotCraw, args=()) 359 | t3.start() 360 | t4 = Thread(target=weiboHotCraw, args=()) 361 | t4.start() 362 | t5 = Thread(target=zhihuHotCraw, args=()) 363 | t5.start() 364 | # weiboDynasicCraw() 365 | # zhihuHotCraw() 366 | # biliHotCraw() 367 | # weiboHotCraw() 368 | 369 | # global cursor 370 | # 371 | 372 | # bili_spider() 373 | # while(1): 374 | # zhihuHotCraw() 375 | # time.sleep(5) 376 | # biliHotCraw() 377 | # while True: 378 | # # bili_spider() 379 | # try: 380 | # biliHotCraw() 381 | # time.sleep(3) 382 | # print("已经爬取",n,"次") 383 | # except: 384 | # time.sleep(3) 385 | # continue -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/__init__.py -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/__pycache__/items.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/__pycache__/items.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/__pycache__/pipelines.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/__pycache__/pipelines.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/__pycache__/settings.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/__pycache__/settings.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/items.py: -------------------------------------------------------------------------------- 1 | # Define here the models for your scraped items 2 | # 3 | # See documentation in: 4 | # https://docs.scrapy.org/en/latest/topics/items.html 5 | 6 | import scrapy 7 | 8 | 9 | class BilibiliItem(scrapy.Item): 10 | # define the fields for your item here like: 11 | hot_table_id = scrapy.Field() 12 | title = scrapy.Field() 13 | pic_url = scrapy.Field() 14 | desc = scrapy.Field() 15 | up = scrapy.Field() 16 | video_url = scrapy.Field() 17 | view = scrapy.Field() 18 | danmu = scrapy.Field() 19 | 20 | class DynamicItem(scrapy.Item): 21 | up_id=scrapy.Field() 22 | type = scrapy.Field()#类型0自己发布的动态1自己发布带图片2自己发布的视频3转发的动态4转发的视频 23 | share = scrapy.Field() 24 | comment = scrapy.Field() 25 | like = scrapy.Field() 26 | post_time = scrapy.Field() 27 | # up_name = scrapy.Field() 28 | # up_face_url=scrapy.Field() 29 | bili_id=scrapy.Field() 30 | 31 | content = scrapy.Field()#文字内容 32 | pic_urls = scrapy.Field()#图片 33 | 34 | video_title = scrapy.Field()#视频标题 35 | video_url = scrapy.Field()#视频链接 36 | video_pic_url = scrapy.Field()#视频封面 37 | video_desc = scrapy.Field()#视频简介 38 | 39 | original_up = scrapy.Field()#转发的原up 40 | original_content = scrapy.Field()#转发的原内容 41 | 42 | class ZhihuItem(scrapy.Item): 43 | # define the fields for your item here like: 44 | hot_table_id = scrapy.Field() 45 | rank = scrapy.Field() 46 | img_url = scrapy.Field() 47 | title = scrapy.Field() 48 | title_url = scrapy.Field() 49 | hot = scrapy.Field() 50 | class WeiboItem(scrapy.Item): 51 | hot_table_id = scrapy.Field() 52 | rank = scrapy.Field() 53 | title = scrapy.Field() 54 | title_url = scrapy.Field() 55 | hot = scrapy.Field() 56 | 57 | class WeiboUserItem(scrapy.Item): 58 | # name=scrapy.Field() 59 | # face_url=scrapy.Field() 60 | up_id = scrapy.Field() 61 | content = scrapy.Field() 62 | share = scrapy.Field() 63 | comment = scrapy.Field() 64 | like = scrapy.Field() 65 | post_time = scrapy.Field() 66 | pic_list = scrapy.Field() 67 | wb_id=scrapy.Field() 68 | -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/middlewares.py: -------------------------------------------------------------------------------- 1 | # Define here the models for your spider middleware 2 | # 3 | # See documentation in: 4 | # https://docs.scrapy.org/en/latest/topics/spider-middleware.html 5 | 6 | from scrapy import signals 7 | 8 | # useful for handling different item types with a single interface 9 | from itemadapter import is_item, ItemAdapter 10 | 11 | 12 | class MyspiderSpiderMiddleware: 13 | # Not all methods need to be defined. If a method is not defined, 14 | # scrapy acts as if the spider middleware does not modify the 15 | # passed objects. 16 | 17 | @classmethod 18 | def from_crawler(cls, crawler): 19 | # This method is used by Scrapy to create your spiders. 20 | s = cls() 21 | crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) 22 | return s 23 | 24 | def process_spider_input(self, response, spider): 25 | # Called for each response that goes through the spider 26 | # middleware and into the spider. 27 | 28 | # Should return None or raise an exception. 29 | return None 30 | 31 | def process_spider_output(self, response, result, spider): 32 | # Called with the results returned from the Spider, after 33 | # it has processed the response. 34 | 35 | # Must return an iterable of Request, or item objects. 36 | for i in result: 37 | yield i 38 | 39 | def process_spider_exception(self, response, exception, spider): 40 | # Called when a spider or process_spider_input() method 41 | # (from other spider middleware) raises an exception. 42 | 43 | # Should return either None or an iterable of Request or item objects. 44 | pass 45 | 46 | def process_start_requests(self, start_requests, spider): 47 | # Called with the start requests of the spider, and works 48 | # similarly to the process_spider_output() method, except 49 | # that it doesn’t have a response associated. 50 | 51 | # Must return only requests (not items). 52 | for r in start_requests: 53 | yield r 54 | 55 | def spider_opened(self, spider): 56 | spider.logger.info('Spider opened: %s' % spider.name) 57 | 58 | 59 | class MyspiderDownloaderMiddleware: 60 | # Not all methods need to be defined. If a method is not defined, 61 | # scrapy acts as if the downloader middleware does not modify the 62 | # passed objects. 63 | 64 | @classmethod 65 | def from_crawler(cls, crawler): 66 | # This method is used by Scrapy to create your spiders. 67 | s = cls() 68 | crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) 69 | return s 70 | 71 | def process_request(self, request, spider): 72 | # Called for each request that goes through the downloader 73 | # middleware. 74 | 75 | # Must either: 76 | # - return None: continue processing this request 77 | # - or return a Response object 78 | # - or return a Request object 79 | # - or raise IgnoreRequest: process_exception() methods of 80 | # installed downloader middleware will be called 81 | return None 82 | 83 | def process_response(self, request, response, spider): 84 | # Called with the response returned from the downloader. 85 | 86 | # Must either; 87 | # - return a Response object 88 | # - return a Request object 89 | # - or raise IgnoreRequest 90 | return response 91 | 92 | def process_exception(self, request, exception, spider): 93 | # Called when a download handler or a process_request() 94 | # (from other downloader middleware) raises an exception. 95 | 96 | # Must either: 97 | # - return None: continue processing this exception 98 | # - return a Response object: stops process_exception() chain 99 | # - return a Request object: stops process_exception() chain 100 | pass 101 | 102 | def spider_opened(self, spider): 103 | spider.logger.info('Spider opened: %s' % spider.name) 104 | -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/pipelines.py: -------------------------------------------------------------------------------- 1 | # Define your item pipelines here 2 | # 3 | # Don't forget to add your pipeline to the ITEM_PIPELINES setting 4 | # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html 5 | 6 | 7 | # useful for handling different item types with a single interface 8 | ''' 9 | class BilibiliHotPipeline: 10 | def open_spider(self, spider): 11 | print('+++++++++++++++++++') 12 | print(spider.name) 13 | self.fp = open('up-dynasic.json', 'w', encoding='utf-8') 14 | 15 | def process_item(self, item, spider): 16 | dic={} 17 | print('-------------') 18 | for i in item: 19 | dic[i]=item[i] 20 | self.fp.write(str(dic)) 21 | return item 22 | 23 | def close_spider(self, spider): 24 | self.fp.close() 25 | ''' 26 | from itemadapter import ItemAdapter 27 | import pymysql 28 | import datetime 29 | 30 | class BilibiliHotPipeline: 31 | def open_spider(self, spider): 32 | host = spider.settings.get('MYSQL_HOST') 33 | port = spider.settings.get('MYSQL_PORT') 34 | database = spider.settings.get('MYSQL_DATABASE') 35 | user = spider.settings.get('MYSQL_USER') 36 | password = spider.settings.get('MYSQL_PASSWORD') 37 | self.db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, charset='utf8') 38 | self.cursor = self.db_connect.cursor() 39 | def process_item(self, item, spider): 40 | self.insert_db(item) 41 | return item 42 | def close_spider(self, spider): 43 | self.db_connect.commit() 44 | self.db_connect.close() 45 | def insert_db(self, item): 46 | hot_value=(item['title'],item['up'],item['view'],item['danmu'],item['pic_url'],0,item['video_url'],item['hot_table_id']) 47 | sql = 'INSERT INTO bili_bili_hot_item VALUES (null,%s,%s,%s,%s,%s,%s,%s,%s)' 48 | print(sql, hot_value) 49 | self.cursor.execute(sql, hot_value) 50 | 51 | class BilibiliUserPipeline: 52 | def open_spider(self, spider): 53 | host = spider.settings.get('MYSQL_HOST') 54 | port = spider.settings.get('MYSQL_PORT') 55 | database = spider.settings.get('MYSQL_DATABASE') 56 | user = spider.settings.get('MYSQL_USER') 57 | password = spider.settings.get('MYSQL_PASSWORD') 58 | self.db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, charset='utf8') 59 | self.cursor = self.db_connect.cursor() 60 | 61 | def process_item(self, item, spider): 62 | self.insert_db(item) 63 | return item 64 | 65 | def close_spider(self, spider): 66 | self.db_connect.commit() 67 | self.db_connect.close() 68 | 69 | def insert_db(self, item): 70 | print(item.keys()) 71 | all_key=item.keys() 72 | need_key=['type','share','comment','like','post_time','bili_id','content','pic_urls','video_title' 73 | ,'video_url','video_pic_url','video_desc','original_up','original_content','up_id'] 74 | # str_key=['bili_id','content','pic_urls','video_title' 75 | # ,'video_url','video_pic_url','video_desc','original_up','original_content'] 76 | value=[] 77 | for k in need_key: 78 | if k in all_key: 79 | value.append(item[k]) 80 | else: 81 | value.append('null') 82 | print(value) 83 | print('+++++++++++++') 84 | tv=(value[0],value[1],value[2],value[3],value[4],value[5],value[6],value[7] 85 | ,value[8],value[9],value[10],value[11],value[12],value[13],value[14]) 86 | 87 | sql = 'INSERT INTO bili_dynasic VALUES (null,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)' 88 | # print(sql,tv) 89 | # value=(item['type'],item['share'],item['comment'],item['like'],item['post_time'],item['bili_id'] 90 | # ,item['content'],item['pic_urls'],item['video_title'],item['video_url'] 91 | # ,item['video_pic_url'],item['video_desc'],item['original_up'] 92 | # ,item['original_content'],item['up_id']) 93 | # sql = 'INSERT INTO zhihu_z_hot_item VALUES (null,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)' 94 | print(sql,tv) 95 | self.cursor.execute(sql, tv) 96 | print("数据保存成功!") 97 | 98 | class ZhihuPipeline: 99 | def open_spider(self, spider): 100 | host = spider.settings.get('MYSQL_HOST') 101 | port = spider.settings.get('MYSQL_PORT') 102 | database = spider.settings.get('MYSQL_DATABASE') 103 | user = spider.settings.get('MYSQL_USER') 104 | password = spider.settings.get('MYSQL_PASSWORD') 105 | self.db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, charset='utf8') 106 | self.cursor = self.db_connect.cursor() 107 | 108 | def process_item(self, item, spider): 109 | self.insert_db(item) 110 | return item 111 | 112 | def close_spider(self, spider): 113 | self.db_connect.commit() 114 | self.db_connect.close() 115 | 116 | def insert_db(self, item): 117 | hot_value=(item['rank'],item['title'],item['hot'],item['img_url'],0,item['title_url'],item['hot_table_id']) 118 | sql = 'INSERT INTO zhihu_z_hot_item VALUES (null,%s,%s,%s,%s,%s,%s,%s)' 119 | print(sql, hot_value) 120 | self.cursor.execute(sql, hot_value) 121 | 122 | class WeiboPipeline: 123 | def open_spider(self, spider): 124 | host = spider.settings.get('MYSQL_HOST') 125 | port = spider.settings.get('MYSQL_PORT') 126 | database = spider.settings.get('MYSQL_DATABASE') 127 | user = spider.settings.get('MYSQL_USER') 128 | password = spider.settings.get('MYSQL_PASSWORD') 129 | self.db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, charset='utf8') 130 | self.cursor = self.db_connect.cursor() 131 | 132 | def process_item(self, item, spider): 133 | self.insert_db(item) 134 | return item 135 | 136 | def close_spider(self, spider): 137 | self.db_connect.commit() 138 | self.db_connect.close() 139 | 140 | def insert_db(self, item): 141 | hot_value=(item['rank'],item['title'],item['hot'],0,item['title_url'],item['hot_table_id']) 142 | sql = 'INSERT INTO weibo_weibo_hot_item VALUES (null,%s,%s,%s,%s,%s,%s)' 143 | print(sql, hot_value) 144 | self.cursor.execute(sql, hot_value) 145 | 146 | class WeiboUserPipeline: 147 | def open_spider(self, spider): 148 | host = spider.settings.get('MYSQL_HOST') 149 | port = spider.settings.get('MYSQL_PORT') 150 | database = spider.settings.get('MYSQL_DATABASE') 151 | user = spider.settings.get('MYSQL_USER') 152 | password = spider.settings.get('MYSQL_PASSWORD') 153 | self.db_connect = pymysql.connect(host=host, port=port, database=database, user=user, password=password, charset='utf8mb4') 154 | self.cursor = self.db_connect.cursor() 155 | 156 | def process_item(self, item, spider): 157 | self.insert_db(item) 158 | return item 159 | 160 | def close_spider(self, spider): 161 | self.db_connect.commit() 162 | self.db_connect.close() 163 | 164 | def insert_db(self, item): 165 | print(item.keys()) 166 | all_key=item.keys() 167 | need_key=['share','comment','like','post_time','wb_id','content', 168 | 'pic_list','up_id'] 169 | # str_key=['bili_id','content','pic_urls','video_title' 170 | # ,'video_url','video_pic_url','video_desc','original_up','original_content'] 171 | value=[] 172 | for k in need_key: 173 | if k in all_key: 174 | value.append(item[k]) 175 | else: 176 | value.append('null') 177 | print(value) 178 | print('+++++++++++++') 179 | tv=(value[0],value[1],value[2],value[3],value[4],value[5],value[6],value[7]) 180 | 181 | sql = 'INSERT INTO weibo_dynasic VALUES (null,%s,%s,%s,%s,%s,%s,%s,%s)' 182 | # print(sql,tv) 183 | # value=(item['type'],item['share'],item['comment'],item['like'],item['post_time'],item['bili_id'] 184 | # ,item['content'],item['pic_urls'],item['video_title'],item['video_url'] 185 | # ,item['video_pic_url'],item['video_desc'],item['original_up'] 186 | # ,item['original_content'],item['up_id']) 187 | # sql = 'INSERT INTO zhihu_z_hot_item VALUES (null,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)' 188 | print(sql,tv) 189 | self.cursor.execute(sql, tv) 190 | print("数据保存成功!") -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/settings.py: -------------------------------------------------------------------------------- 1 | # Scrapy settings for myspider project 2 | # 3 | # For simplicity, this file contains only settings considered important or 4 | # commonly used. You can find more settings consulting the documentation: 5 | # 6 | # https://docs.scrapy.org/en/latest/topics/settings.html 7 | # https://docs.scrapy.org/en/latest/topics/downloader-middleware.html 8 | # https://docs.scrapy.org/en/latest/topics/spider-middleware.html 9 | 10 | BOT_NAME = 'myspider' 11 | 12 | SPIDER_MODULES = ['myspider.spiders'] 13 | NEWSPIDER_MODULE = 'myspider.spiders' 14 | 15 | 16 | # Crawl responsibly by identifying yourself (and your website) on the user-agent 17 | #USER_AGENT = 'bilibili (+http://www.yourdomain.com)' 18 | 19 | # Obey robots.txt rules 20 | # ROBOTSTXT_OBEY = True 21 | 22 | # Configure maximum concurrent requests performed by Scrapy (default: 16) 23 | #CONCURRENT_REQUESTS = 32 24 | 25 | # Configure a delay for requests for the same website (default: 0) 26 | # See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay 27 | # See also autothrottle settings and docs 28 | #DOWNLOAD_DELAY = 3 29 | # The download delay setting will honor only one of: 30 | #CONCURRENT_REQUESTS_PER_DOMAIN = 16 31 | #CONCURRENT_REQUESTS_PER_IP = 16 32 | 33 | # Disable cookies (enabled by default) 34 | #COOKIES_ENABLED = False 35 | 36 | # Disable Telnet Console (enabled by default) 37 | #TELNETCONSOLE_ENABLED = False 38 | 39 | # Override the default request headers: 40 | #DEFAULT_REQUEST_HEADERS = { 41 | # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 42 | # 'Accept-Language': 'en', 43 | #} 44 | 45 | # Enable or disable spider middlewares 46 | # See https://docs.scrapy.org/en/latest/topics/spider-middleware.html 47 | #SPIDER_MIDDLEWARES = { 48 | # 'bilibili.middlewares.BilibiliSpiderMiddleware': 543, 49 | #} 50 | 51 | # Enable or disable downloader middlewares 52 | # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html 53 | #DOWNLOADER_MIDDLEWARES = { 54 | # 'bilibili.middlewares.BilibiliDownloaderMiddleware': 543, 55 | #} 56 | 57 | # Enable or disable extensions 58 | # See https://docs.scrapy.org/en/latest/topics/extensions.html 59 | #EXTENSIONS = { 60 | # 'scrapy.extensions.telnet.TelnetConsole': None, 61 | #} 62 | 63 | # Configure item pipelines 64 | # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html 65 | ITEM_PIPELINES = { 66 | 'myspider.pipelines.BilibiliHotPipeline': 300, 67 | 'myspider.pipelines.BilibiliUserPipeline': 400, 68 | 'myspider.pipelines.ZhihuPipeline': 301, 69 | 'myspider.pipelines.WeiboPipeline': 302, 70 | 'myspider.pipelines.WeiboUserPipeline': 302, 71 | } 72 | 73 | # Enable and configure the AutoThrottle extension (disabled by default) 74 | # See https://docs.scrapy.org/en/latest/topics/autothrottle.html 75 | #AUTOTHROTTLE_ENABLED = True 76 | # The initial download delay 77 | #AUTOTHROTTLE_START_DELAY = 5 78 | # The maximum download delay to be set in case of high latencies 79 | #AUTOTHROTTLE_MAX_DELAY = 60 80 | # The average number of requests Scrapy should be sending in parallel to 81 | # each remote server 82 | #AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 83 | # Enable showing throttling stats for every response received: 84 | #AUTOTHROTTLE_DEBUG = False 85 | 86 | # Enable and configure HTTP caching (disabled by default) 87 | # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings 88 | #HTTPCACHE_ENABLED = True 89 | #HTTPCACHE_EXPIRATION_SECS = 0 90 | #HTTPCACHE_DIR = 'httpcache' 91 | #HTTPCACHE_IGNORE_HTTP_CODES = [] 92 | #HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage' 93 | MYSQL_HOST = '47.102.114.76' 94 | MYSQL_DATABASE = 'dweb' 95 | MYSQL_PORT = 3306 96 | MYSQL_USER = 'root' 97 | MYSQL_PASSWORD = 'huahuadan1234' -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/bili_hot.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/bili_hot.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/up.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/up.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/weibo_hot.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/weibo_hot.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/weibouser.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/weibouser.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/zhihu.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/Scrapy爬虫/myspider/myspider/spiders/__pycache__/zhihu.cpython-38.pyc -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/bili_hot.py: -------------------------------------------------------------------------------- 1 | import scrapy 2 | import json 3 | import time 4 | import pymysql 5 | from myspider.items import BilibiliItem 6 | class BiliHotSpider(scrapy.Spider): 7 | def __init__(self,save_index): 8 | self.save_index=save_index 9 | name = 'bili_hot' 10 | allowed_domains = ['api.bilibili.com'] 11 | start_urls = ['https://api.bilibili.com/x/web-interface/popular?pn=1'] 12 | custom_settings = { 13 | 'ITEM_PIPELINES': {'myspider.pipelines.BilibiliHotPipeline': 300}, 14 | } 15 | page=1 16 | def parse(self, response): 17 | # while(1): 18 | text=response.text 19 | stext=json.loads(text) 20 | for t in stext['data']['list']: 21 | title=t['title'] 22 | pic_url=t['pic'] 23 | desc=t['desc'] 24 | up=t['owner']['name'] 25 | video_url=t['short_link'] 26 | view=t['stat']['view'] 27 | danmu=t['stat']['danmaku'] 28 | bi = BilibiliItem(hot_table_id=self.save_index,title=title,pic_url=pic_url,up=up,video_url=video_url,view=view,danmu=danmu,desc=desc) 29 | yield bi 30 | if self.page<3: 31 | self.page+=1 32 | url='https://api.bilibili.com/x/web-interface/popular?pn='+str(self.page) 33 | yield scrapy.Request(url=url, callback=self.parse) 34 | # time.sleep(3) -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/up.py: -------------------------------------------------------------------------------- 1 | import scrapy 2 | import json 3 | from myspider.items import DynamicItem 4 | 5 | 6 | class UpSpider(scrapy.Spider): 7 | def __init__(self,uid,lasttime): 8 | self.uid=uid 9 | self.lasttime=lasttime 10 | self.start_urls = ['https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?host_uid='+str(uid)]#嘉然:672328094 可汗:23947287 11 | 12 | name = 'up' 13 | allowed_domains = ['bilibili.com'] 14 | custom_settings = { 15 | 'ITEM_PIPELINES': {'myspider.pipelines.BilibiliUserPipeline': 400 }, 16 | } 17 | def parse(self, response): 18 | data = json.loads(response.text) 19 | cards=data['data']['cards'] 20 | i=0 21 | for card in cards: 22 | post_time=card['desc']['timestamp'] 23 | if int(post_time)<=int(self.lasttime): 24 | continue 25 | i+=1 26 | bili_id=card['desc']['dynamic_id_str'] 27 | try: 28 | temp=json.loads(card['card']) 29 | share=temp['stat']['share'] 30 | comment=temp['stat']['reply'] 31 | like=temp['stat']['like'] 32 | except: 33 | share=card['desc']['repost'] 34 | comment=card['desc']['comment'] 35 | like=card['desc']['like'] 36 | if card['desc']['type']==4:#自己发动态 37 | card = card['card'] 38 | jcard = json.loads(card) 39 | content=jcard['item']['content'] 40 | Item=DynamicItem(bili_id=bili_id,type=0,share=share,comment=comment,like=like,post_time=post_time, 41 | content=content,up_id=self.uid) 42 | yield Item 43 | elif card['desc']['orig_type']==8:#转发视频 44 | card = card['card'] 45 | jcard = json.loads(card) 46 | jjcard=json.loads(jcard['origin']) 47 | share_comm=jcard['item']['content'] 48 | title=jjcard['title'] 49 | desc=jjcard['desc'] 50 | owner=jjcard['owner']['name'] 51 | pic_url=jjcard['pic'] 52 | video_url=jjcard['short_link'] 53 | Item = DynamicItem(bili_id=bili_id,type=4, share=share, comment=comment, like=like, post_time=post_time, 54 | content=share_comm,video_title=title, video_url=video_url, video_pic_url=pic_url, 55 | video_desc=desc,original_up=owner,up_id=self.uid) 56 | yield Item 57 | elif card['desc']['orig_type']==2:#转发的动态 58 | tcard=card['card'] 59 | jcard = json.loads(tcard) 60 | share_comm = jcard['item']['content'] 61 | content = json.loads(jcard['origin'])['item']['description'] 62 | owner=json.loads(jcard['origin'])['user']['name'] 63 | Item = DynamicItem(bili_id=bili_id,type=3, share=share, comment=comment, like=like, post_time=post_time, 64 | content=share_comm,original_up=owner,original_content=content,up_id=self.uid) 65 | yield Item 66 | elif card['desc']['type']==8 and card['desc']['orig_type']==0:#自己发布视频 67 | card=card['card'] 68 | jcard=json.loads(card) 69 | video_title=jcard['title'] 70 | video_url=jcard['short_link'] 71 | pic_url=jcard['pic'] 72 | desc=str(jcard['desc']).replace('\n','') 73 | content=jcard['dynamic'] 74 | Item=DynamicItem(bili_id=bili_id,type=2,share=share,comment=comment,like=like,post_time=post_time, 75 | video_title=video_title,video_url=video_url,video_pic_url=pic_url, 76 | video_desc=desc,up_id=self.uid,content=content) 77 | yield Item 78 | elif card['desc']['type']==2 and card['desc']['orig_type']==0:#自己发布的带图片的动态 79 | card = card['card'] 80 | jcard = json.loads(card) 81 | content = jcard['item']['description'] 82 | pic_url_list=jcard['item']['pictures'] 83 | pic_urls=[] 84 | for p in pic_url_list: 85 | pic_urls.append(p['img_src']) 86 | Item=DynamicItem(bili_id=bili_id,type=1,share=share,comment=comment,like=like,post_time=post_time, 87 | content=content,pic_urls=json.dumps(pic_urls),up_id=self.uid) 88 | yield Item 89 | -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/weibo_hot.py: -------------------------------------------------------------------------------- 1 | import scrapy 2 | import json 3 | from myspider.items import WeiboItem 4 | class WbSpider(scrapy.Spider): 5 | def __init__(self,save_index): 6 | self.save_index=save_index 7 | name = 'weibo_hot' 8 | allowed_domains = ['huashuimoyu.com'] 9 | start_urls = ['http://huashuimoyu.com/detail/2'] 10 | custom_settings = { 11 | 'ITEM_PIPELINES':{'myspider.pipelines.WeiboPipeline': 302} 12 | } 13 | def parse(self, response): 14 | a_list=response.xpath('(//tbody)[1]//tr') 15 | for a in a_list: 16 | rank=a.xpath('./td[1]/text()').extract_first() 17 | title=a.xpath('./td[2]/a/text()').extract_first() 18 | title_url=a.xpath('./td[2]/a/@href').extract_first() 19 | hot=a.xpath('./td[3]/text()').extract_first() 20 | # print(rank) 21 | zh=WeiboItem(hot_table_id=self.save_index,rank=rank,title=title,title_url=title_url,hot=hot) 22 | yield zh 23 | -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/weibouser.py: -------------------------------------------------------------------------------- 1 | import scrapy 2 | import json 3 | from myspider.items import WeiboUserItem 4 | import datetime 5 | import time 6 | def GMT2stamp(dd): 7 | GMT_FORMAT = '%a %b %d %H:%M:%S +0800 %Y' 8 | date_temp = str(datetime.datetime.strptime(dd, GMT_FORMAT)) 9 | # 转换成时间数组 10 | timeArray = time.strptime(date_temp, "%Y-%m-%d %H:%M:%S") 11 | # 转换成时间戳 12 | lasttimestamp = int(time.mktime(timeArray)) 13 | return lasttimestamp 14 | class WeibouserSpider(scrapy.Spider): 15 | def __init__(self,uid,lasttime): 16 | self.uid=uid 17 | self.lasttime=lasttime 18 | self.start_urls =['https://m.weibo.cn/api/container/getIndex?&containerid='+self.uid]#1076031782488734#1076033708072513 19 | 20 | name = 'weibouser' 21 | custom_settings = { 22 | 'ITEM_PIPELINES': {'myspider.pipelines.WeiboUserPipeline': 302 }, 23 | } 24 | def parse(self, response): 25 | data = (json.loads(response.text))['data'] 26 | # print(type(data),'\n',data) 27 | # card=data['cards'][1]#['created_at'] 28 | for card in data['cards']: 29 | post_time=GMT2stamp(card['mblog']['created_at']) 30 | if int(post_time)<=int(self.lasttime): 31 | continue 32 | content=(card['mblog']['text']) 33 | share=card['mblog']['reposts_count'] 34 | comment=card['mblog']['comments_count'] 35 | like=card['mblog']['attitudes_count'] 36 | wb_id=card['mblog']['mid'] 37 | pic_list=[] 38 | for i in card['mblog']['pic_ids']: 39 | pic_list.append('https://wx2.sinaimg.cn/large/'+i) 40 | user=WeiboUserItem(up_id=self.uid,wb_id=wb_id,content=content,pic_list=json.dumps(pic_list),share=share,comment=comment,like=like,post_time=post_time) 41 | yield user 42 | -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/myspider/spiders/zhihu.py: -------------------------------------------------------------------------------- 1 | import scrapy 2 | from myspider.items import ZhihuItem 3 | 4 | class ZhihuSpider(scrapy.Spider): 5 | def __init__(self,save_index): 6 | self.save_index=save_index 7 | custom_settings = { 8 | 'ITEM_PIPELINES':{'myspider.pipelines.ZhihuPipeline': 301} 9 | } 10 | name = 'zhihu' 11 | allowed_domains = ['huashuimoyu.com'] 12 | start_urls = ['http://huashuimoyu.com/detail/3'] 13 | def parse(self, response): 14 | a_list=response.xpath('(//tbody)[1]//tr') 15 | for a in a_list: 16 | rank=a.xpath('./td[1]/text()').extract_first() 17 | img_url=a.xpath('./td[2]/img/@src').extract_first() 18 | title=a.xpath('./td[3]/a/text()').extract_first() 19 | title_url=a.xpath('./td[3]/a/@href').extract_first() 20 | hot=a.xpath('./td[4]/text()').extract_first() 21 | zh=ZhihuItem(hot_table_id=self.save_index,rank=rank,img_url=img_url,title=title,title_url=title_url,hot=hot) 22 | yield zh 23 | 24 | 25 | -------------------------------------------------------------------------------- /工程文件/Scrapy爬虫/myspider/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.io/en/latest/deploy.html 5 | 6 | [settings] 7 | default = myspider.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = myspider 12 | -------------------------------------------------------------------------------- /工程文件/vue3前端/README.md: -------------------------------------------------------------------------------- 1 | # test5 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Customize configuration 19 | See [Configuration Reference](https://cli.vuejs.org/config/). 20 | -------------------------------------------------------------------------------- /工程文件/vue3前端/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /工程文件/vue3前端/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test5", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build" 8 | }, 9 | "dependencies": { 10 | "@element-plus/icons": "^0.0.11", 11 | "@element-plus/icons-vue": "^1.1.4", 12 | "axios": "^0.26.1", 13 | "core-js": "^3.8.3", 14 | "element-plus": "^2.1.4", 15 | "mockjs": "^1.1.0", 16 | "moment": "^2.29.3", 17 | "moment-timezone": "^0.5.34", 18 | "vue": "^3.2.13", 19 | "vue-class-component": "^8.0.0-0", 20 | "vue-router": "^4.0.3", 21 | "vuex": "^4.0.0" 22 | }, 23 | "devDependencies": { 24 | "@vue/cli-plugin-babel": "~5.0.0", 25 | "@vue/cli-plugin-router": "~5.0.0", 26 | "@vue/cli-plugin-typescript": "~5.0.0", 27 | "@vue/cli-plugin-vuex": "~5.0.0", 28 | "@vue/cli-service": "~5.0.0", 29 | "less": "^4.0.0", 30 | "less-loader": "^8.0.0", 31 | "typescript": "~4.5.5" 32 | }, 33 | "browserslist": [ 34 | "> 1%", 35 | "last 2 versions", 36 | "not dead", 37 | "not ie 11" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /工程文件/vue3前端/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/public/favicon.ico -------------------------------------------------------------------------------- /工程文件/vue3前端/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Document 9 | 10 | 11 | 12 |
13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/App copy.vue: -------------------------------------------------------------------------------- 1 | 110 | 111 | 158 | 159 | 187 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/App.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/api/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/api/index.ts -------------------------------------------------------------------------------- /工程文件/vue3前端/src/assets/login.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/assets/login.jpg -------------------------------------------------------------------------------- /工程文件/vue3前端/src/assets/login2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/assets/login2.jpg -------------------------------------------------------------------------------- /工程文件/vue3前端/src/assets/login22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/assets/login22.jpg -------------------------------------------------------------------------------- /工程文件/vue3前端/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/assets/logo.png -------------------------------------------------------------------------------- /工程文件/vue3前端/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 47 | 48 | 49 | 65 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/components/bishare.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/components/testApi.vue: -------------------------------------------------------------------------------- 1 | 15 | 53 | 54 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/http.ts: -------------------------------------------------------------------------------- 1 | // 引入axios 2 | import axios from 'axios'; 3 | import router from './router' 4 | // 请求拦截 5 | axios.interceptors.request.use(config => { 6 | alert("拦截ing"); 7 | // 判断是否存在token,如果存在的话,则每个http header都加上token 8 | if (localStorage.token) {//条件这么写是因为在login.vue的页面把token存入了localStorage的wxToken中 9 | config.headers.Authorization = localStorage.token; 10 | } 11 | return config;//赋值完后把config返回回去 12 | 13 | }, error => { 14 | // 请求错误后把我们的error返回回去 15 | return Promise.reject(error); 16 | }) 17 | 18 | /** 19 | * 响应拦截 20 | * ,优式在于;在页面中每次请求的时候不需要写一遍catch 21 | * */ 22 | 23 | axios.interceptors.response.use( 24 | response => { 25 | //请求成功就给它返回回去 26 | return response; 27 | }, 28 | // 请求错误 29 | error => { 30 | //错误提醒 31 | // 如果token过期了的话;我们也需要给一个提醒 32 | const { status } = error.response;//在response中有一个status 我们用es6的方式解构出来 33 | if (status == 401) { 34 | //后台定义401为token过期 35 | alert('token过期,请重新登录!'); 36 | // 如果token过期了;我们应该清楚token 37 | localStorage.removeItem('wxtoken'); 38 | // 清楚后让它跳转到登录页面去 39 | router.push('/login') 40 | } else { 41 | alert(error.response.data) 42 | } 43 | return Promise.reject(error); 44 | } 45 | ); 46 | export default axios; -------------------------------------------------------------------------------- /工程文件/vue3前端/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | import Test from './test.vue' 4 | import router from './router' 5 | import store from './store' 6 | import ElementPlus from 'element-plus' // 引入element-plus 7 | import 'element-plus/theme-chalk/index.css' // 引入element-plus的样式 8 | require('./mock') 9 | 10 | 11 | // 为什么传这三个参数,官网有详细介绍 12 | router.beforeEach((to, from, next) => { 13 | // 这里的meta就是我们刚刚在路由里面配置的meta 14 | if (to.meta.requireAuth) { 15 | // 下面这个判断是自行实现到底是否有没有登录store.getters.isLogin 16 | if (localStorage.token) { 17 | // 登录就继续 18 | next(); 19 | } else { 20 | // 没有登录跳转到登录页面,登录成功之后再返回到之前请求的页面 21 | next({ 22 | path: '/login', 23 | query: { redirect: to.fullPath } 24 | }) 25 | } 26 | } else { 27 | // 不需要登录的,可以继续访问 28 | next() 29 | } 30 | }); 31 | 32 | // 引入axios 33 | import axios from 'axios'; 34 | // import router from './router' 35 | // 请求拦截 36 | axios.interceptors.request.use(config => { 37 | // 判断是否存在token,如果存在的话,则每个http header都加上token 38 | if (localStorage.token) {//条件这么写是因为在login.vue的页面把token存入了localStorage的wxToken中 39 | config.headers.Authorization = "Token " + localStorage.token; 40 | console.log(config); 41 | // alert(localStorage.token); 42 | } 43 | return config;//赋值完后把config返回回去 44 | 45 | }, error => { 46 | // 请求错误后把我们的error返回回去 47 | return Promise.reject(error); 48 | }) 49 | 50 | /** 51 | * 响应拦截 52 | * ,优式在于;在页面中每次请求的时候不需要写一遍catch 53 | * */ 54 | 55 | axios.interceptors.response.use( 56 | response => { 57 | //请求成功就给它返回回去 58 | return response; 59 | }, 60 | // 请求错误 61 | error => { 62 | //错误提醒 63 | // 如果token过期了的话;我们也需要给一个提醒 64 | const { status } = error.response;//在response中有一个status 我们用es6的方式解构出来 65 | if (status == 401) { 66 | //后台定义401为token过期 67 | // 如果token过期了;我们应该清楚token 68 | localStorage.removeItem('token'); 69 | // 清楚后让它跳转到登录页面去 70 | // router.push('/login') 71 | } else { 72 | return error; 73 | // alert("错误!")//(error.response.data) 74 | } 75 | return Promise.reject(error); 76 | } 77 | ); 78 | export default axios; 79 | createApp(App) 80 | .use(store) 81 | .use(router) 82 | .use(ElementPlus, { zIndex: 3000, size: 'small' }) // 使用element-plus 83 | .mount('#app') 84 | 85 | 86 | // createApp(Test) 87 | // .use(store) 88 | // .use(router) 89 | // .use(ElementPlus, { zIndex: 3000, size: 'small' }) // 使用element-plus 90 | // .mount('#test') -------------------------------------------------------------------------------- /工程文件/vue3前端/src/mock.js: -------------------------------------------------------------------------------- 1 | // //引入mockjs 2 | // const Mock = require('mockjs') 3 | // // 获取 mock.Random 对象 4 | // const Random = Mock.Random; 5 | // //使用mockjs模拟数据 6 | // Mock.mock('api/users/', (req, res) => {//当post或get请求到/api/users/路由时Mock会拦截请求并返回上面的数据 7 | // var list = [{"url":"http://127.0.0.1:8000/users/3.json","username":"aaaaaa","email":"","groups":[]},{"url":"http://127.0.0.1:8000/users/2.json","username":"somenzz","email":"","groups":[]},{"url":"http://127.0.0.1:8000/users/1.json","username":"admin","email":"admin@example.com","groups":[]}] 8 | // return list 9 | // }) -------------------------------------------------------------------------------- /工程文件/vue3前端/src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router' 2 | import HomeView from '../views/HomeView.vue' 3 | import HomeDynasic from '../views/HomeDynasic.vue' 4 | import Personal from '../views/person.vue' 5 | import Login from '../views/Login.vue' 6 | import Register from '../views/Register.vue' 7 | import A from '../views/A.vue' 8 | import testApi from '../views/testApi.vue' 9 | import Manage from '../views/Manage.vue' 10 | const routes: Array = 11 | // [ 12 | // { 13 | // path: '/personal', 14 | // name: 'Personal', 15 | // component: Personal 16 | // }, 17 | // { 18 | // path: '/', 19 | // name: 'Login', 20 | // component: Login 21 | // }, 22 | // { 23 | // path: '/register', 24 | // name: 'Register', 25 | // component: Register 26 | // } 27 | // ] 28 | [ 29 | { 30 | path: '/test', 31 | name: 'testApi', 32 | component: testApi 33 | }, 34 | { 35 | path: '/manage', 36 | name: 'Manage', 37 | meta: { 38 | requireAuth: true, 39 | }, 40 | component: Manage 41 | }, { 42 | path: '/dynasic', 43 | name: 'dynasic', 44 | meta: { 45 | requireAuth: true, 46 | }, 47 | component: HomeDynasic 48 | }, 49 | { 50 | path: '/', 51 | name: 'hot', 52 | component: HomeView 53 | }, 54 | { 55 | path: '/A', 56 | name: 'A', 57 | component: A 58 | }, 59 | { 60 | path: '/person', 61 | name: 'Person', 62 | meta: { 63 | requireAuth: true, 64 | }, 65 | component: () => 66 | import('../views/person.vue') 67 | }, 68 | { 69 | path: '/register', 70 | name: 'register', 71 | component: Register 72 | }, 73 | { 74 | path: '/login', 75 | name: 'login', 76 | component: Login 77 | }, 78 | { 79 | path: '/about', 80 | name: 'about', 81 | // route level code-splitting 82 | // this generates a separate chunk (about.[hash].js) for this route 83 | // which is lazy-loaded when the route is visited. 84 | component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue') 85 | } 86 | ] 87 | 88 | const router = createRouter({ 89 | // history: createWebHistory(process.env.BASE_URL), 90 | history: createWebHistory("/"), 91 | routes 92 | }) 93 | 94 | export default router 95 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | declare module '*.vue' { 3 | import type { DefineComponent } from 'vue' 4 | const component: DefineComponent<{}, {}, any> 5 | export default component 6 | } 7 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/static/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/static/comment.png -------------------------------------------------------------------------------- /工程文件/vue3前端/src/static/like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/static/like.png -------------------------------------------------------------------------------- /工程文件/vue3前端/src/static/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/static/share.png -------------------------------------------------------------------------------- /工程文件/vue3前端/src/store/index.ts: -------------------------------------------------------------------------------- 1 | import { createStore } from 'vuex' 2 | 3 | export default createStore({ 4 | state: { 5 | }, 6 | getters: { 7 | }, 8 | mutations: { 9 | }, 10 | actions: { 11 | }, 12 | modules: { 13 | } 14 | }) 15 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/test.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 16 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/views/A.vue: -------------------------------------------------------------------------------- 1 | 35 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/views/AboutView.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/views/HomeView-zhihu.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/工程文件/vue3前端/src/views/HomeView-zhihu.zip -------------------------------------------------------------------------------- /工程文件/vue3前端/src/views/Login.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/views/Register.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/views/person.vue: -------------------------------------------------------------------------------- 1 | 127 | 128 | 414 | 415 | 416 | -------------------------------------------------------------------------------- /工程文件/vue3前端/src/views/testApi.vue: -------------------------------------------------------------------------------- 1 | 48 | -------------------------------------------------------------------------------- /工程文件/vue3前端/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "strict": false, 6 | "jsx": "preserve", 7 | "moduleResolution": "node", 8 | "experimentalDecorators": true, 9 | "skipLibCheck": true, 10 | "esModuleInterop": true, 11 | "allowSyntheticDefaultImports": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "useDefineForClassFields": true, 14 | "sourceMap": true, 15 | "baseUrl": ".", 16 | "types": [ 17 | "webpack-env" 18 | ], 19 | "paths": { 20 | "@/*": [ 21 | "src/*" 22 | ] 23 | }, 24 | "lib": [ 25 | "esnext", 26 | "dom", 27 | "dom.iterable", 28 | "scripthost" 29 | ] 30 | }, 31 | "include": [ 32 | "src/**/*.ts", 33 | "src/**/*.tsx", 34 | "src/**/*.vue", 35 | "tests/**/*.ts", 36 | "tests/**/*.tsx" 37 | ], 38 | "exclude": [ 39 | "node_modules" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /工程文件/vue3前端/vue.config.js: -------------------------------------------------------------------------------- 1 | // const { defineConfig } = require('@vue/cli-service') 2 | // module.exports = defineConfig({ 3 | // transpileDependencies: true 4 | // }, ) 5 | module.exports = { 6 | // publicPath: process.env.NODE_ENV === 'production' ? './' : '/', 7 | configureWebpack: { 8 | // other webpack options to merge in ... 9 | }, 10 | // devServer Options don't belong into `configureWebpack` 11 | publicPath: '/', 12 | 13 | devServer: { 14 | host: "0.0.0.0", 15 | port: 8080, 16 | hot: true, 17 | // disableHostCheck: true, 18 | } 19 | }; -------------------------------------------------------------------------------- /数据库应用系统报告.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slipegg/Comprehensive-information-website/969b5924b52b1ebb0af65c2d508372df0153f2e8/数据库应用系统报告.pdf --------------------------------------------------------------------------------