学生注册功能
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、在前端页面添加信息,看一下有没有添加到数据库。
成功。
转载:https://blog.csdn.net/qq_41645342/article/details/104519439
查看评论