Python 语言 用 Bottle 开发轻量级简历投递平台 单文件部署 + 邮件通知 + 附件上传

Python阿木 发布于 1 天前 2 次阅读


Python Bottle 开发轻量级简历投递平台

在当今竞争激烈的就业市场中,一个简洁、高效的简历投递平台对于求职者和招聘者来说都至关重要。Python 的 Bottle 框架因其轻量级、易于上手的特点,成为开发此类平台的不二选择。本文将围绕使用 Bottle 框架开发一个轻量级简历投递平台,实现单文件部署、邮件通知和附件上传等功能。

系统需求分析

功能需求

1. 用户注册与登录:用户可以注册账号并登录系统。
2. 简历上传:用户可以上传个人简历。
3. 邮件通知:当简历被招聘者查看或录取时,系统自动发送邮件通知。
4. 单文件部署:整个平台可以打包为一个单文件,方便部署。
5. 附件上传:支持简历附件上传,如 PDF、Word 格式。

非功能需求

1. 系统响应时间:确保系统响应迅速,用户体验良好。
2. 系统安全性:保护用户数据安全,防止信息泄露。
3. 系统可扩展性:方便后续功能扩展和维护。

技术选型

1. Python:作为主要编程语言。
2. Bottle:轻量级 Web 框架。
3. Flask-Mail:用于发送邮件。
4. PyMySQL:用于数据库操作。
5. Flask-Uploads:用于文件上传。

系统设计

数据库设计

创建一个数据库,包含以下表:

1. 用户表(users):存储用户信息,如用户名、密码、邮箱等。
2. 简历表(resumes):存储简历信息,如简历标题、上传时间、用户ID等。
3. 邮件通知表(notifications):存储邮件通知信息,如邮件内容、发送时间、用户ID等。

系统架构

1. 用户模块:负责用户注册、登录、信息修改等功能。
2. 简历模块:负责简历上传、查看、删除等功能。
3. 邮件通知模块:负责发送邮件通知。
4. 文件上传模块:负责简历附件上传。

代码实现

用户模块

python
from flask import Flask, request, redirect, url_for, render_template
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
app.config['SECRET_KEY'] = 'your_secret_key'
db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100), unique=True, nullable=False)

@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = generate_password_hash(request.form['password'])
email = request.form['email']
new_user = User(username=username, password=password, email=email)
db.session.add(new_user)
db.session.commit()
return redirect(url_for('login'))
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']
user = User.query.filter_by(username=username).first()
if user and check_password_hash(user.password, password):
return redirect(url_for('home'))
return 'Invalid username or password'
return render_template('login.html')

if __name__ == '__main__':
app.run(debug=True)

简历模块

python
from flask import Flask, request, redirect, url_for, render_template
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
app.config['SECRET_KEY'] = 'your_secret_key'
db = SQLAlchemy(app)

class Resume(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
upload_time = db.Column(db.DateTime, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
file_path = db.Column(db.String(100), nullable=False)

@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
title = request.form['title']
file = request.files['file']
user_id = request.form['user_id']
file_path = file.filename
new_resume = Resume(title=title, upload_time=datetime.now(), user_id=user_id, file_path=file_path)
db.session.add(new_resume)
db.session.commit()
return redirect(url_for('home'))
return render_template('upload.html')

if __name__ == '__main__':
app.run(debug=True)

邮件通知模块

python
from flask import Flask, request, redirect, url_for, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail, Message

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['MAIL_SERVER'] = 'smtp.example.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'your_email@example.com'
app.config['MAIL_PASSWORD'] = 'your_email_password'
db = SQLAlchemy(app)
mail = Mail(app)

class Notification(db.Model):
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.String(200), nullable=False)
send_time = db.Column(db.DateTime, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

@app.route('/send_notification', methods=['POST'])
def send_notification():
content = request.form['content']
user_id = request.form['user_id']
notification = Notification(content=content, send_time=datetime.now(), user_id=user_id)
db.session.add(notification)
db.session.commit()
msg = Message('Notification', recipients=[user.email])
msg.body = content
mail.send(msg)
return 'Notification sent'

if __name__ == '__main__':
app.run(debug=True)

文件上传模块

python
from flask import Flask, request, redirect, url_for, render_template
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
app.config['SECRET_KEY'] = 'your_secret_key'
db = SQLAlchemy(app)

class Resume(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
upload_time = db.Column(db.DateTime, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
file_path = db.Column(db.String(100), nullable=False)

@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
title = request.form['title']
file = request.files['file']
user_id = request.form['user_id']
file_path = file.filename
new_resume = Resume(title=title, upload_time=datetime.now(), user_id=user_id, file_path=file_path)
db.session.add(new_resume)
db.session.commit()
return redirect(url_for('home'))
return render_template('upload.html')

if __name__ == '__main__':
app.run(debug=True)

总结

本文介绍了使用 Python Bottle 框架开发一个轻量级简历投递平台的过程。通过实现用户注册、登录、简历上传、邮件通知和附件上传等功能,为求职者和招聘者提供了一个便捷的简历投递平台。在实际开发过程中,可以根据需求进行功能扩展和优化,以满足更多用户的需求。