第一个Django项目——学生信息管理

学生注册功能

1、终端新建一个应用文件startapp。

2、在settings文件中添加INSTALLED_APPS,修改DATABASES,并创建子路由文件。

3、根路由,子路由添加路径与对应函数

4、编写stu的views文件

from django.shortcuts import render
from .models import *
# Create your views here.
def view_stu(request):
    if request.method == 'GET':
        return render(request,'register.html')
    else:
        pass

5、在templates中创建register.html文件并编写对应的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/student/" method="post">
    {% csrf_token %}
    <p>
        <label>姓名:</label><input type="text" name="sname" >
    </p>
    <p>
        <label>所属班级:</label>
        <select name="cname" >
            <option value="1班">1班</option>
            <option value="2班">2班</option>
            <option value="3班">3班</option>
        </select>
    </p>
    <p>
        <label>选课:</label>
        <input type="checkbox" name="coursename" value="python">python &emsp;
        <input type="checkbox" name="coursename" value="java">java &emsp;
        <input type="checkbox" name="coursename" value="c++">c++ &emsp;
    </p>
    <p>
        <input type="submit" value="注册">
    </p>
</form>
</body>
</html>

6、终端开启服务器(python manage.py runserver)调试一下,路径跟根路由添加的一致,别写错了。

7、运行正常,继续在stu/models.py中创建模型类

from django.db import models

# Create your models here.

#班级表
class Cclass(models.Model):
    cc_id = models.AutoField(primary_key=True)
    cc_name = models.CharField(max_length=30)
    def __str__(self):
        return u'Cclass:%s'%self.cc_name

#课程表
class Course(models.Model):
    cou_id = models.AutoField(primary_key=True)
    cou_name = models.CharField(max_length=30)
    def __str__(self):
        return u'Course:%s'%self.cou_name

#学生表
class Student(models.Model):
    stu_id = models.AutoField(primary_key=True)
    stu_name = models.CharField(max_length=30)
    #外键
    cls = models.ForeignKey(Cclass,on_delete=models.CASCADE)
    #建立多对多关系
    cour = models.ManyToManyField(Course)
    def __str__(self):
        return u'Student:%s'%self.stu_name

8、创建当前应用的迁移文件,生成数据库表。

#创建当前应用的迁移文件
python manage.py makemigrations student

#生成数据库表
python manage.py migrate

9、到Nvicat看看有没有生成表

10、继续在views文件中编写获取前端提交的数据的代码,在前端页面输入,调试一下。

from django.shortcuts import render
from .models import *
# Create your views here.
def view_stu(request):
    if request.method == 'GET':
        return render(request,'register.html')
    else:
        sname = request.POST.get('sname','')
        cname = request.POST.get('cname','')
        coursename = request.POST.getlist('coursename',[])
        print(sname,cname,*coursename)

获取到了。

11、在stu/models.py编写向数据库添加数据的函数

from django.db import models

# Create your models here.

#班级表
class Cclass(models.Model):
    cc_id = models.AutoField(primary_key=True)
    cc_name = models.CharField(max_length=30)
    def __str__(self):
        return u'Cclass:%s'%self.cc_name

#课程表
class Course(models.Model):
    cou_id = models.AutoField(primary_key=True)
    cou_name = models.CharField(max_length=30)
    def __str__(self):
        return u'Course:%s'%self.cou_name

#学生表
class Student(models.Model):
    stu_id = models.AutoField(primary_key=True)
    stu_name = models.CharField(max_length=30)
    cls = models.ForeignKey(Cclass,on_delete=models.CASCADE)
    cour = models.ManyToManyField(Course)
    def __str__(self):
        return u'Student:%s'%self.stu_name

#获取班级对象
def getCls(cname):
    try:
        #数据库中有信息就直接获取,否则向表中创建新的数据
        cls = Cclass.objects.get(cc_name=cname)
    except Cclass.DoesNotExist:
        cls = Cclass.objects.create(cc_name=cname)
    return cls

#获取课程对象
def getCourList(*coursename):
    courList = []
    for co in coursename:
        try:
            #数据库中有信息就直接获取,否则向表中创建新的数据
            c = Course.objects.get(cou_name=co)
        except Course.DoesNotExist:
            c = Course.objects.create(cou_name=co)
        courList.append(c)
    return courList

#获取学生对象
def getStu(sname, cls):
    try:
        #数据库中有信息就直接获取,否则向表中创建新的数据
        stu = Student.objects.get(stu_name=sname)
    except Student.DoesNotExist:
        stu = Student.objects.create(stu_name=sname, cls=cls)
    return stu

#注册
def register(sname,cname,*coursename):
    #插入班级表,获取班级对象
    cls = getCls(cname)
    #插入课程列表,获取课程对象
    courList = getCourList(*coursename)
    #插入学生表,获取学生对象
    stu = getStu(sname,cls)
    #插入中间表数据
    stu.cour.add(*courList)
    return True

12、在views.py中调用register(sname,cname,*coursename)函数

from django.http import HttpResponse
from django.shortcuts import render
from .models import *
# Create your views here.
def view_stu(request):
    if request.method == 'GET':
        return render(request,'register.html')
    else:
        sname = request.POST.get('sname','')
        cname = request.POST.get('cname','')
        coursename = request.POST.getlist('coursename',[])
        jud = register(sname,cname,*coursename)
        if jud:
            return HttpResponse('注册成功')
        return HttpResponse('注册失败')

13、在前端页面添加信息,看一下有没有添加到数据库。

成功。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值