1.在pycharm终端下面按照你的路径创建或者cmd创建项目
2.创建app
创建好之后stu项目下 setting文件里添加app
1.配置主路由(url) 以及根路由(url) 在app里面创建urls.py文件
主路由文件以及根路由文件:
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'student/', include('stuapp.urls'))
]
2.这里同时在stuapp文件夹下创建views.py(来进行逻辑的处理)同时将views文件导入
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.student_register),
]
3.在views文件中渲染页面 首先在stuapp下创建templates文件夹 再文件夹下创建register.html文件(templates是django项目setting下默认存放页面的文件夹名)
代码如下:
from django.shortcuts import render
def student_register(request):
if request.method == 'GET':
return render(request, 'register.html')
else:
retrun None
OK 这里我们可以通过127.0.0.1:8000/student 访问到这个register.html 页面
下面是register代码:(记得在表单中添加{% csrf_token %}不然会报错 为了防止跨域攻击)
注册
终端输入:python manage.py runserver启动服务器 访问127.0.0.1:8000/student
效果图如下:
1.进入项目下setting.py文件 修改database(数据库里面得先创建stu数据库)
2.创建模型类(这里创建三张表 学生 班级 课程 学生和班级一对一关系 学生和课程多对多关系)
代码如下:
from django.db import models
# Create your models here.
#数据库表之间的关系 班级表 课程表 学生表(学生与班级关系一对多:外键参照班级表 学生与课程关系多对多:manytomanyfiled(Course))
#关系多对多 会创建新的表存放 两个表的autofiled id字段 来表示多对多关系
class Clazz(models.Model):
cno = models.AutoField(primary_key=True)
cname = models.CharField(max_length=30)
def __str__(self):
return u'班级:%s', self.cname
class Course(models.Model):
cour_no = models.AutoField(primary_key=True)
cour_name = models.CharField(max_length=30)
def __str__(self):
return u'课程:%s', self.cour_name
class Student(models.Model):
sno = models.AutoField(primary_key=True)
sname = models.CharField(max_length=30)
sclass = models.ForeignKey(Clazz, on_delete=models.CASCADE)
cour = models.ManyToManyField(Course)
def __str__(self):
return u'姓名:%s', self.sname
3.将页面数据插入数据库
views代码如下:
from django.shortcuts import render
from .models import *
from django.http import HttpResponse
# Create your views here.
def student_register(request):
if request.method == 'GET':
return render(request, 'register.html')
else:
# 接收页面参数 姓名 班级 选课 没有返回空
sname = request.POST.get('sname', '')
sclass = request.POST.get('cname', '')
courname = request.POST.getlist('courname', [])
# 将数据写入数据库
flag = registerStu(sname, sclass, *courname)
if flag:
return HttpResponse("注册成功")
return HttpResponse("注册失败")
# 插入数据到数据库
def registerStu(sname, cname, *courname):
# 插入班级表数据
cls = getclass(cname)
# 插入课程数据
courlist = getcourList(*courname)
stu = Student.objects.create(sname=sname, sclass=cls)
# 插入中间表数据
stu.cour.add(*courlist)
return True
# 通过班级名获取班级对象 有则获取没有则创建
#bug:
def getclass(cname):
try:
cls = Clazz.objects.get(cname=cname)
except Clazz.DoesNotExist:
cls = Clazz.objects.create(cname=cname)
return cls
# 获取课程列表
def getcourList(*courname):
courList = []
for i in courname:
try:
c = Course.objects.get(cour_name=i)
except Course.DoesNotExist:
c = Course.objects.create(cour_name=i)
courList.append(c)
return courList
4.效果展示:
mysql数据库:
OK 这里注册成功了 下面显示学生信息:
1.同样添加根路由 创建html文件 在views下做逻辑判断以及渲染页面
2.代码显示:
showall.html
显示所有信息
编号
班级名称
操作
{% for c in cls %}
{{forloop.counter}}
{{c.cname}}
详情
{% endfor %}
stulist.html
显示详情
编号
姓名
班级名称
课程名称
{% for stu in stus %}
{{forloop.counter}}
{{stu.sname}}
{{stu.sclass.cname}}
{% for cou in stu.cour.all %}
{{cou.cour_name}}
{% endfor %}
{% endfor %}
views代码:
# 显示所有班级信息
def showall_stu(request):
# 查询班级表中所有数据
cls = Clazz.objects.all()
return render(request, 'showall.html', {'cls': cls})
#显示当前班级下的所有学生信息
def getstu(request):
cno = request.GET.get('cno', '')
no = int(cno)
#根据班级编号查询学生信息
stus = Clazz.objects.get(cno=no).student_set.all()
return render(request, 'stulist.html', {'stus': stus})
3.效果展示: