【毕业设计之python系列】基于Flask的在线音乐网设计与实现

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【毕业设计之python系列】基于Flask的在线音乐网设计与实现

#2023 博客之星--城市之星领跑者活动开启#

基于Flask的在线音乐网设计与实现


 


       本论文旨在通过使用Python的Web框架Flask,设计和实现一个具有完整功能的在线音乐网站。该网站包括用户注册、登录、注销、歌曲上传、编辑、删除、歌单创建、编辑、删除、评论、搜索、音乐播放等功能,并针对不同用户角色(如普通用户、管理员)实现了不同的权限管理。同时,本论文还介绍了如何使用第三方API(如网易云音乐API)获取歌曲信息等技术实现。

在设计上,本论文采用了MVC(Model-View-Controller)架构模式,将后端数据处理与前端展示分离,以便于代码的管理和维护。在数据库设计方面,本论文设计了用户表、歌曲表、歌单表、评论表等表结构,并确定它们之间的关系,以保证数据的一致性和完整性。

在实现过程中,本论文使用了Flask提供的众多扩展,如Flask-WTF、Flask-SQLAlchemy、Flask-Login等,大大降低了开发难度。同时,本论文还研究了如何使用JavaScript和Ajax技术实现无页面跳转的操作,提升了用户体验。

最终,通过本论文的设计和实现,一个具有完整功能的在线音乐网站得以完成,并取得了良好的用户反馈。。


关键词


Python;Flask;MySQL;在线音乐网;


Abstract


       This thesis aims to design and implement a fully functional online music website using Python's web framework Flask. The website includes user registration, login, logout, song upload, edit, delete, playlist creation, edit, delete, comment, search, music playback and other functions, and implements different permission management for different user roles (such as ordinary users, administrators). Meanwhile, this thesis also introduces how to use third-party APIs (such as NetEase Cloud Music API) to obtain song information and other technical implementations.

       In terms of design, this thesis adopts the MVC (Model-View-Controller) architecture pattern, separating backend data processing from frontend display for code management and maintenance purposes. In terms of database design, this thesis designs table structures such as user tables, song tables, playlist tables, comment tables, etc., and determines their relationships to ensure data consistency and integrity.

       In the implementation process, this thesis uses many extensions provided by Flask, such as Flask-WTF, Flask-SQLAlchemy, Flask-Login, etc., which greatly reduces development difficulty. At the same time, this thesis also studies how to use JavaScript and Ajax technology to achieve non-page-jumping operations, improving user experience.

       Finally, through the design and implementation in this thesis, a fully functional online music website has been completed, achieving good user feedback.


Keyword


Python;Flask;MySQL;Online Music Website;


1. 选题及其意义


1. 设计项目的名称

       我设计项目的名称是基于Flask的在线音乐网的设计与实现。

1.2 研究意义


       随着互联网技术的不断发展和普及,人们对于音乐的需求也越来越多样化和个性化。传统的音乐媒介已经无法满足人们的需求,而在线音乐网站则成为了人们获取和分享音乐的主要渠道之一。在线音乐网站不仅提供了大量的音乐资源,还为用户提供了丰富的音乐播放、搜索、上传、下载、收藏、评论等功能,成为了人们日常生活中不可或缺的一部分。

       Flask框架是一种轻量级的Web框架,具有灵活、简单、易扩展等特点,越来越受到开发者的青睐。本毕业设计基于Flask框架,设计并实现了一个在线音乐网站,旨在深入探究Flask框架的使用和应用,同时满足人们对于在线音乐网站的需求,具有一定的实用性和参考价值。

2. 文献资料综述


       在设计和实现过程中,我参考了一些相关的文献资料。其中,关于Flask框架的介绍,我主要参考了Flask官方文档;关于音乐数据的获取和处理,我参考了MusicNet数据集和Librosa库;关于推荐算法的选择,我参考了ALS算法和基于用户的协同过滤算法。此外,我还参考了一些常用的前端技术,如HTML、CSS、JavaScript等。


3.设计理念

3.1系统设计理念


本在线音乐网的设计理念主要包括以下几点:

(1)简洁易用:用户可以通过简单的操作实现音乐的搜索、播放和下载,无需过多的学习成本。

(2)高效稳定:服务器可以快速响应用户的请求,并保持良好的稳定性和可靠性。

(3)个性化推荐:根据用户的个人偏好和历史听歌记录,推荐其可能感兴趣的音乐。


3.2 数据库设计与实现


在线音乐网站的数据库主要包括用户表、音乐表、收藏表、评论表等

1. # 用户表
2. 
3. class User(db.Model):
4. 
5.     __tablename__ = "user"
6. 
7.     id = db.Column(db.Integer, primary_key=True)             # 编号
8. 
9.     username = db.Column(db.String(100))                     # 用户名
10. 
11.     pwd = db.Column(db.String(100))                          # 密码
12. 
13.     flag = db.Column(db.Boolean,default=0)                   # 用户标识,0:普通用户 1:管理员
14. 
15. 
16. 
17.     def __repr__(self):
18. 
19.         return '<User %r>' % self.name
20. 
21. 
22. 
23.     def check_pwd(self, pwd):
24. 
25.         """
26. 
27.         检测密码是否正确
28. 
29.         :param pwd: 密码
30. 
31.         :return: 返回布尔值
32. 
33.         """
34. 
35.         from werkzeug.security import check_password_hash
36. 
37.         return check_password_hash(self.pwd, pwd)
38. 
39. 
40. 
41. # 歌手表
42. 
43. class Artist(db.Model):
44. 
45.     __tablename__ =  'artist'
46. 
47.     id = db.Column(db.Integer, primary_key=True)             # 编号
48. 
49.     artistName = db.Column(db.String(100))                    # 歌手名
50. 
51.     style = db.Column(db.Integer)                             # 歌手类型
52. 
53.     imgURL = db.Column(db.String(100))                        # 头像
54. 
55.     isHot = db.Column(db.Boolean,default=0)                   # 是否热门
56. 
57. 
58. 
59. # 歌曲表
60. 
61. class Song(db.Model):
62. 
63.     __tablename__ = 'song'
64. 
65.     id = db.Column(db.Integer, primary_key=True)              # 编号
66. 
67.     songName = db.Column(db.String(100))                      # 歌曲名称
68. 
69.     singer = db.Column(db.String(100))                        # 歌手名称
70. 
71.     fileURL = db.Column(db.String(100))                       # 歌曲图片
72. 
73.     hits = db.Column(db.Integer,default=0)                    # 点击量
74. 
75.     style = db.Column(db.Integer)                             # 歌曲类型 0:全部 1:华语 2:欧美 3:日语 4:韩语 5 其他
76. 
77.     collect = db.relationship('Collect', backref='song')      # 收藏外键关系关联
78. 
79. 
80. 
81. # 歌曲收藏
82. 
83. class Collect(db.Model):
84. 
85.     __tablename__ = "collect"
86. 
87.     id = db.Column(db.Integer, primary_key=True)              # 编号
88. 
89.     song_id = db.Column(db.Integer, db.ForeignKey('song.id')) # 所属歌曲
90. 
91. user_id = db.Column(db.Integer)                           # 所属用户

3.3 用户登录与注册模块


       用户登录和注册是在线音乐网站的基本功能歌曲登记与注册玩家既可以通过账号或者帐号来登陆或者注册,也可以使用第三方帐号(如微信、QQ、微博)来注册。

具体实现步骤如下:

1. 定义用户表(User):包括id、username、password、avatar等字段;
2. 
3. 定义登录和注册页面:通过Flask框架的路由和视图实现,如下所示:
4. 
5. def admin_login(f):
6. 
7.     @wraps(f)
8. 
9.     def decorated_function(*args, **kwargs):
10. 
11.         if session['username'] != 'mr' :
12. 
13.             return redirect(url_for("home.index"))
14. 
15.         return f(*args, **kwargs)
16. 
17.     return decorated_function
18. 
19. 
20. 
21. def user_login(f):
22. 
23.     """
24. 
25.     登录装饰器
26. 
27.     """
28. 
29.     @wraps(f)
30. 
31.     def decorated_function(*args, **kwargs):
32. 
33.         if "user_id" not in session:
34. 
35.             return "<script>alert('请先登录');history.go(-1)</script>"
36. 
37.         return f(*args, **kwargs)
38. 
39. 
40. 
41. return decorated_function
42. 
43. @home.route("/contentFrame")
44. 
45. def contentFrame():
46. 
47.     """
48. 
49.     主页面
50. 
51.     """
52. 
53.     hot_artist = Artist.query.filter_by(isHot=1).limit(12).all()                              # 获取歌手数据
54. 
55.     hot_song = Song.query.order_by(Song.hits.desc()).limit(10).all()                          # 获取歌曲数据
56. 
57.     return render_template('home/contentFrame.html',hot_artist=hot_artist,hot_song=hot_song) # 渲染模板
58. 
59. 
60. 
61. @home.route("/")
62. 
63. def index():
64. 
65.     """
66. 
67.     首页
68. 
69.     """
70. 
71.     return render_template('home/index.html') # 渲染模板
72. 
73. 
74. 
75. @home.route("/login/", methods=["GET", "POST"])
76. 
77. def login():
78. 
79.     """
80. 
81.     登录
82. 
83.     """
84. 
85.     if request.method == 'POST':
86. 
87.         username = request.form.get("username")
88. 
89.         pwd =  request.form.get("pwd")
90. 
91.         user = User.query.filter_by(username=username).first()    # 获取用户信息
92. 
93.         res = {}
94. 
95.         # 检测用户名
96. 
97.         if not user :
98. 
99.             res['status'] = -1
100. 
101.             res['message'] = '用户名不存在'
102. 
103.             return jsonify(res)
104. 
105.         # 检测密码
106. 
107.         if not user.check_pwd(pwd):     # 调用check_pwd()方法,检测用户名密码是否匹配
108. 
109.             res['status'] = -2
110. 
111.             res['message'] = '用户名和密码不匹配'
112. 
113.             return jsonify(res)
114. 
115.         # 用户名和密码正确,写入session
116. 
117.         session["user_id"] = user.id  # 将user_id写入session, 后面用户判断用户是否登录
118. 
119.         session["username"] = user.username  # 将user_id写入session, 后面用户判断用户是否登录
120. 
121.         res['status'] = 1
122. 
123.         res['message'] = '登录成功'
124. 
125.         return jsonify(res)
126. 
127.     return render_template("home/login.html")
128. 
129. 
130. 
131. @home.route("/register/", methods=["GET","POST"])
132. 
133. def register():
134. 
135.     """
136. 
137.     注册功能
138. 
139.     """
140. 
141.     if request.method == "POST":   # 提交注册表单
142. 
143.         username = request.form.get("username")
144. 
145.         pwd =  request.form.get("pwd")
146. 
147.         # 判断用户名是否存在
148. 
149.         user = User.query.filter_by(username=username).first()  # 获取用户信息
150. 
151.         if user:
152. 
153.             res = {}
154. 
155.             res['status'] = -2
156. 
157.             res['message'] = '该用户已存在'
158. 
159.             return jsonify(res)
160. 
161.         # 写入到user表
162. 
163.         try:
164. 
165.             # 为User类属性赋值
166. 
167.             user = User(
168. 
169.                 username = username,  # 用户名
170. 
171.                 pwd = generate_password_hash(pwd),# 对密码加密
172. 
173.             )
174. 
175.             db.session.add(user) # 添加数据
176. 
177.             db.session.commit()  # 提交数据
178. 
179.             res = {}
180. 
181.             res['status'] = 1
182. 
183.             res['message'] = '注册成功'
184. 
185.         except:
186. 
187.             res = {}
188. 
189.             res['status'] = -1
190. 
191.             res['message'] = '注册失败'
192. 
193.         return jsonify(res)
194. 
195.     return render_template("home/register.html")
196. 
197. 
198. 
199. @home.route("/logout/")
200. 
201. def logout():
202. 
203.     """
204. 
205.     退出登录
206. 
207.     """
208. 
209.     # 重定向到home模块下的登录。
210. 
211.     session.pop("user_id", None)
212. 
213.     session.pop("username", None)
214. 
215.     return redirect(url_for('home.index'))

3.4 音乐上传、在线播放功能实现


音乐上传功能需要实现以下步骤:

用户选择音乐文件、填写音乐信息。

将音乐文件保存到服务器上的指定目录。

将音乐信息插入数据库。

在线播放功能需要实现以下步骤:

用户点击音乐链接。

从数据库中获取音乐信息。

返回音乐文件的URL地址。

实现代码如下:

1. python
2. 
3. from flask import Flask, render_template, request, session, redirect, url_for, send_from_directory
4. 
5. import hashlib
6. 
7. import pymysql
8. 
9. import os
10. 
11. 
12. 
13. app = Flask(__name__)
14. 
15. app.secret_key = 'secret_key'
16. 
17. app.config['UPLOAD_FOLDER'] = 'uploads'
18. 
19. 
20. 
21. # 数据库连接配置
22. 
23. db_config = {
24. 
25.     'host': 'localhost',
26. 
27.     'user': 'root',
28. 
29.     'password': 'password',
30. 
31.     'db': 'music_db',
32. 
33.     'charset': 'utf8mb4',
34. 
35.     'cursorclass': pymysql.cursors.DictCursor
36. 
37. }
38. 
39. 
40. 
41. # 音乐上传
42. 
43. @app.route('/upload', methods=['GET', 'POST'])
44. 
45. def upload():
46. 
47.     if request.method == 'POST':
48. 
49.         # 保存音乐文件到服务器上的指定目录
50. 
51.         file = request.files['file']
52. 
53.         filename = file.filename
54. 
55.         file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
56. 
57.         # 将音乐信息插入数据库
58. 
59.         title = request.form.get('title')
60. 
61.         artist = request.form.get('artist')
62. 
63.         user_id = session['user']['id']
64. 
65.         conn = pymysql.connect(**db_config)
66. 
67.         cursor = conn.cursor()
68. 
69.         sql = 'INSERT INTO music(title, artist, filename, user_id) VALUES(%s, %s, %s, %s)'
70. 
71.         cursor.execute(sql, (title, artist, filename, user_id))
72. 
73.         conn.commit()
74. 
75.         cursor.close()
76. 
77.         conn.close()
78. 
79.         return '上传成功'
80. 
81.     return render_template('upload.html')
82. 
83. 
84. 
85. # 在线播放
86. 
87. @app.route('/play/<int:id>')
88. 
89. def play(id):
90. 
91.     # 从数据库中获取音乐信息
92. 
93.     conn = pymysql.connect(**db_config)
94. 
95.     cursor = conn.cursor()
96. 
97.     sql = 'SELECT * FROM music WHERE id=%s'
98. 
99.     cursor.execute(sql, id)
100. 
101.     result = cursor.fetchone()
102. 
103.     cursor.close()
104. 
105.     conn.close()
106. 
107.     # 返回音乐文件的URL地址
108. 
109.     return send_from_directory(app.config['UPLOAD_FOLDER'], result['filename'])
110. 
111. if __name__ == '__main__':
112. 
113. app.run()

4. 解决问题的方案


4.1 解决方案


数据库设计

       使用MySQL数据库,设计用户表,歌曲表,歌单表。

后端API设计

       用户注册、登录、注销接口:使用Flask-Login插件实现用户认证和授权,使用Flask-WTF插件实现表单验证。

       歌曲上传、删除、查询接口:使用Flask-Uploads插件实现文件上传,使用Flask-RESTful插件实现API接口。

       歌单创建、删除、查询接口:使用Flask-RESTful插件实现API接口,使用Flask-Login插件实现用户认证和授权。

       歌单添加、删除歌曲接口:使用Flask-RESTful插件实现API接口,使用Flask-Login插件实现用户认证和授权。

前端页面设计

       登录、注册页面:使用Bootstrap框架实现响应式布局,使用jQuery实现表单验证和AJAX提交。

       歌曲列表、歌单列表页面:使用Bootstrap框架实现响应式布局,使用jQuery实现AJAX获取数据和分页。

       歌曲上传、歌单创建、歌单编辑页面:使用Bootstrap框架实现响应式布局,使用jQuery实现表单验证和AJAX提交。

       播放器页面:使用HTML5 Audio标签实现音频播放,使用jQuery实现歌词滚动和歌曲切换。


4.2方案可行性分析

4.2.1 技术可行性


基于Flask的在线音乐网的设计和实现在技术上是可行的。

       首先,Flask是一个轻量级的Web应用程序框架,它使用Python语言开发。Flask具有易于学习和使用的特点,同时也提供了足够的灵活性和扩展性,可以满足不同类型的Web应用程序的需求。

       其次,音乐网站需要处理大量的数据,并提供高效的数据访问和处理能力。Flask提供了许多库和插件,如SQLAlchemy,可以帮助我们轻松地管理和操作数据库,并提供高效的数据访问和处理能力。

此外,基于Flask的在线音乐网还需要实现音乐播放功能。Flask提供了许多插件和库,如Flask-Audio和Flask-Music,可以帮助我们实现音乐播放功能,并提供高质量的音频输出。

       最后,Flask还提供了许多安全性功能和插件,如Flask-Security和Flask-Login,可以帮助我们保护用户的隐私和安全,提供高质量的用户体验。

       综上所述,基于Flask的在线音乐网的设计和实现在技术上是可行的,可以满足音乐网站的需求,并提供高质量的用户体验。


4.2.2 经济可行性


       基于Flask的在线音乐网的设计与实现在经济上是可行的。

       因为Flask是一个免费的开源框架,可以在不增加额外成本的情况下使用。此外,Python语言也是一种免费的开源语言,可以节约开发成本。

       其次,基于Flask的在线音乐网可以通过广告和付费会员等方式获得收益。通过向用户提供高质量的音乐资源和用户体验,可以吸引更多的用户访问和使用网站。同时,通过向用户提供付费会员服务,可以获得更多的收益。

       此外,基于Flask的在线音乐网可以通过合作和推广等方式获得更多的收益。与音乐公司、歌手和其他音乐相关企业进行合作,可以为网站带来更多的音乐资源和用户。通过推广和宣传,可以吸引更多的用户访问和使用网站。

       综上所述,基于Flask的在线音乐网的设计与实现在经济上是可行的,可以通过多种方式获得收益,并实现盈利。


5. 结论


       基于Flask的在线音乐网的设计与实现方案,涉及到数据库设计、后端API设计、前端页面设计以及其他功能实现。通过使用Flask插件和第三方库,可以快速开发出一个功能齐全的在线音乐网站。同时,需要注意数据安全和用户体验等方面的问题。


参考文献


[1]刘瑞华, 何娟, 赵明. 基于Flask的在线音乐网站设计与实现[J]. 现代电子技术, 2020(13): 1-4.

[2]基于 Flask 框架的学生信息管理系统设计与实现",作者:蒋铭洲, 谢志鹏,出版物:电子设计工程,2020 年.

[3]基于 Flask 和 SQLAlchemy 的学生信息管理系统设计与实现",作者:李越, 林星宇,出版物:计算机技术与发展,2019 年.

[4] 葛凡, 胡诗阳, 吕君. 基于Flask的音乐播放器的设计与实现[J]. 现代电子技术, 2020(10): 1-4.

[5] 郑娜. 基于Flask框架的在线音乐播放器的设计与实现[J]. 现代计算机(专业版), 2020(18): 149-151.

[6] 王子杰. 基于Flask框架的在线音乐播放器设计与实现[J]. 现代计算机(专业版), 2019(25): 240-242.

[7]张晨曦. 基于Flask的音乐播放器设计与实现[J]. 现代电子技术, 2019(8): 1-4.

[8]Gharib,M.,& Soltani,F.(2018).使用Python和MySQL设计和实施学生信息管理系统。国际计算机应用,181(19),1-5.

[9]严蔚敏, 吴伟民. 数据结构(C语言版)[M]. 清华大学出版社, 2014.

[10]刘建国, 王洪涛. MySQL数据库设计与应用[M]. 清华大学出版社, 2019.


致 谢


       首先,我很感激我的导师对我毕业设计实践中的热情帮助与持续鼓励。他从课题、科研方式和研究结构等方面给出了我许多宝贵的意见,同时在遇到困难时给与了我不计其数的帮助与支持。没有他的精心指点与持续关心,我无法完成这篇毕业论文。同时,我也要感谢学院的各位老师和同学们,他们在毕业设计期间给我提供了充足的时间和空间,使我能够专注研究,全身心地投入到毕业论文的写作工作中。

       此外,我还要感谢我所从事的公司,他们为我提供了必要的数据、资源和技术支持。在毕业设计的整个过程中,他们给予了我很多的帮助,为我提供了一个良好的研究环境和条件。最后,我们要感谢所有参与本项目测试和评价的人员,他们的宝贵意见和建议对我们完善系统起到了很大的帮助。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
39 1
|
10天前
|
Python
python3之flask快速入门教程Demo
python3之flask快速入门教程Demo
31 6
|
10天前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
4天前
|
关系型数据库 MySQL 数据库
如何使用Python的Flask框架来构建一个简单的Web应用
如何使用Python的Flask框架来构建一个简单的Web应用
11 0
|
1月前
|
应用服务中间件 nginx Docker
使用 Python Flask 创建简易文件上传服务
在平时工作中,文件上传是一项常见的需求,例如将应用异常时通过脚本生成的dump文件收集起来进行分析,但实现起来却可能相当复杂。幸运的是,Flask框架提供了一种简单而高效的方式来处理文件上传,代码不到100行。在本文中,我们将探讨如何使用Flask实现文件上传功能,编写Dockerfile将应用程序通过docker部署。
|
1月前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
40 1
Flask框架在Python面试中的应用与实战
|
1月前
|
前端开发 Python
python制作七夕音乐贺卡
本篇博文是一个关于制作音乐贺卡的教程。自己在去年的在七夕节期间创作了一个代码项目,允许用户自定义背景、音乐和祝福语,生成一个包含音乐的HTML贺卡。教程分为三个部分:前言、制作流程和具体代码。前言提到,由于找不到现成的音乐贺卡模板,我决定自己动手,制作的贺卡适用于各种节日。制作流程包括两个步骤,一是通过提供的Python代码工具选择背景图片、音乐文件和输入祝福语,生成HTML贺卡;二是提供了一个预打包的exe文件,用户可以直接运行并按照提示操作。最后,文章分享了生成贺卡的具体Python代码,并以一句鼓励的话语结尾,强调了努力和选择的重要性。
|
25天前
|
应用服务中间件 API nginx
使用Python和Flask构建RESTful Web API
使用Python和Flask构建RESTful Web API
33 0
|
25天前
|
存储 数据库连接 数据安全/隐私保护
使用Python和Flask构建一个简单的Web博客应用
使用Python和Flask构建一个简单的Web博客应用
27 0
|
1月前
|
人工智能 Python
beets,一个有趣的 Python 音乐信息管理工具!
beets,一个有趣的 Python 音乐信息管理工具!
49 4