前言:
今天给大家分享一个基于PythonWeb(django)框架开发的一款Web项目(图书馆座位预约系统),如下是项目的简介:
项目名称:基于Django的图书馆座位预约系统.
项目实现功能:用户的登陆注册,用户可以预约学校的图书馆座位(几号图书馆什么时间(日期+上午/下午/晚上)几号座位),如果a用户选中了某一个图书馆的某个时间段的某个作为则该作为会被标记为不可选中状态,用户可以查看并且取消自己的预约的座位信息情况,如果用户违规使用座位或者没有按时使用已预约座位将会收到后台的警告,同时用户可以对自己的账号数据信息惊醒修改等.
项目涉及技术:Python,Django,MySQL,BootStrap,Web
项目分析:
项目数据库搭建:
from django.db import models
from django.utils.safestring import mark_safe
# 学生表
class Students(models.Model):
id = models.AutoField(verbose_name="编号", primary_key=True)
name = models.CharField(verbose_name="姓名", max_length=22, default='')
password = models.CharField(verbose_name="密码", max_length=32, default='')
phone = models.CharField(verbose_name="手机号", max_length=11, default='')
email = models.CharField(verbose_name="邮箱", max_length=22, default='')
time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
photo = models.FileField(verbose_name="头像", default='', upload_to="Students/photo/")
is_active = models.BooleanField(verbose_name="活跃状态", default=True)
def admin_sample(self):
return mark_safe('<img src="/media/%s" height="60" width="60" />' % (self.photo,))
admin_sample.short_description = '学生图片'
admin_sample.allow_tags = True
def __str__(self):
return self.name
class Meta:
# 数据库列表名
db_table = 'Students'
# 后台管理名
verbose_name_plural = '学生管理'
# 自习室信息表
class Rooms(models.Model):
id = models.AutoField(verbose_name="编号", primary_key=True)
name = models.CharField(verbose_name="名称", max_length=22, default='')
number = models.IntegerField(verbose_name="座位数量", default=0)
photo = models.FileField(verbose_name="头像", default='', upload_to="Room/photo/")
time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
is_active = models.BooleanField(verbose_name="活跃状态", default=True)
def admin_sample(self):
return mark_safe('<img src="/media/%s" height="60" width="60" />' % (self.photo,))
admin_sample.short_description = '图书馆图片'
admin_sample.allow_tags = True
def __str__(self):
return self.name
class Meta:
# 数据库列表名
db_table = 'Room'
# 后台管理名
verbose_name_plural = '自习室管理'
# 预约管理
class Bookings(models.Model):
id = models.AutoField(verbose_name="编号", primary_key=True)
students = models.ForeignKey(verbose_name="学生", to='Students', null=True, on_delete=models.CASCADE)
number = models.IntegerField(verbose_name="预约座位号", default=0)
room = models.ForeignKey(verbose_name="自习室", to='Rooms', on_delete=models.CASCADE, null=True)
booking_day = models.CharField(verbose_name="预定日期", max_length=22, default=0)
# 1.上午 2.下午 3.晚自习
time_choice = (
(1, '上午'),
(2, '下午'),
(3, '晚自习'),
)
period = models.IntegerField(verbose_name="时间", choices=time_choice, default=1)
time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
is_active = models.BooleanField(verbose_name="活跃状态", default=True)
def __str__(self):
return self.students.name
class Meta:
# 数据库列表名
db_table = 'Booking'
# 后台管理名
verbose_name_plural = '预约管理'
def admin_sample(self):
return mark_safe('<img src="/media/%s" height="60" width="60" />' % (self.students.photo,))
admin_sample.short_description = '学生图片'
admin_sample.allow_tags = True
# 警告管理
class Integrals(models.Model):
id = models.AutoField(verbose_name="编号", primary_key=True)
student = models.ForeignKey(verbose_name="学生", to='Students', on_delete=models.CASCADE)
title = models.CharField(verbose_name="警告题目", max_length=220, default='')
text = models.TextField(verbose_name="警告内容内容", max_length=220, default='')
time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
is_active = models.BooleanField(verbose_name="活跃状态", default=True)
def __str__(self):
return self.student.name
class Meta:
# 数据库列表名
db_table = 'Integral'
# 后台管理名称
verbose_name_plural = '学生警告管理'
def admin_sample(self):
return mark_safe('<img src="/media/%s" height="60" width="60" />' % (self.student.photo,))
admin_sample.short_description = '学生图片'
admin_sample.allow_tags = True
# 公告管理
class Text(models.Model):
id = models.AutoField(verbose_name="编号", primary_key=True)
title = models.CharField(verbose_name="题目", max_length=120, default='')
text = models.TextField(verbose_name="内容", default='')
time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
is_active = models.BooleanField(verbose_name="活跃状态", default=True)
def __str__(self):
return self.text
class Meta:
# 数据库列表名
db_table = 'Text'
# 后台管理名
verbose_name_plural = '提示管理'
# python manage.py makemigrations
# python manage.py migrate
# python manage.py createsuperuser
后端views代码:
from django.shortcuts import render, HttpResponseRedirect
from django.utils import timezone
from login.models import *
# 01显示自习室信息
def bookings(request):
try:
room = Rooms.objects.filter(is_active=True)
except Exception as e:
room = None
return render(request, '../templates/index/Bookings.html', {"room": room})
# 02预约座位
def seat(request, id):
try:
room = Rooms.objects.get(id=id) # 选择的自习室信息
rooms = Rooms.objects.filter(is_active=True) # 所有自习室信息
except Exception as e:
print(e)
return
if request.method == "GET":
room_selected = request.GET.get('room_id')
# 选择时间
if room_selected:
# 判断用户选择的时间
time_selected_r = int(request.GET.get('day')) # 日期
time_selected_s = int(request.GET.get('time')) # 时间
# 日期判断
d1 = timezone.now()
time = int(d1.day)
if time_selected_r == 1: # 当天
time = time
elif time_selected_r == 2: # 明天
time = time + 1
if time > 31:
time = 1
if d1.month < 10 and time < 10:
booking_day = str(d1.year) + '-0' + str(d1.month) + '-0' + str(time)
elif d1.month < 10 and time > 10:
booking_day = str(d1.year) + '-0' + str(d1.month) + '-' + str(time)
elif d1.month > 10 and time < 10:
booking_day = str(d1.year) + '-' + str(d1.month) + '-0' + str(time)
else:
booking_day = str(d1.year) + '-' + str(d1.month) + '-' + str(time)
try:
room_1 = Rooms.objects.get(id=room_selected) # 找到对应的自习室
bookinged = Bookings.objects.filter(
period=time_selected_s,
room_id=room_selected,
is_active=True,
booking_day=booking_day
).all().values('number')
seat_booked_list = []
for i in list(bookinged):
seat_booked_list.append(i['number'])
except Exception as e:
return
seat_list = []
# 填充座位列表
for i in range(room.number + 1):
seat_list.append(i)
seat_list.remove(0)
return render(request, '../templates/index/seat_id.html', {"room": room,
"rooms": rooms,
"seat": seat_list,
"seat_booked": seat_booked_list,
"room_id": room_selected,
"time_selected_r": time_selected_r,
"time_selected_s": time_selected_s,
"room_1": room_1.name,
})
# 没选时间
else:
return render(request, '../templates/index/seat.html', {"room": room,
"rooms": rooms,
"room_id": room.id})
elif request.method == 'POST':
room_1 = request.POST['room'] # 自习室
number = request.POST['number'] # 座位号
period = request.POST['time'] # 时间段
name = request.session.get("name") # 用户名
name = name['name'] # 用户名
day = request.POST['day'] # 今天或明天
# 日期判断
d1 = timezone.now() # 当前时间
time = int(d1.day) # 当前的日期(天数)
if int(day) == 1:
time = time
elif int(day) == 2:
time = time + 1
if d1.month < 10 and time < 10:
booking_day = str(d1.year) + '-0' + str(d1.month) + '-0' + str(time)
elif d1.month < 10 and time > 10:
booking_day = str(d1.year) + '-0' + str(d1.month) + '-' + str(time)
elif d1.month > 10 and time < 10:
booking_day = str(d1.year) + '-' + str(d1.month) + '-0' + str(time)
else:
booking_day = str(d1.year) + '-' + str(d1.month) + '-' + str(time)
# 判断本人有没有已经预约了座位
name = request.session.get('name')
name = name['name']
try:
student = Students.objects.get(name=name)
book = Bookings.objects.filter(
students_id=student.id,
period=period,
is_active=True,
booking_day=booking_day
)
except Exception as e:
print(e)
return
if book:
msg = "alert"
return render(request, '../templates/index/seat.html',
{"rooms": rooms, "room": room, "room_id": room.id, "msg": msg})
else:
try:
student = Students.objects.get(name=name)
booking = Bookings.objects.create(
students=student,
number=number,
room_id=room_1,
period=period,
booking_day=booking_day
)
except Exception as e:
print(e)
return HttpResponseRedirect('/index/recording/')
# 03查看预约信息
def recording(request):
student = request.session.get('name')
student = student['name']
id = request.GET.get('id')
# 取消预约
if id:
try:
booking = Bookings.objects.get(id=id)
except Exception as e:
print(e)
return
booking.is_active = False
booking.save()
return HttpResponseRedirect("/index/recording/")
# 获取预约信息
try:
student = Students.objects.get(name=student).id
booking = Bookings.objects.filter(is_active=True, students_id=student).order_by('-time')
except Exception as e:
print(e)
return
# 日期判断
d1 = timezone.now()
day = int(d1.day)
return render(request, '../templates/index/Recording.html', {"booking": booking, "day": day})
# 04警告信息
def warn(request):
student = request.session.get('name')
student = student['name']
try:
student = Students.objects.get(name=student)
integrals = Integrals.objects.filter(is_active=True, student_id=student.id)
except Exception as e:
print(e)
return
return render(request, '../templates/index/warn.html', {"integrals": integrals})
项目实现效果截图:











结尾:
需要该项目或有Python项目相关的问题的同学可以关注私信我,或者下方 名片加我微信交流~
802

被折叠的 条评论
为什么被折叠?



