使用pycharm和mysql,完成一个数据管理系统的设计,管理各种数据集。要求实现:(1)针对每个数据集可以展示出具体描述信息,并可提供下载(2)数据集上可以添加代码,评论,有点赞和踩;用户也可以取消点赞,可以删除自己的评论。首页展示关注度最高或者下载量最大的数据集,并在网页显示出来,请显示详细代码
时间: 2024-02-17 14:05:30 浏览: 81
首先,需要安装pycharm和mysql数据库,并且在mysql中创建一个名为"data_management_system"的数据库。
接下来,创建一个名为"main.py"的python文件,用于运行整个系统。在文件中导入必要的库和模块:
```python
from flask import Flask, render_template, request, redirect, url_for
from flask_mysqldb import MySQL
import yaml
import os
```
然后,创建一个Flask应用程序,并从yaml文件中读取数据库连接信息:
```python
app = Flask(__name__)
db = yaml.load(open('db.yaml'), Loader=yaml.FullLoader)
# Configure MySQL
app.config['MYSQL_HOST'] = db['mysql_host']
app.config['MYSQL_USER'] = db['mysql_user']
app.config['MYSQL_PASSWORD'] = db['mysql_password']
app.config['MYSQL_DB'] = db['mysql_db']
mysql = MySQL(app)
```
接下来,创建一个路由,用于展示数据集的具体描述信息,并提供数据集的下载链接:
```python
@app.route('/dataset/<int:id>', methods=['GET'])
def dataset(id):
cur = mysql.connection.cursor()
result = cur.execute("SELECT * FROM datasets WHERE id = %s", [id])
if result > 0:
dataset = cur.fetchone()
return render_template('dataset.html', dataset=dataset)
else:
return 'Dataset not found'
```
上述代码中,我们通过id参数从数据库中获取数据集的详细信息,并将其传递给名为"dataset.html"的模板,用于在网页中显示。
接下来,创建一个路由,用于添加代码和评论,以及点赞和踩:
```python
@app.route('/dataset/<int:id>/add_code', methods=['POST'])
def add_code(id):
if request.method == 'POST':
code = request.form['code']
cur = mysql.connection.cursor()
cur.execute("INSERT INTO codes (dataset_id, code) VALUES (%s, %s)", [id, code])
mysql.connection.commit()
cur.close()
return redirect(url_for('dataset', id=id))
@app.route('/dataset/<int:id>/add_comment', methods=['POST'])
def add_comment(id):
if request.method == 'POST':
comment = request.form['comment']
cur = mysql.connection.cursor()
cur.execute("INSERT INTO comments (dataset_id, comment) VALUES (%s, %s)", [id, comment])
mysql.connection.commit()
cur.close()
return redirect(url_for('dataset', id=id))
@app.route('/dataset/<int:id>/like', methods=['POST'])
def like(id):
if request.method == 'POST':
cur = mysql.connection.cursor()
cur.execute("UPDATE datasets SET likes = likes + 1 WHERE id = %s", [id])
mysql.connection.commit()
cur.close()
return redirect(url_for('dataset', id=id))
@app.route('/dataset/<int:id>/dislike', methods=['POST'])
def dislike(id):
if request.method == 'POST':
cur = mysql.connection.cursor()
cur.execute("UPDATE datasets SET dislikes = dislikes + 1 WHERE id = %s", [id])
mysql.connection.commit()
cur.close()
return redirect(url_for('dataset', id=id))
```
上述代码中,对于添加代码和评论,我们从表单中获取数据,并将其插入到对应的数据库表中。对于点赞和踩,我们通过更新数据库表中的likes和dislikes字段实现。
最后,创建一个路由,用于展示关注度最高或者下载量最大的数据集:
```python
@app.route('/', methods=['GET'])
def index():
cur = mysql.connection.cursor()
result = cur.execute("SELECT * FROM datasets ORDER BY likes DESC, downloads DESC LIMIT 10")
if result > 0:
datasets = cur.fetchall()
return render_template('index.html', datasets=datasets)
else:
return 'No datasets found'
```
上述代码中,我们从数据库中获取关注度最高或者下载量最大的前10个数据集,并将其传递给名为"index.html"的模板,用于在网页中显示。
最后,创建一个名为"dataset.html"的模板,用于展示数据集的详细信息和下载链接:
```html
<!DOCTYPE html>
<html>
<head>
<title>{{ dataset.title }}</title>
</head>
<body>
<h1>{{ dataset.title }}</h1>
<p>{{ dataset.description }}</p>
<p>Downloads: {{ dataset.downloads }}</p>
<p>Likes: {{ dataset.likes }}</p>
<p>Dislikes: {{ dataset.dislikes }}</p>
<form action="{{ url_for('like', id=dataset.id) }}" method="POST">
<button type="submit">Like</button>
</form>
<form action="{{ url_for('dislike', id=dataset.id) }}" method="POST">
<button type="submit">Dislike</button>
</form>
<hr>
<h2>Code</h2>
{% for code in dataset.codes %}
<p>{{ code.code }}</p>
{% endfor %}
<form action="{{ url_for('add_code', id=dataset.id) }}" method="POST">
<textarea name="code"></textarea>
<button type="submit">Add Code</button>
</form>
<hr>
<h2>Comments</h2>
{% for comment in dataset.comments %}
<p>{{ comment.comment }}</p>
{% if comment.user_id == current_user.id %}
<form action="{{ url_for('delete_comment', id=comment.id) }}" method="POST">
<button type="submit">Delete</button>
</form>
{% endif %}
{% endfor %}
<form action="{{ url_for('add_comment', id=dataset.id) }}" method="POST">
<textarea name="comment"></textarea>
<button type="submit">Add Comment</button>
</form>
<hr>
<a href="{{ dataset.download_link }}">Download</a>
</body>
</html>
```
上述模板中,我们使用模板引擎将数据集的详细信息和代码、评论等展示在网页中。并且提供了添加代码、添加评论、点赞、踩等功能。
最后,创建一个名为"index.html"的模板,用于展示关注度最高或者下载量最大的数据集:
```html
<!DOCTYPE html>
<html>
<head>
<title>Data Management System</title>
</head>
<body>
{% for dataset in datasets %}
<h1>{{ dataset.title }}</h1>
<p>{{ dataset.description }}</p>
<p>Downloads: {{ dataset.downloads }}</p>
<p>Likes: {{ dataset.likes }}</p>
<p>Dislikes: {{ dataset.dislikes }}</p>
<a href="{{ url_for('dataset', id=dataset.id) }}">View Details</a>
<hr>
{% endfor %}
</body>
</html>
```
上述模板中,我们使用模板引擎将关注度最高或者下载量最大的前10个数据集展示在网页中,并提供了查看详细信息的链接。
这就是一个简单的数据管理系统的设计,具有展示数据集详细信息、添加代码和评论、点赞和踩、展示关注度最高或者下载量最大的数据集等功能。
阅读全文