学生注册功能
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  
<input type="checkbox" name="coursename" value="java">java  
<input type="checkbox" name="coursename" value="c++">c++  
</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、在前端页面添加信息,看一下有没有添加到数据库。
成功。