飞道的博客

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

512人阅读  评论(0)

学生注册功能

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

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

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

4、编写stu的views文件


  
  1. from django.shortcuts import render
  2. from .models import *
  3. # Create your views here.
  4. def view_stu(request):
  5. if request.method == 'GET':
  6. return render(request, 'register.html')
  7. else:
  8. pass

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


  
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title </title>
  6. </head>
  7. <body>
  8. <form action="/student/" method="post">
  9. {% csrf_token %}
  10. <p>
  11. <label>姓名: </label> <input type="text" name="sname" >
  12. </p>
  13. <p>
  14. <label>所属班级: </label>
  15. <select name="cname" >
  16. <option value="1班">1班 </option>
  17. <option value="2班">2班 </option>
  18. <option value="3班">3班 </option>
  19. </select>
  20. </p>
  21. <p>
  22. <label>选课: </label>
  23. <input type="checkbox" name="coursename" value="python">python &emsp;
  24. <input type="checkbox" name="coursename" value="java">java &emsp;
  25. <input type="checkbox" name="coursename" value="c++">c++ &emsp;
  26. </p>
  27. <p>
  28. <input type="submit" value="注册">
  29. </p>
  30. </form>
  31. </body>
  32. </html>

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

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


  
  1. from django.db import models
  2. # Create your models here.
  3. #班级表
  4. class Cclass(models.Model):
  5. cc_id = models.AutoField(primary_key= True)
  6. cc_name = models.CharField(max_length= 30)
  7. def __str__(self):
  8. return u'Cclass:%s'%self.cc_name
  9. #课程表
  10. class Course(models.Model):
  11. cou_id = models.AutoField(primary_key= True)
  12. cou_name = models.CharField(max_length= 30)
  13. def __str__(self):
  14. return u'Course:%s'%self.cou_name
  15. #学生表
  16. class Student(models.Model):
  17. stu_id = models.AutoField(primary_key= True)
  18. stu_name = models.CharField(max_length= 30)
  19. #外键
  20. cls = models.ForeignKey(Cclass,on_delete=models.CASCADE)
  21. #建立多对多关系
  22. cour = models.ManyToManyField(Course)
  23. def __str__(self):
  24. return u'Student:%s'%self.stu_name

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


  
  1. #创建当前应用的迁移文件
  2. python manage.py makemigrations student
  3. #生成数据库表
  4. python manage.py migrate

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

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


  
  1. from django.shortcuts import render
  2. from .models import *
  3. # Create your views here.
  4. def view_stu(request):
  5. if request.method == 'GET':
  6. return render(request, 'register.html')
  7. else:
  8. sname = request.POST.get( 'sname', '')
  9. cname = request.POST.get( 'cname', '')
  10. coursename = request.POST.getlist( 'coursename',[])
  11. print(sname,cname,*coursename)

获取到了。

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


  
  1. from django.db import models
  2. # Create your models here.
  3. #班级表
  4. class Cclass(models.Model):
  5. cc_id = models.AutoField(primary_key= True)
  6. cc_name = models.CharField(max_length= 30)
  7. def __str__(self):
  8. return u'Cclass:%s'%self.cc_name
  9. #课程表
  10. class Course(models.Model):
  11. cou_id = models.AutoField(primary_key= True)
  12. cou_name = models.CharField(max_length= 30)
  13. def __str__(self):
  14. return u'Course:%s'%self.cou_name
  15. #学生表
  16. class Student(models.Model):
  17. stu_id = models.AutoField(primary_key= True)
  18. stu_name = models.CharField(max_length= 30)
  19. cls = models.ForeignKey(Cclass,on_delete=models.CASCADE)
  20. cour = models.ManyToManyField(Course)
  21. def __str__(self):
  22. return u'Student:%s'%self.stu_name
  23. #获取班级对象
  24. def getCls(cname):
  25. try:
  26. #数据库中有信息就直接获取,否则向表中创建新的数据
  27. cls = Cclass.objects.get(cc_name=cname)
  28. except Cclass.DoesNotExist:
  29. cls = Cclass.objects.create(cc_name=cname)
  30. return cls
  31. #获取课程对象
  32. def getCourList(*coursename):
  33. courList = []
  34. for co in coursename:
  35. try:
  36. #数据库中有信息就直接获取,否则向表中创建新的数据
  37. c = Course.objects.get(cou_name=co)
  38. except Course.DoesNotExist:
  39. c = Course.objects.create(cou_name=co)
  40. courList.append(c)
  41. return courList
  42. #获取学生对象
  43. def getStu(sname, cls):
  44. try:
  45. #数据库中有信息就直接获取,否则向表中创建新的数据
  46. stu = Student.objects.get(stu_name=sname)
  47. except Student.DoesNotExist:
  48. stu = Student.objects.create(stu_name=sname, cls=cls)
  49. return stu
  50. #注册
  51. def register(sname,cname,*coursename):
  52. #插入班级表,获取班级对象
  53. cls = getCls(cname)
  54. #插入课程列表,获取课程对象
  55. courList = getCourList(*coursename)
  56. #插入学生表,获取学生对象
  57. stu = getStu(sname,cls)
  58. #插入中间表数据
  59. stu.cour.add(*courList)
  60. return True

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


  
  1. from django.http import HttpResponse
  2. from django.shortcuts import render
  3. from .models import *
  4. # Create your views here.
  5. def view_stu(request):
  6. if request.method == 'GET':
  7. return render(request, 'register.html')
  8. else:
  9. sname = request.POST.get( 'sname', '')
  10. cname = request.POST.get( 'cname', '')
  11. coursename = request.POST.getlist( 'coursename',[])
  12. jud = register(sname,cname,*coursename)
  13. if jud:
  14. return HttpResponse( '注册成功')
  15. return HttpResponse( '注册失败')

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

成功。


转载:https://blog.csdn.net/qq_41645342/article/details/104519439
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场