张三:最近我听说学校要搞“数字校园”项目,你觉得这跟“在线”有什么关系呢?
李四:嗯,其实“数字校园”就是把传统校园搬到线上,让教学、管理、服务都通过网络进行。比如在线课程、远程考试、电子图书馆,这些都是“在线”功能的一部分。
张三:那这个“数字校园”具体怎么实现呢?有没有什么技术可以参考?
李四:当然有。我们可以用Web开发技术来搭建一个平台,比如用Python的Django或者Flask框架来做后端,前端可以用HTML、CSS和JavaScript,再加上一些框架如React或Vue.js。
张三:听起来不错。那能不能给我看个例子?比如一个简单的在线课程页面?
李四:好啊,我给你写一段代码,展示一下如何用Flask创建一个在线课程页面。
张三:太好了!那我先看看这段代码。
# app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/courses')
def courses():
course_list = [
{'name': '计算机基础', 'teacher': '王老师'},
{'name': '数据结构', 'teacher': '李老师'},
{'name': '人工智能', 'teacher': '张教授'}
]
return render_template('courses.html', courses=course_list)
if __name__ == '__main__':
app.run(debug=True)
李四:这是后端代码,使用Flask框架,定义了两个路由:首页和课程列表页。在课程列表页中,我们从一个列表中获取课程信息并传递给模板。
张三:那前端模板呢?能给我看一下吗?
李四:当然可以,这里是一个简单的HTML模板,放在templates目录下。
欢迎来到数字校园
李四:这就是首页的页面,点击“查看课程”会跳转到课程列表页。
张三:好的,那课程列表页的模板是怎样的?
李四:下面是你需要的代码。

课程列表
{% for course in courses %}
{{ course.name }} - {{ course.teacher }}
{% endfor %}
张三:明白了,这样就可以动态显示课程信息了。那如果我要添加一个课程,应该怎么操作呢?
李四:你可以通过表单提交新课程的信息,然后保存到数据库里。我们可以用SQLite来演示。
张三:数据库怎么做呢?
李四:首先,我们需要在Flask应用中配置数据库,然后创建一个模型。
# models.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Course(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
teacher = db.Column(db.String(100), nullable=False)
李四:这是定义了一个Course模型,包含id、name和teacher三个字段。
张三:那怎么添加数据呢?
李四:可以通过命令行或者编写一个脚本来插入数据。
# add_course.py
from app import app, db
from models import Course
with app.app_context():
db.create_all()
new_course = Course(name='机器学习', teacher='陈博士')
db.session.add(new_course)
db.session.commit()
张三:这样就添加了一门新课程。那如何在前端显示它呢?
李四:只需要修改课程列表的视图函数,从数据库中查询所有课程即可。
# app.py(更新后的版本)
from flask import Flask, render_template
from models import Course, db
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///courses.db'
db.init_app(app)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/courses')
def courses():
course_list = Course.query.all()
return render_template('courses.html', courses=course_list)
if __name__ == '__main__':
app.run(debug=True)
张三:这样的话,每次运行程序时都会自动创建数据库并插入数据。那是不是还需要初始化数据库?
李四:对,我们可以使用Flask的命令行工具来执行初始化操作。
张三:那怎么操作呢?
李四:你可以在终端中输入以下命令:
flask db init
flask db migrate
flask db upgrade
张三:这些命令的作用是什么?
李四:`flask db init` 初始化数据库迁移环境;`migrate` 生成迁移脚本;`upgrade` 应用迁移,创建数据库表。
张三:明白了。那如果我想做一个更复杂的系统,比如学生登录、作业提交等功能呢?
李四:那就需要引入用户认证模块。我们可以用Flask-Login来实现。
张三:那能给我一个简单的例子吗?
李四:好的,下面是用户登录的基本实现。
# models.py(扩展)
from flask_login import UserMixin
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True)
password = db.Column(db.String(100))
李四:这是User模型,继承自UserMixin,用于支持Flask-Login。
# app.py(扩展)
from flask_login import LoginManager, login_user, logout_user, login_required
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
@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 user.password == password:
login_user(user)
return redirect(url_for('courses'))
else:
return '登录失败'
return render_template('login.html')
@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('index'))
张三:这样就能实现用户登录和权限控制了。那作业提交功能怎么实现呢?
李四:我们可以再创建一个作业模型,记录学生提交的内容和时间。
# models.py(扩展)
class Assignment(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
content = db.Column(db.Text)
student_id = db.Column(db.Integer, db.ForeignKey('user.id'))
student = db.relationship('User', backref=db.backref('assignments', lazy=True))
张三:那前端页面该怎么设计?
李四:我们可以为每个学生创建一个作业提交页面,允许他们上传文件或填写文本。
提交作业
李四:这个表单提交后,我们可以将数据保存到Assignment模型中。
# app.py(扩展)
@app.route('/submit', methods=['GET', 'POST'])
@login_required
def submit():
if request.method == 'POST':
title = request.form['title']
content = request.form['content']
assignment = Assignment(title=title, content=content, student_id=current_user.id)
db.session.add(assignment)
db.session.commit()
return '作业提交成功'
return render_template('submit_assignment.html')
张三:这样就完成了基本的作业提交功能。看来“数字校园”不仅仅是网页,还涉及很多后台逻辑和数据库操作。
李四:没错,数字校园的核心就是通过技术手段提升教学效率和管理水平,而在线功能则是其重要组成部分。
张三:那未来会不会有更多的AI技术应用到数字校园中?
李四:肯定会。比如智能推荐课程、自动化批改作业、语音识别等,都是当前研究的热点。
张三:听起来很有前景。那我现在是不是可以开始尝试自己搭建一个简单的数字校园系统了?
李四:当然可以!从基础的Web开发入手,逐步增加功能,你会发现这个过程既有趣又有挑战性。
张三:谢谢你的讲解,我学到了很多!
李四:不客气,祝你早日打造出自己的数字校园系统!
