小明:嘿,小华,最近我在做一个项目,是关于就业实习管理系统的。我打算用Python和Flask来构建它,想听听你的意见。
小华:哦,这听起来很有趣!你已经有了一些具体的想法了吗?比如这个系统要实现哪些功能?
小明:当然,这个系统主要包含用户注册、登录、发布实习信息、申请实习、管理员审核等功能。而且,我们还希望加入一些专门针对广西地区的定制化功能,比如提供广西本地的实习机会。
小华:那听起来挺不错的。我们可以先从基础的用户认证开始,然后逐步添加更多的功能。你觉得呢?
小明:好的,那就这么办吧。首先,我们需要安装Flask和相关的库,比如Flask-Login用于用户认证。
# 安装Flask和相关库 pip install Flask Flask-Login Flask-SQLAlchemy ]]>
小明:接下来,让我们创建数据库模型,包括User、Internship和Application。
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) class Internship(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(120), nullable=False) description = db.Column(db.Text, nullable=False) location = db.Column(db.String(120), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) user = db.relationship('User', backref=db.backref('internships', lazy=True)) class Application(db.Model): id = db.Column(db.Integer, primary_key=True) internship_id = db.Column(db.Integer, db.ForeignKey('internship.id'), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) status = db.Column(db.String(120), nullable=False) internship = db.relationship('Internship', backref=db.backref('applications', lazy=True)) user = db.relationship('User', backref=db.backref('applications', lazy=True)) ]]>
小华:接下来是创建基本的路由和视图函数,比如注册、登录和查看实习信息。
from flask import Flask, render_template, request, redirect, url_for, flash from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' app.config['SECRET_KEY'] = 'your_secret_key' login_manager = LoginManager(app) login_manager.login_view = 'login' @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) @app.route("/register", methods=['GET', 'POST']) def register(): if request.method == 'POST': hashed_password = generate_password_hash(request.form['password'], method='sha256') user = User(username=request.form['username'], email=request.form['email'], password=hashed_password) db.session.add(user) db.session.commit() flash('Your account has been created! You are now able to log in', 'success') return redirect(url_for('login')) return render_template('register.html') @app.route("/login", methods=['GET', 'POST']) def login(): if request.method == 'POST': user = User.query.filter_by(email=request.form['email']).first() if user and check_password_hash(user.password, request.form['password']): login_user(user, remember=True) return redirect(url_for('home')) else: flash('Login Unsuccessful. Please check email and password', 'danger') return render_template('login.html') @app.route("/logout") @login_required def logout(): logout_user() return redirect(url_for('home')) @app.route("/") def home(): internships = Internship.query.all() return render_template('home.html', internships=internships) ]]>
小明:最后,我们还可以添加一些定制化功能,比如筛选广西地区的实习机会。
@app.route("/internships/guangxi") def guangxi_internships(): internships = Internship.query.filter_by(location="广西").all() return render_template('guangxi_internships.html', internships=internships) ]]>
小华:这样就完成了基本的就业实习管理系统,你可以继续扩展其他功能,比如增加管理员审核等。