Django 小实例S1 简易学生选课管理系统 —— 五、实现注册功能

Django 小实例S1 简易学生选课管理系统 —— 〇、初步介绍与演示 python Django实现的一个简易的教务选课系统。 介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty。 项目已上传到我的github: https://github.com/BigShuang/SimpleStudentCourseManagementSystem。 S1总目录: 〇、初步介绍与演示 一、项目流程梳理与数据库设计 ======================= 大爽歌作,made by big shuang. 阅读详情

作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师。

python Django实现的一个简易的教务选课系统。
介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty。
项目已上传到我的github: https://github.com/BigShuang/SimpleStudentCourseManagementSystem。

S1总目录:

〇、初步介绍与演示
一、项目流程梳理与数据库设计
二、新建项目(project)、设置、运行
三、创建用户模型(model)
四、实现登录页面
五、实现注册功能

======================= 大爽歌作,made by big shuang =======================

五、实现注册功能

本文涉及到的新的额外知识点:Class-based views
没有这部分基础的读者,建议一边阅读本文一边查阅相关知识
这里推荐我的专栏:Django自学笔记 相关章节内容

1 添加注册页面模板(template)

在templates/user下新建register.html如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        Register
    </title>
</head>
<body>
    <div class="register-container">
        <div class="register-title">注册</div>
        <form method="post" class="form">
            {% csrf_token %}
            {{form.as_p}}
            <p><input type="submit" value="注册" class="submit-button"/></p>
        </form>
    </div>
</body>

2 添加对应的视图(view)方法

这里先思考,要完成注册功能,视图方法应该实现怎样的功能。

注册一个新的学生账号,就是在student数据库表中添加一个新的记录。

对应到Django项目,则是通过新建一个学生模型(model)实例。 (教师同理)

Django为 model 类实现了一些功能强大的视图类,使你能够快速完成一个为model进行增删查改等等操作的视图类,同时使用视图类的特定方法生成视图。

这样的视图类一般称为CBV(Class-based views)

在这里我们直接使用为model类进行新增实例的CreateView。

方便我们直接根据指定的字段生成前端表单,该生成的表单自带检查字段格式的功能,同时也方便我们在后端接受表单请求后按照表单数据生成对应的实例。

如果不使用CBV,上面介绍的繁琐的过程都需要我们手动一步一步实现,这是很痛苦麻烦低效的。

cbv本身只能够指定根据哪些字段生成对应的前端表单。

但我们这里需要实现一个略微复杂一点的功能: 注册页面除了需要填写密码还需要确认密码(即再填写一遍密码),同时提交时,需要先检查这两个是否一致。

要完成这个功能,我们需要实现一个定制化的表单

实现定制化的表单

在user/forms.py文件中,添加代码

class StuRegisterForm(forms.ModelForm):
    confirm_password = forms.CharField(widget=forms.PasswordInput(), label="确认密码")

    class Meta:
        model = Student
        fields = ('grade',
                  'name',
                  'password',
                  'confirm_password',
                  'gender',
                  'birthday',
                  'email',
                  'info')

    def clean(self):
        cleaned_data = super(StuRegisterForm, self).clean()
        password = cleaned_data.get('password')
        confirm_password = cleaned_data.get('confirm_password')
        if confirm_password != password:
            self.add_error('confirm_password', 'Password does not match.')


class TeaRegisterForm(forms.ModelForm):
    confirm_password = forms.CharField(widget=forms.PasswordInput(), label="确认密码")

    class Meta:
        model = Teacher
        fields = ('name',
                  'password',
                  'confirm_password',
                  'gender',
                  'birthday',
                  'email',
                  'info')

    def clean(self):
        cleaned_data = super(TeaRegisterForm, self).clean()
        password = cleaned_data.get('password')
        confirm_password = cleaned_data.get('confirm_password')
        if confirm_password != password:
            self.add_error('confirm_password', 'Password does not match.')

然后为学生和老师这两种model都添加下对应的视图类

更新import导入部分

在user/views.py中,需要导入新的需要用到的库
更新后的导入库部分代码为:

from django.shortcuts import render, reverse, redirect
from django.http import HttpResponse
from django.views.generic import CreateView

from constants import INVALID_KIND
from user.forms import StuLoginForm, TeaLoginForm, StuRegisterForm, TeaRegisterForm

from user.models import Student, Teacher
实现CBV

导入好需要的库后,在user/views.py中,添加如下代码

class CreateStudentView(CreateView):
    model = Student
    form_class = StuRegisterForm
    # fields = "__all__"
    template_name = "user/register.html"
    success_url = "login"

    def form_valid(self, form):
        # 学生注册时选定年级自动生成学号
        grade = form.cleaned_data["grade"]
        # order_by默认升序排列,number前的负号表示降序排列
        student_set = Student.objects.filter(grade=grade).order_by("-number")
        if student_set.count() > 0:
            last_student = student_set[0]
            new_number = str(int(last_student.number) + 1)
            for i in range(6 - len(new_number)):
                new_number = "0" + new_number
        else:
            new_number = "000001"

        # Create, but don't save the new student instance.
        new_student = form.save(commit=False)
        # Modify the student
        new_student.number = new_number
        # Save the new instance.
        new_student.save()
        # Now, save the many-to-many data for the form.
        form.save_m2m()

        self.object = new_student

        uid = grade + new_number
        from_url = "register"
        base_url = reverse(self.get_success_url(), kwargs={'kind': 'student'})
        return redirect(base_url + '?uid=%s&from_url=%s' % (uid, from_url))


class CreateTeacherView(CreateView):
    model = Teacher
    form_class = TeaRegisterForm
    template_name = "user/register.html"
    success_url = "login"

    def post(self, request, *args, **kwargs):
        form = self.get_form()

        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def form_valid(self, form):
        # 老师注册时随机生成院系号, 院系号范围为[0,300)
        department_no = random.randint(0, 300)
        # 把非三位数的院系号转换为以0填充的三位字符串,如1转换为'001'
        department_no = '{:0>3}'.format(department_no)
        teacher_set = Teacher.objects.filter(department_no=department_no).order_by("-number")
        if teacher_set.count() > 0:
            last_teacher = teacher_set[0]
            new_number = int(last_teacher.number) + 1
            new_number = '{:0>7}'.format(new_number)
        else:
            new_number = "0000001"

        # Create, but don't save the new teacher instance.
        new_teacher = form.save(commit=False)
        # Modify the teacher
        new_teacher.department_no = department_no
        new_teacher.number = new_number
        # Save the new instance.
        new_teacher.save()
        # Now, save the many-to-many data for the form.
        form.save_m2m()

        self.object = new_teacher

        uid = department_no + new_number
        from_url = "register"
        base_url = reverse(self.get_success_url(), kwargs={'kind': 'teacher'})
        return redirect(base_url + '?uid=%s&from_url=%s' % (uid, from_url))

这里介绍下上面的业务逻辑,在本项目S1的第三章第一节说过:

学生年级号为4位数字组成的字符串,年级下子学号为6位数字组成的字符串。
这两个连接起来组成学生的唯一学号,该学号也为其登录使用的账号。
比如学生李大爽,年级号为"2020",子学号为"000001",其学号为"2020000001"。

其中年级号是学生注册时自己选择的,子学号是注册时按照其年级内注册的先后顺序生成的。
同一年级,第一个注册的是"000001",第二个是"000002",依次类推。

这部分功能是在上面的CreateStudentView中的form_valid方法中实现的,该方法会返回一个HttpResponseRedirect对象,对应的效果是学生注册成功后,会返回到该重定向页面所指向的网页,这里对应的是注册详情页。

一般来说转么做一个注册成功页面会好些,不过这是个小项目,这里我就懒得去专门再搞个新页面了。

由于注册后的账号是后台生成的,注册者并不知道,所以重定向后需要将账号展示给注册者看。

这里采用的技术是通过url来传参,传到注册详情页展示给注册者看。

而对于老师

说明:老师院系号为3位数字组成的字符串,院内编号为7位数字组成的字符串。
这两个连接起来组成老师的唯一教师号,该教师号也为其登录使用的账号。
比如老师牛有力,院系号为"266",院内编号为"0000001",其教师号为"2660000001"。

其中院系号目前是随机生成的(最早是想做由院系模块,后来觉得工作量大就先放弃了,如果有人想做的话可以自行拓展)
院内编号是注册时按照其院内注册的先后顺序生成的。

同一院系,第一个注册的是"0000001",第二个是"0000002",依次类推。

这部分功能是在上面的CreateTeacherView中的form_valid方法中实现的,该方法会返回一个HttpResponseRedirect对象,对应的效果是老师注册成功后,会返回到该重定向页面所指向的网页,这里对应的是注册详情页。

更新登录详情页,展示注册成功后的账号

更新user/views.py中的login方法如下

def login(request, kind):
    if kind not in ["teacher", "student"]:
        return HttpResponse(INVALID_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"]

            temp_res = "hello, %s" % uid
            return HttpResponse(temp_res)
    else:
        context = {'kind': kind}
        if request.GET.get('uid'):
            uid = request.GET.get('uid')
            context['uid'] = uid
            if kind == "teacher":
                form = TeaLoginForm({"uid": uid, 'password': '12345678'})
            else:
                form = StuLoginForm({"uid": uid, 'password': '12345678'})
        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)

再更新templates/user/login_detail.html如下

{% extends "user/background.html" %}
{% block welcome_message %}
    {% if from_url == "register" %}
        <div class="welcome-message">注册成功,你的{% if kind == "student" %}学号{% else %}账号{% endif %}是 {{ uid }}</div>
    {% else %}
        <div class="welcome-message">欢迎</div>
    {% endif %}
{% endblock %}
{% block login_container %}
    {% if kind == "student" %}
        <div class="login-kind-title">我是学生</div>
    {% else %}
        <div class="login-kind-title">我是老师</div>
    {% endif %}
    <div class = "form">
        <form method="post">
            {% csrf_token %}
            {{form.as_p}}
            <div class="submit-button">
                <input type="submit" value="登录"/>
                <a href="{% url 'register' kind%}">注册</a>
            </div>
        </form>
        <div class="return-button"><a href="">返回上一页</a></div>
    </div>
{% endblock %}
实现view方法

一般来说,实现CBV后,使用CBV自带的as_view()就可以生成需要的view方法了。
但是我们这里有些不同,由于有老师和学生两种注册,我想要用同一个视图方法来处理这两种请求。
那么视图方法

  1. 需要接收个参数,该参数需要标明是老师注册与学生注册中的哪一种
  2. 内部用条件判断语句,针对不同的种类,返回不同的视图结果

逻辑理清,在user/views.py中,继续添加代码如下

def register(request, kind):
    func = None
    if kind == "student":
        func = CreateStudentView.as_view()
    elif kind == "teacher":
        func = CreateTeacherView.as_view()

    if func:
        return func(request)
    else:
        return HttpResponse(INVALID_KIND)

好了,到这里,注册部分的视图方法就算完成了

最后,我们更新下url部分就好

3 更新url

在user/urls.py文件中,
给urlpatterns列表添加一行元素:

path('register/<slug:kind>', views.register, name="register")

再修改下templates/user/login_detail.html,为注册功能添加对应的进入链接

即修改第17行,修改前应该是

                <a href="">注册</a>

修改后为

                <a href="{% url 'register' kind%}">注册</a>

然后运行项目,浏览器打开http://127.0.0.1:8000/user/register/student,效果如图

在这里插入图片描述

Django+Mysql学生选课系统/学分管理系统 文章目录前言原题目运行效果项目环境项目阐述参考 前言 ▶之前报名了学校Python比赛,题目很高大上,不过放心,我做的完全达不到这个深度。这个项目其实需要改进的地方还很多,不过作为简单的选课系统来说,基本功能均已实现。后续会继续完善上传到GitHub上面,有需要源码的可以先行联系我。到时候传到GitHub后也会贴出地址,供大家交流。 原题目 【题目名称】 区块链学分管理系统 【背景说明】 在当... 阅读详情

相关推荐

汽车级智能栅极驱动器深度解析 | 连载03:功能框图与工作模式详解

在前两期连载中,我们分析了DRV871x-Q1的产品架构、引脚配置和电气特性。本期我们将深入探讨DRV871x-Q1的功能框图和工作模式,这是理解芯片内部工作机制的关键。通过分析功能框图,我们能够清晰地了解各功能模块之间的关系和信号流向;通过工作模式分析,我们能够掌握芯片在不同应用场景下的配置方法。这些知识对于系统设计和故障排查都至关重要。

VehSwHwDeveloper的博客 1101

用Java代码实现学生管理系统(可实现用户登录注册功能)

简单实现学生系统的登录和注册,以及学生信息添加、删除,修改、查询功能。根据需求,创建一个学生类和和用户类以及学生系统类,在登录管理系统之前需要先注册用户,只有输入正确的用户名和密码才可以登录,忘记密码后可以根据用户信息进行修改,用容器存储学生信息和用户信息,这里用到ArrayList,这是基础版的,进一步可以将信息存到数据库中。

m0_68055637的博客 9339

ChatGPT设置密钥后Codex免手机验证:配置顺序与身份凭证复用机制

API Key 是一种用于身份识别的凭证,其核心原理是通过预配置的密钥替代交互式登录流程。在开发工具中,密钥认证优先级通常高于会话认证,当本地存在有效密钥时,工具会直接复用该凭证,从而减少重复验证环节。这种机制的技术价值在于提升开发效率与配置一致性,尤其适用于多设备切换、CI/CD 流水线及编程辅助工具等场景。以 Codex 为例,在 ChatGPT 界面提前配置 API 密钥后,Codex 启动时可读取持久化存储的密钥,避免触发手机号验证,实现身份凭证的跨入口复用。

weixin_33940469的博客 475

基于SpringBoot+Mybatis+JSP的班级管理项目(三)注册功能实现

【代码】基于SpringBoot+Mybatis+JSP的班级管理项目(三)注册功能实现。

m0_64393446的博客 174

使用 Unity Sentis 和 Compute Shader,det_10g.onnx 进行高效人脸五官定位

在计算机视觉领域,人脸五官定位是一个重要的任务。本文将介绍如何使用 Unity Sentis 和 Compute Shader,结合模型,实现高效的人脸五官定位。我们将详细讲解每一步骤,并提供完整的代码示例。

m0_55632444的博客 2393

优化NEXYS A7开发板(Xilinx Artix-7)Microblaze核的FLASH读写性能实战

本文针对NEXYS A7开发板(Xilinx Artix-7)上Microblaze核读写FLASH速度慢的问题,提供了系统性的优化实战指南。通过深入分析SPI控制器配置、Flash指令模式选择、Microblaze核的Cache与硬件加速器优化,以及程序运行位置(BRAM vs DDR)的调整,有效将FLASH读写性能从“龟速”提升至接近理论峰值。文章结合实测数据,为FPGA嵌入式开发者提供了清晰的性能瓶颈分析与解决方案。

carrot的博客 257

学生选课管理系统的设计与实现

摘要本文对学生选课管理系统的构建流程进行了介绍,其主要包括需求分析详细设计、系统实现等重要部分组成,在此基础上构建的系统可应用到实际的学生选课管理系统业务中。本系统的主要特点在于将SSM应用到学生选课管理系统中,SSM的引入可提高系统开发效率,最终实现的系统具备运行稳定易用以及实用的特点。本文的主要工作分为如下几个部分:(1)总体方案的选择;本文确定系统基于B/S模式进行开发,并采用了JAVA语言,在mysql数据库的基础上进行功能的实现,为了提高开发效率,本系统在开发过程中引入了SSM。

yvonneking1118的博客 7899

【保姆级教程】教你如何轻松获取MIMIC数据使用权限

文章非常详细地介绍了MIMIC数据库申请使用的全部步骤。

越努力 越幸运 6600

SimpleStudentCourseManagementSystem 项目教程

SimpleStudentCourseManagementSystem 项目教程 1. 项目目录结构及介绍 SimpleStudentCourseManagementSystem/ ├── README.md ├── requirements.txt ├── setup.py ├── simple_student_course_management_system/ │ ├── __init__...

gitblog_00500的博客 696

模型实战(32)之 yolo26 实现对全身关键点数据集 的训练与关键点检测

模型实战(32)之 yolo26 实现对全身关键点数据集 的训练与关键点检测

yohnyang的博客 90

Arcgis使用NDVI值遥感反演叶面积指数(LAI)

经验模型反演操作不难,主要是要多看文献,了解公式。本文中的公式我也不清楚是哪个作物的NDVI和LAI的关系(别人提供的),继续看文献整理吧。后续会在下面罗列更新一下主要公式。

所有专家都曾始于新手 8430

5.零基础毕业设计之学生选课系统——实现注册功能

本文涉及到的新的额外知识点:Class-based views 没有这部分基础的读者,建议一边阅读本文一边查阅相关知识 这里推荐我的专栏:Python Web 相关章节内容。

qq_37002374的博客 927

CAPL概述与环境搭建

CANoe和CANalyzer是Vector公司开发的两款用于汽车电子系统开发和测试的工具。CANoe主要用于网络开发、仿真和测试,而CANalyzer则主要用于网络分析和诊断。两者都支持CAPL脚本语言,可以用于编写复杂的测试脚本和仿真模型。CAPL Browser是CANoe/CANalyzer中用于编写、编辑和调试CAPL脚本的工具。它提供了一个集成的开发环境,支持语法高亮、代码自动补全、调试等功能。菜单栏:包含文件操作、编辑、编译、调试等功能。工具栏。

闲人编程的博客 1664

Django 小实例S1 简易学生选课管理系统 —— 四、实现登录页面

python Django实现的一个简易的教务选课系统。 介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty。 项目已上传到我的github: https://github.com/BigShuang/SimpleStudentCourseManagementSystem。 S1总目录: 〇、初步介绍与演示 一、项目流程梳理与数据库设计 二、新建项目(project)、设置、运行 三、创建用户模型(model) 四、实现登录页面 .

大爽老师的博客 2978

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Django 小实例S1 简易学生选课管理系统 —— 二、新建项目(project)、设置、运行

python Django实现的一个简易的教务选课系统。 介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty。 项目已上传到我的github: https://github.com/BigShuang/SimpleStudentCourseManagementSystem。 S1总目录: 〇、初步介绍与演示 一、项目流程梳理与数据库设计 二、新建项目(project)、设置、运行 ======================= 大.

大爽老师的博客 2976

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Django 小实例S1 简易学生选课管理系统 —— 一、项目流程梳理与数据库设计

python Django实现的一个简易的教务选课系统。 介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty。 项目已上传到我的github: https://github.com/BigShuang/SimpleStudentCourseManagementSystem。 S1总目录: 〇、初步介绍与演示 一、项目流程梳理与数据库设计 ======================= 大爽歌作,made by big shuang.

大爽老师的博客 2663

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Django 小实例S1 简易学生选课管理系统 —— 三、创建用户模型(model)

python Django实现的一个简易的教务选课系统。 介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty。 项目已上传到我的github: https://github.com/BigShuang/SimpleStudentCourseManagementSystem。 S1总目录: 〇、初步介绍与演示 一、项目流程梳理与数据库设计 二、新建项目(project)、设置、运行 三、创建用户模型(model) =========.

大爽老师的博客 2101

python学生选课管理系统

本系统分为学生和管理员两个角色,其中学生可以注册登陆系统,查看课程分类,课程详情,在线选课,查看课表;管理员对学生信息,课程信息,公告信息,选课信息进行管理。 系统分为学生和管理员两个角色

2501_91488339的博客 583

计算机毕业设计django基于python的学生选课系统-高校教务管理系统

本论文主要论述了如何使用Python技术开发一个高校教务管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述高校教务管理的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。高校教务管理系统的主要使用者分为管理员和用户,实现功能包括管理员:首页、注册管理、教师管理、课程管理、选课安排、学生管理,用户:首页、个人资料、我的课程、个人成绩、校内信息,前台首页;首页、公开课、授课教师、授课机构。

qq_1262330535的博客 525

Vue+javaweb+Python的学生线上课程选择管理系统+数据可视化大屏+Django+flask+springboot

网络选课管理系统是一个基于互联网的应用程序,旨在帮助教师和学生进行课程注册和管理工作。该系统允许学生在线上查看课程信息,包括选课信息、退课信息、成绩信息、课程评价等。学生可以按照自己的学习计划和兴趣选择课程,并在系统中完成注册流程。系统管理员负责维护课程信息,更新课程,处理学生和教师的选课请求,并监控选课进度。

QQ511008285的博客 776

Python-flask-django学生选修课选课系统tw046

它改变了以往以班级为单位的原始手工选课的方式,而是采用以个人为依托的网上选题方式,使学生在平时选课的环节中实现选题的规范化,智能化,高效化,简便化;Python具有简洁的开发特点,每一行代码都更接近于自然语言的特点,可以方便初学者进行理解,其简洁的语语法特点,更适用于本系统的开发。因此Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,其设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

qq_3166678367的博客 1092

学生选课系统01 开题报告(python、django)

从学生的角度出发,时代不断进步,学生追求更加新奇且个性化的发展,通过选课系统,学生可以及时了解学校的不同学院开设的不同课程,根据自身情况选课。学生可以查看当前正在选课的课程,选择选课或者是撤课或者是查看当前结课课程等操作,对于超出最大选课人数的课程不能进行选课操作,教师未进行选课的科目学生端看不到。近几年开始采用互联网+的模式来进行各种信息化系统的开发,通过采用这些信息化系统可以更好地服务于高校的日常教务管理工作,这对推动我国的高校教育管理模式以及制度的变革都起到了非常重要的作用。

snowy_and_sunny的博客 1663

Python毕业设计基于Django的学生选课系统-高校教务管理系统

功能介绍 高校教务管理系统主要包括二大功能模块,即管理员功能模块和用户功能模块。 1:管理员模块:注册管理、教师管理、课程管理、选课安排、学生管理等功能 2:用户:首页、个人资料、我的课程、个人成绩、校内信息

QQ860660016的博客 1294

计算机毕业设计django基于python的学生选课系统-高校教务管理系统(源码+系统+mysql数据库+Lw文档)

本论文主要论述了如何使用Python技术开发一个高校教务管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述高校教务管理的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。高校教务管理系统的主要使用者分为管理员和用户,实现功能包括管理员:首页、注册管理、教师管理、课程管理、选课安排、学生管理,用户:首页、个人资料、我的课程、个人成绩、校内信息,前台首页;首页、公开课、授课教师、授课机构。

qq_1694456187的博客 154

springboot+vue+elementui新生入学管理系统-java ssm

该部分内容包含了首页,个人中心,专业管理,班级管理,学生管理,商品分类管理,商品信息管理,新生签到管理,交流论坛,系统管理,订单管理等功能。新生签到管理,在新生签到管理页面可以对索引,签到名称,签到时间,二维码,学号,姓名,专业,班级,审核回复,审核状态,审核等内容进行详情,修改和删除等操作。商品信息管理,在商品信息管理页面可以对索引,商品名称,商品分类,商品图片,商品规格,商品品牌,价格,单限,库存等内容进行详情,修改和删除等操作。2.4Python语言简介 6。2.3MySQL环境配置 6。

豆包程序员 237

基于Php+Mysql+html家乡旅游景点网页_乌镇之美

项目名称:基于Php+Mysql+html家乡旅游景点网页_乌镇之美项目架构:B/S架构开发语言:Php语言前端技术:HTML、CSS、JS、JQuery等技术后端技术:PHP运行环境:Win10以上数 据 库:MySQL5.7及以上运行服务器:PHP7及以上运行工具:VSCODE\phpStudy。项目简介:实现注册登录留言功能 admin管理员搜索修改删除功能(增删查改)

Timi2019的博客 815
上一篇: Django自学笔记 3-4 模板继承
下一篇: Django自学笔记 6-2 表单(Form)基础操作
大爽歌
博客等级 码龄9年 422粉丝 92原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值