From 43fdf01866067a659120b149c8e2a5c9656a3924 Mon Sep 17 00:00:00 2001 From: "https://github.com/Wyatt-t-t" Date: Thu, 8 May 2025 14:38:47 +0000 Subject: [PATCH] =?UTF-8?q?models.py=20:SeatInfo=20,views.py=20:addSeat?= =?UTF-8?q?=E3=80=81manageSeatPage=20and=20modifySeat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mydjangoDemo01/library/adminIndex.py | 134 +++++++++++++++++++++++++++ mydjangoDemo01/library/models.py | 39 ++++++++ mydjangoDemo01/library/views.py | 5 + 3 files changed, 178 insertions(+) create mode 100644 mydjangoDemo01/library/adminIndex.py diff --git a/mydjangoDemo01/library/adminIndex.py b/mydjangoDemo01/library/adminIndex.py new file mode 100644 index 0000000..1d2d7e0 --- /dev/null +++ b/mydjangoDemo01/library/adminIndex.py @@ -0,0 +1,134 @@ +from django.shortcuts import render,redirect,HttpResponse +# djangp=2.1 +from .models import * +from .utils import * + + +""" +Seat Information +""" +def startend2mask(start,end): + mask="" + for i in range(24): + if i >=start and i 开放时间为:",mask," .. mask的长度为:",len(mask)) + return mask +def mask2startend(mask): + start=0 + end=0 + start=mask.find("1") + end=mask.rfind("1") + if start==-1 or end==-1: + start=0 + end=0 + return start,end + +def addSeatPage(request): + return render(request,"addseat.html") +def addSeat(request): + #从前端表单中获取数据 + Campus=request.GET.get("campus",None) + Classroom_1=request.GET.get("classroom_1",None) + Classroom_2=request.GET.get("classroom_2",None) + Classroom=str(Classroom_1)+str(Classroom_2) + Index_1=request.GET.get("index_1",None) + Index_2=request.GET.get("index_2",None) + Index=str(Index_1).zfill(3)+str(Index_2).zfill(3) + Electricity=(request.GET.get("electricity",None)=="Powered") #Powered->1 Unpowered->0 + Start=request.GET.get("start",None) + End=request.GET.get("end",None) + Maxtime=request.GET.get("maxtime",None) + State=request.GET.get("state",None) + if State=="不可用": + State=-1 + elif State=="空闲": + State=0 + elif State=="被占用": + State=1 + else: + State=None + #在 SeatInfo 表中添加记录 + SeatInfo.objects.create( + Campus=Campus, + Classroom=Classroom, + Index=Index, + Electricity=Electricity, + Mask=startend2mask(int(Start),int(End)), + MaxTime=Maxtime, + ) + #return redirect("/page/adminIndex.html") + return render(request,"adminIndex.html") + +def manageSeatPage(request): + Campus=request.GET.get("Campus",None) + Classroom=request.GET.get("Classroom",None) + Index=request.GET.get("Index",None) + Electricity=request.GET.get("Electricity",None) + seats=SeatInfo.objects.all() + # print("打印各个值:",Campus,Classroom,Index,Electricity) + if "all" not in Campus: + seats=seats.filter(Campus=Campus) + if "all" not in Classroom: + # print("发现异常") + # print(type(Classroom),"###",Classroom,"###") + seats=seats.filter(Classroom=Classroom) + if "all" not in Index : + seats=seats.filter(Index=Index) + if "all" not in Electricity : + seats=seats.filter(Electricity=Electricity) + #seats是一个list类型的数据 + # print("=> seats:",seats) + # print("seats.type:",type(seats)) + #print("=> seat.type:",type(seats[0])) + context=dict() + context["seats"]=[] + for seat in seats: + temp=dict() + temp["Id"]=seat.id + temp["Campus"]=seat.Campus + temp["Classroom"]=seat.Classroom + temp["Index"]=seat.Index + temp["Electricity"]=seat.Electricity + temp["MaxTime"]=seat.MaxTime + temp["Mask"]=seat.Mask + context["seats"].append(temp) + return render(request,"manageSeat.html",context) +def modifySeat(request): + #print("=> 测试url传参:",request.GET.get("SeatID",None)) #经测试,能够成功传参,使用get方式获取 + context=dict() + context["Id"]=request.GET.get("SeatID",None) + context["Campus"]=request.GET.get("Campus",None) + context["Classroom"]=request.GET.get("Classroom",None) + context["Index"]=request.GET.get("Index",None) + context["Electricity"]= True if "True" in request.GET.get("Electricity",None) else False + context["MaxTime"]=int(request.GET.get("MaxTime",None)) + context["Mask"]=request.GET.get("Mask",None) + context["Start"],context["End"]=mask2startend(context["Mask"]) + ''' + # print(context) + # print("=> 开始检查 各个属性的 类型 数值 ..") + # print("*****",type(context["Id"]),"*****",context["Id"],"*****") + # print("*****",type(context["Campus"]),"*****",context["Campus"],"*****") + # print("*****",type(context["Classroom"]),"*****",context["Classroom"],"*****") + # print("*****",type(context["Index"]),"*****",context["Index"],"*****") + # print("*****",type(context["Electricity"]),"*****",context["Electricity"],"*****") + # print("*****",type(context["MaxTime"]),"*****",context["MaxTime"],"*****") + # print("*****",type(context["Mask"]),"*****",context["Mask"],"*****") + # print("*****",type(context["Start"]),"*****",context["Start"],"*****") + # print("*****",type(context["End"]),"*****",context["End"],"*****") + ''' + seat=SeatInfo.objects.filter(id=int(context["Id"])) + if context["Campus"]=="None": + seat[0].delete() + seat=SeatInfo.objects.filter(id=int(context["Id"])).update( + Campus=context["Campus"], + Classroom=context["Classroom"], + Index=context["Index"], + Electricity=context["Electricity"], + Mask=startend2mask(start=context["Start"],end=context["End"]), + MaxTime=context["MaxTime"], + ) + return render(request,"adminIndex.html") diff --git a/mydjangoDemo01/library/models.py b/mydjangoDemo01/library/models.py index 71a8362..cb7eefb 100644 --- a/mydjangoDemo01/library/models.py +++ b/mydjangoDemo01/library/models.py @@ -1,3 +1,42 @@ from django.db import models # Create your models here. + +'''定义模型对象(其实就是数据库中的“表的模板”)''' +'''django\db\models\fields\__init__.py中有所有的类型''' +class UserInfo(models.Model): + # 定义属性 也就是 表中列的定义 + UserID=models.BigIntegerField(primary_key=True) #在mysql中,只有int类型数据能够作为主键,但学号很长,所以使用大整数 + UserPassword=models.CharField(max_length=100,null=True) + Name=models.CharField(max_length=50,null=True) + Gender=models.BooleanField(null=True) + Email=models.EmailField(unique=True,null=True) #学生与邮箱必须一一对应 + +class SeatInfo(models.Model): + Campus=models.CharField(max_length=50,null=True) + Classroom=models.CharField(max_length=50,null=True) + Index=models.CharField(max_length=50,null=True) + Electricity=models.BooleanField(null=True) + Mask=models.CharField(max_length=25,default="000000000111111111111000") #共24个数字,代表每个时间段的 availale + Used=models.CharField(max_length=25,default="000000000000000000000000") #共24个数字,代表每个时间段的 accessable + MaxTime=models.SmallIntegerField(null=True,default=4) + +class ReservationInfo(models.Model): + UserID=models.ForeignKey(to=UserInfo,on_delete=models.CASCADE) #设置外键 + SeatID=models.ForeignKey(to=SeatInfo,on_delete=models.CASCADE) + Date=models.DateTimeField(auto_now=True,null=True) + Start=models.SmallIntegerField(null=True) + End=models.SmallIntegerField(null=True) + State=models.SmallIntegerField(null=True) + +class SignInfo(models.Model): + UserID=models.ForeignKey(to=UserInfo,on_delete=models.CASCADE,null=True) + ReservationID=models.ForeignKey(to=ReservationInfo,on_delete=models.CASCADE) + Deadline=models.SmallIntegerField(null=True) + +''' +在创建一对多的关系的,需要在ForeignKey的第二参数中加入 +on_delete=models.CASCADE 主外关系键中,级联删除, +也就是当删除主表的数据的时候从表中的数据也随着一起删除。 +''' + diff --git a/mydjangoDemo01/library/views.py b/mydjangoDemo01/library/views.py index 91ea44a..0374255 100644 --- a/mydjangoDemo01/library/views.py +++ b/mydjangoDemo01/library/views.py @@ -1,3 +1,8 @@ from django.shortcuts import render # Create your views here. + + + +# Admin Index +from .adminIndex import addSeat,addSeatPage,manageSeatPage,modifySeat \ No newline at end of file