共计 6436 个字符,预计需要花费 17 分钟才能阅读完成。
当今互联网行业中,后端开发是一个非常重要而且富有挑战性的领域。对于初学者来说,入门级的后端开发项目实践可以帮助他们更好地了解后端开发的基础知识和技能,并为以后深入学习打下坚实的基础。
本文将介绍一个简单明了的后端开发项目,着重讲解实现过程中所需掌握的技术和知识点,帮助读者快速上手。
1. 项目概述
本项目的目标是构建一个基于 Web 的留言板应用程序。用户可以在应用程序中发布留言、查看留言列表以及删除留言等功能。该应用程序的后端主要由以下几个模块组成:
- 用户认证模块
- 留言管理模块
- 数据库模块
本项目使用 Python 语言进行开发,采用 Flask 框架作为 Web 应用程序的基础框架,并使用 Sqlite 数据库存储数据。
2. 技术栈
在本项目中,我们需要使用以下技术和工具:
- Python 编程语言
- Flask Web 框架
- HTML/CSS/JavaScript 前端开发技术
- Sqlite 数据库
在开始项目之前,需要确保已经安装了以上所有技术和工具。
3. 实现步骤
步骤 1:创建 Flask 应用程序
首先,我们需要创建一个基于 Flask 框架的 Web 应用程序。可以在终端中执行以下命令:
mkdir message_board
cd message_board
pip install flask
touch app.py
接着,在 app.py 文件中编写以下代码,创建一个名为 message_board 的 Flask 应用程序:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run()
执行 flask run 命令,启动 Flask 开发服务器,并在浏览器中输入 http://localhost:5000/,即可看到 “Hello, World!” 的输出。
步骤 2:创建数据库模型
接下来,需要创建一个 Sqlite 数据库,并定义留言板应用程序的数据模型。可以在 app.py 文件中添加以下代码:
import sqlite3
from flask import g
DATABASE = 'message_board.db'
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
db.row_factory = sqlite3.Row
return db
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
def init_db():
with app.app_context():
db = get_db()
with app.open_resource('schema.sql', mode='r') as f:
db.cursor().executescript(f.read())
db.commit()
@app.cli.command('initdb')
def initdb_command():
init_db()
print('Initialized the database.')
以上代码创建了一个名为 message_board.db 的 Sqlite 数据库,并在 app.py 文件所在目录下增加了一个名为 schema.sql 的 SQL 脚本文件,用于定义留言板应用程序的数据模型。
步骤 3:实现用户认证模块
接着,需要实现用户认证模块。具体来说,我们需要编写以下几个路由函数:
- 注册用户(/register)
- 登录用户(/login)
- 退出登录(/logout)
可以在 app.py 文件中添加以下代码,实现用户认证模块:
from flask import Flask, render_template, request, session, redirect, url_for, flash
app = Flask(__name__)
app.secret_key = 'secret key'
...
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
db = get_db()
error = None
if not username:
error = 'Username is required.'
elif not password:
error = 'Password is required.'
elif db.execute(
'SELECT id FROM users WHERE username = ?', (username,)
).fetchone() is not None:
error = f'User {username} is already registered.'
if error is None:
db.execute(
'INSERT INTO users (username, password) VALUES (?, ?)',
(username, generate_password_hash(password))
)
db.commit()
flash('You were successfully registered. Please login.')
return redirect(url_for('login'))
flash(error)
return render_template('register.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
db = get_db()
error = None
user = db.execute(
'SELECT * FROM users WHERE username = ?', (username,)
).fetchone()
if user is None:
error = 'Incorrect username.'
elif not check_password_hash(user['password'], password):
error = 'Incorrect password.'
if error is None:
session.clear()
session['user_id'] = user['id']
flash('You were successfully logged in.')
return redirect(url_for('index'))
flash(error)
return render_template('login.html')
@app.route('/logout')
def logout():
session.clear()
flash('You were successfully logged out.')
return redirect(url_for('index'))
以上代码使用 Flask 的 session 模块,实现了用户注册、登录和退出登录等功能。其中,注册用户时需要验证用户名和密码是否符合要求,并通过生成哈希值的方式将密码加密存储;登录时需要验证用户输入的用户名和密码是否正确,并将用户 ID 存储在 session 中,以便后续判断用户是否已经登录。
步骤 4:实现留言管理模块
接下来,需要实现留言管理模块。具体来说,我们需要编写以下几个路由函数:
- 查看留言列表(/messages)
- 发布新留言(/new_message)
- 删除留言(/delete_message)
可以在 app.py 文件中添加以下代码,实现留言管理模块:
...
@app.route('/messages')
def messages():
db = get_db()
messages = db.execute('SELECT * FROM messages ORDER BY created_at DESC').fetchall()
return render_template('messages.html', messages=messages)
@app.route('/new_message', methods=['GET', 'POST'])
def new_message():
if 'user_id' not in session:
flash('Please login first.')
return redirect(url_for('login'))
if request.method == 'POST':
content = request.form['content']
error = None
if not content:
error = 'Content is required.'
if error is None:
db = get_db()
db.execute('INSERT INTO messages (content, user_id) VALUES (?, ?)',
(content, session['user_id'])
)
db.commit()
flash('Your message was successfully posted.')
return redirect(url_for('messages'))
flash(error)
return render_template('new_message.html')
@app.route('/delete_message/', methods=['POST'])
def delete_message(message_id):
if 'user_id' not in session:
flash('Please login first.')
return redirect(url_for('login'))
db = get_db()
message = db.execute('SELECT * FROM messages WHERE id = ? AND user_id = ?', (message_id, session['user_id'])
).fetchone()
if message is None:
flash('You are not authorized to delete this message.')
else:
db.execute('DELETE FROM messages WHERE id = ?', (message_id,))
db.commit()
flash('The message was successfully deleted.')
return redirect(url_for('messages'))
以上代码使用 Sqlite 数据库存储留言数据,并通过 Flask 路由函数实现了查看留言列表、发布新留言和删除留言等功能。其中,发布新留言时需要验证用户是否已经登录;删除留言时需要验证当前用户是否有权限删除该留言。
步骤 5:完善前端界面
最后,我们需要完善前端界面,使之更加美观和易用。可以在 templates 目录下创建以下 HTML 模板文件:
- base.html:定义网页的基本布局和样式。
- index.html:展示网站首页的内容。
- register.html:展示用户注册页面的内容。
- login.html:展示用户登录页面的内容。
- messages.html:展示留言列表页面的内容。
- new_message.html:展示发布新留言页面的内容。
可以参考以下代码,编写 HTML 模板文件:
Message Board
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
- {{message}}
{% endfor %}
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
{% extends "base.html" %}
{% block content %}
Welcome to Message Board!
{% endblock %}
{% extends "base.html" %}
{% block content %}
Register
{% endblock %}
{% extends "base.html" %}
{% block content %}
Login
{% endblock %}
{% extends "base.html" %}
{% block content %}
Messages
{% for message in messages %}
{{message['content'] }}
Posted by {{message['username'] }} on {{message['created_at'] }}
{% if session.user_id == message['user_id'] %}
{% endif %}
{% else %}
No messages yet. Be the first to post!
{% endfor %}
{% endblock %}
{% extends "base.html" %}
{% block content %}
New Message
{% endblock %}
以上 HTML 模板文件使用了 Flask 的模板引擎,实现了网站的基本布局和样式,并将动态数据(如留言列表、错误提示等)插入到指定位置。
4. 总结
本文介绍了一个简单明了的后端开发项目,帮助读者掌握了从创建 Flask 应用程序、实现用户认证和留言管理功能到完善前端界面的全流程。通过实践,读者不仅掌握了 Python Flask 框架的基本知识和使用方法,还学会了如何使用 Sqlite 数据库存储数据、使用 session 管理用户登录状态、使用 Flask 模板引擎渲染动态页面等技术。
当然,这只是一个简单的项目示例,实际开发中可能需要更多的功能和复杂的业务逻辑。但掌握了本文介绍的基础知识和技能,读者就可以进一步学习和探索,开发出更加强大、稳定和可扩展的 Web 应用程序。
原文地址: 后端开发项目:入门级实践