【项目实战】基于Python、Django以及MySQL的学生选课系统(附完整源码)

1、项目说明

基于python+Django+Mysql的学生选课系统项目实战

项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)

  • 首先需要创建数据库数据库名字叫做 db_course_selection
  • 运行sql导入数据或者也可以直接用命令生成(视频有讲解)
  • 需要安装一下下面的模块(如果运行提示有模块未安装,安装一下即可,命令同下,改一下模块名即可)

项目需要安装 Django、及其附带的其他一些模块

  • Django==3.2.17
  • PyMySQL==0.9.3

安装命令如下:

 

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/
 
注:其他问题请参看视频讲解,都有介绍,一定要认真看完哦!
代码编写、视频录制不易,感谢您的支持,祝您学习愉快!
 

避免走丢,记得关注哦🌹🌹🌹

posted @ 2023-03-12 21:42  兵慌码乱  阅读(915)  评论(0编辑  收藏  举报