【项目实战】基于Python、Django以及MySQL的学生选课系统(附完整源码)
1、项目说明
基于python+Django+Mysql的学生选课系统项目实战
项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)
- 首先需要创建数据库数据库名字叫做 db_course_selection
- 运行sql导入数据或者也可以直接用命令生成(视频有讲解)
- 需要安装一下下面的模块(如果运行提示有模块未安装,安装一下即可,命令同下,改一下模块名即可)
项目需要安装 Django、及其附带的其他一些模块
- Django==3.2.17
- PyMySQL==0.9.3
安装命令如下:
- pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django(替换模块名)
2、项目主要技术
-
python编程技术
-
django框架技术
-
mysql数据库技术
-
前端技术
3、项目结构CourseSelectionSystem:
-
course 课程管理模块
-
CourseSelectionSystem 主模块 (项目的配置文件、主路由)
-
user 用户信息管理模块
-
static 静态文件文件夹(css,js)
-
templates 前端html文件
-
constats.py 项目常量配置文件
-
manage.py 程序的入口
4、项目主要功能
-
用户登录注册
-
课程展示
-
学生选课、评课、评教
-
教师发布课程、给学生打分,评价
5、部分源码
user.views.py
from django.http import HttpResponse
from django.shortcuts import render, reverse, redirect
from django.views.generic import UpdateView
from constants import INVALID_KIND
from user.cbvs import CreateStudentView, CreateTeacherView
from user.forms import StuLoginForm, TeaLoginForm, TeaRegisterForm, StuUpdateForm
from user.models import Student, Teacher
# 主页
def home(request):
return render(request, "user/login_home.html")
# 登录
def login(request, *args, **kwargs):
if not kwargs or kwargs.get("kind", "") not in ["teacher", "student", "manager"]:
return HttpResponse(INVALID_KIND)
kind = kwargs["kind"]
context = {'kind': kind}
if request.method == 'POST':
if kind == "teacher":
form = TeaLoginForm(data=request.POST)
else:
form = StuLoginForm(data=request.POST)
if form.is_valid():
uid = form.cleaned_data["uid"]
if len(uid) != 10:
form.add_error("uid", "账号长度必须为10")
else:
if kind == "teacher":
department_no = uid[:3]
number = uid[3:]
object_set = Teacher.objects.filter(department_no=department_no, number=number)
else:
grade = uid[:4]
number = uid[4:]
object_set = Student.objects.filter(grade=grade, number=number)
if object_set.count() == 0:
form.add_error("uid", "该账号不存在.")
else:
user = object_set[0]
if form.cleaned_data["password"] != user.password:
form.add_error("password", "密码不正确.")
else:
request.session['kind'] = kind
request.session['user'] = uid
request.session['id'] = user.id
return redirect("course", kind=kind)
context['form'] = form
return render(request, 'user/login_detail.html', context)
else:
context['form'] = form
elif request.method == 'GET':
if request.GET.get('uid'):
uid = request.GET.get('uid')
context['uid'] = uid
data = {"uid": uid, 'password': '12345678'}
if kind == "teacher":
form = TeaLoginForm(data)
else:
form = StuLoginForm(data)
else:
if kind == "teacher":
form = TeaLoginForm()
else:
form = StuLoginForm()
context['form'] = form
if request.GET.get('from_url'):
context['from_url'] = request.GET.get('from_url')
return render(request, 'user/login_detail.html', context)
# 退出登录
def logout(request):
for sv in ["kind", "user", "id"]:
if request.session.get(sv):
del request.session[sv]
return redirect("login")
# 用户注册
def register(request, kind):
func = None
if kind == "student":
func = CreateStudentView.as_view()
elif kind == "teacher":
func = CreateTeacherView.as_view()
if func:
context = {
"kind": kind
}
return func(request, context=context)
else:
return HttpResponse(INVALID_KIND)
# 用户更新信息
def update(request, kind):
func = None
if kind == "student":
func = UpdateStudentView.as_view()
elif kind == "teacher":
func = UpdateTeacherView.as_view()
else:
return HttpResponse(INVALID_KIND)
pk = request.session.get("id", "")
if pk:
context = {
"name": request.session.get("name", ""),
"kind": request.session.get("kind", ""),
}
return func(request, pk=pk, context=context)
return redirect("login")
# 更新学生信息视图
class UpdateStudentView(UpdateView):
model = Student
form_class = StuUpdateForm
template_name = "user/update.html"
def get_context_data(self, **kwargs):
context = super(UpdateStudentView, self).get_context_data(**kwargs)
context.update(kwargs)
context["kind"] = "student"
return context
def get_success_url(self):
return reverse("course", kwargs={"kind": "student"})
# 更新教师视图
class UpdateTeacherView(UpdateView):
model = Teacher
form_class = TeaRegisterForm
template_name = "user/update.html"
def get_context_data(self, **kwargs):
context = super(UpdateTeacherView, self).get_context_data(**kwargs)
context.update(kwargs)
context["kind"] = "teacher"
return context
def get_success_url(self):
return reverse("course", kwargs={"kind": "teacher"})
6、运行截图
7、项目总结
本项目是一个非常适合学习练手的项目,对我们的Django框架技术以及开发经验的提升,完善简历提高技能都有有很大的帮助,推荐大家学习研究这个项目,搞懂其中的业务逻辑流程以及各个知识点非常关键。
项目资料截图:
资料获取地址:https://h5.m.taobao.com/awp/core/detail.htm?ft=t&id=703405517912
B站视频讲解地址:https://www.bilibili.com/video/BV1Eg4y1p7yt/
注:其他问题请参看视频讲解,都有介绍,一定要认真看完哦!
代码编写、视频录制不易,感谢您的支持,祝您学习愉快!
避免走丢,记得关注哦🌹🌹🌹
版权声明:本文为博主兵慌码乱原创文章,请勿转载!