使用pycharm和mysql,完成一个数据管理系统的设计,管理各种数据集。要求实现:(1)针对每个数据集可以展示出具体描述信息,并可提供下载,展示下载量,并用折线图显示(2)数据集上可以添加代码,评论,有点赞和踩;用户也可以取消点赞,可以删除自己的评论。首页展示下载量最大的数据集。展示详细带代码
时间: 2024-03-23 21:36:41 浏览: 122
好的,下面我会给出一个较为详细的实现步骤,包括代码实现和数据库设计。
1. 环境搭建
首先需要安装Pycharm和MySQL,并安装PyMySQL库来连接MySQL数据库。
2. 数据库设计
根据需求,我们需要设计三张表:数据集表(Dataset)、评论表(Comment)和点赞表(Like)。具体表结构如下:
- 数据集表(Dataset)
| 字段名 | 类型 | 说明 |
| ---------- | ------------ | ---------- |
| id | int | 主键 |
| name | varchar(100) | 数据集名称 |
| desc | text | 数据集描述 |
| download | int | 下载量 |
| create_at | datetime | 创建时间 |
| update_at | datetime | 更新时间 |
| file_path | varchar(255) | 文件路径 |
| user_id | int | 用户id |
- 评论表(Comment)
| 字段名 | 类型 | 说明 |
| --------- | -------- | ------------ |
| id | int | 主键 |
| content | text | 评论内容 |
| create_at | datetime | 创建时间 |
| update_at | datetime | 更新时间 |
| user_id | int | 用户id |
| dataset_id| int | 数据集id |
- 点赞表(Like)
| 字段名 | 类型 | 说明 |
| --------- | -------- | ---------- |
| id | int | 主键 |
| like | boolean | 点赞或踩 |
| create_at | datetime | 创建时间 |
| update_at | datetime | 更新时间 |
| user_id | int | 用户id |
| dataset_id| int | 数据集id |
3. 代码实现
接下来我们来实现代码部分,主要分为以下几步:
(1)创建Django项目
在Pycharm中创建Django项目,使用MySQL作为数据库,使用PyMySQL库连接数据库。
(2)创建数据模型
在models.py文件中创建数据模型,分别对应上面的三张表。例如:
```python
from django.db import models
from django.contrib.auth.models import User
class Dataset(models.Model):
name = models.CharField(max_length=100)
desc = models.TextField()
download = models.IntegerField(default=0)
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
file_path = models.CharField(max_length=255)
user = models.ForeignKey(User, on_delete=models.CASCADE)
class Comment(models.Model):
content = models.TextField()
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
dataset = models.ForeignKey(Dataset, on_delete=models.CASCADE)
class Like(models.Model):
like = models.BooleanField(default=True)
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
dataset = models.ForeignKey(Dataset, on_delete=models.CASCADE)
```
(3)创建视图函数
在views.py文件中创建视图函数,用于展示数据集,添加评论和点赞等功能。例如:
```python
from django.shortcuts import render, get_object_or_404, redirect
from .models import Dataset, Comment, Like
from django.contrib.auth.decorators import login_required
from django.contrib import messages
import matplotlib.pyplot as plt
@login_required
def show_dataset(request, dataset_id):
dataset = get_object_or_404(Dataset, pk=dataset_id)
comments = Comment.objects.filter(dataset=dataset)
user_like = Like.objects.filter(dataset=dataset, user=request.user).first()
like_count = Like.objects.filter(dataset=dataset, like=True).count()
dislike_count = Like.objects.filter(dataset=dataset, like=False).count()
if request.method == 'POST':
if 'comment' in request.POST:
content = request.POST.get('content')
comment = Comment.objects.create(content=content, user=request.user, dataset=dataset)
comment.save()
messages.success(request, '评论添加成功!')
return redirect('show_dataset', dataset_id=dataset_id)
elif 'like' in request.POST:
like = request.POST.get('like')
user_like = Like.objects.filter(dataset=dataset, user=request.user).first()
if user_like:
user_like.like = like
user_like.save()
if like:
messages.success(request, '点赞成功!')
else:
messages.success(request, '已取消点赞!')
else:
like_obj = Like.objects.create(like=like, user=request.user, dataset=dataset)
like_obj.save()
if like:
messages.success(request, '点赞成功!')
else:
messages.success(request, '已取消点赞!')
return redirect('show_dataset', dataset_id=dataset_id)
return render(request, 'show_dataset.html', {
'dataset': dataset,
'comments': comments,
'user_like': user_like,
'like_count': like_count,
'dislike_count': dislike_count,
})
@login_required
def download_dataset(request, dataset_id):
dataset = get_object_or_404(Dataset, pk=dataset_id)
dataset.download += 1
dataset.save()
return redirect(dataset.file_path)
def show_chart(request, dataset_id):
dataset = get_object_or_404(Dataset, pk=dataset_id)
likes = Like.objects.filter(dataset=dataset)
like_counts = []
dislike_counts = []
for like in likes:
if like.like:
like_counts.append(like.id)
else:
dislike_counts.append(like.id)
plt.plot(like_counts, label='like')
plt.plot(dislike_counts, label='dislike')
plt.legend(loc='upper right')
plt.title('Like/Dislike Count')
plt.xlabel('Count')
plt.ylabel('Dataset ID')
plt.show()
return redirect('show_dataset', dataset_id=dataset_id)
```
(4)创建模板文件
在templates文件夹中创建模板文件,用于展示数据集和评论等信息。例如:
show_dataset.html
```html
{% extends 'base.html' %}
{% block content %}
<h1>{{ dataset.name }}</h1>
<p>{{ dataset.desc }}</p>
<p>下载量:{{ dataset.download }}</p>
{% if user_like %}
{% if user_like.like %}
<form action="{% url 'show_dataset' dataset_id=dataset.id %}" method="post">
{% csrf_token %}
<button type="submit" name="like" value="False">取消点赞</button>
</form>
{% else %}
<form action="{% url 'show_dataset' dataset_id=dataset.id %}" method="post">
{% csrf_token %}
<button type="submit" name="like" value="True">点赞</button>
</form>
{% endif %}
{% else %}
<form action="{% url 'show_dataset' dataset_id=dataset.id %}" method="post">
{% csrf_token %}
<button type="submit" name="like" value="True">点赞</button>
</form>
{% endif %}
{% if like_count or dislike_count %}
<p>点赞数:{{ like_count }}</p>
<p>踩数:{{ dislike_count }}</p>
{% endif %}
<h2>评论</h2>
{% for comment in comments %}
<p>{{ comment.content }}</p>
{% if comment.user == request.user %}
<form action="{% url 'delete_comment' comment_id=comment.id %}" method="post">
{% csrf_token %}
<button type="submit">删除评论</button>
</form>
{% endif %}
{% endfor %}
<h2>添加评论</h2>
<form action="{% url 'show_dataset' dataset_id=dataset.id %}" method="post">
{% csrf_token %}
<textarea name="content"></textarea>
<button type="submit" name="comment" value="True">添加评论</button>
</form>
{% endblock %}
```
(5)创建路由
在urls.py文件中创建路由,将视图函数和模板文件对应起来。例如:
```python
from django.urls import path
from . import views
urlpatterns = [
path('dataset/<int:dataset_id>/', views.show_dataset, name='show_dataset'),
path('dataset/<int:dataset_id>/download/', views.download_dataset, name='download_dataset'),
path('dataset/<int:dataset_id>/chart/', views.show_chart, name='show_chart'),
]
```
4. 运行测试
完成以上步骤后,即可运行Django项目,并在Web页面上展示数据集和评论等信息,同时实现点赞和踩的功能,并且可以根据下载量展示折线图。
阅读全文