当前位置:   article > 正文

会议室预订系统(meeting room booking system)

extjs会议室预定

一、目标及业务流程

期望效果:

业务流程:

  1. 用户登录
  2. 预定会议室
  3. 退订会议室
  4. 选择日期;今日以及以后日期

二、表结构设计和生成

1、models.py(用户继承AbstractUser)

  1. from django.db import models
  2. # Create your models here.
  3. from django.db import models
  4. from django.contrib.auth.models import AbstractUser
  5. class UserInfo(AbstractUser):
  6. """用户信息表"""
  7. tel = models.CharField(max_length=32)
  8. class Room(models.Model):
  9. """会议室表"""
  10. caption = models.CharField(max_length=32) # 会议室名字
  11. num = models.IntegerField() # 会议室容纳人数
  12. def __str__(self):
  13. return self.caption
  14. class Book(models.Model):
  15. """会议室预订信息"""
  16. user = models.ForeignKey("UserInfo", on_delete=models.CASCADE) # CASCADE级联删除
  17. room = models.ForeignKey("Room", on_delete=models.CASCADE)
  18. date = models.DateField() # 日期
  19. time_choices = ( # 时段
  20. (1, '8:00'),
  21. (2, '9:00'),
  22. (3, '10:00'),
  23. (4, '11:00'),
  24. (5, '12:00'),
  25. (6, '13:00'),
  26. (7, '14:00'),
  27. (8, '15:00'),
  28. (9, '16:00'),
  29. (10, '17:00'),
  30. (11, '18:00'),
  31. (12, '19:00'),
  32. (13, '20:00'),
  33. )
  34. time_id = models.IntegerField(choices=time_choices) # 存数字,choices参数
  35. class Meta:
  36. unique_together = ( # 三个联合唯一,防止有人重复预定
  37. ('room', 'date', 'time_id'),
  38. )
  39. def __str__(self):
  40. return str(self.user) + "预定了" + str(self.room)

注意:

(1)Django中提供了AbstractUser类,可以用来自由定制需要的model
  1. from django.contrib.auth.models import AbstractUser
  2. class UserInfo(AbstractUser):
  3. """用户信息表"""
  4. tel = models.CharField(max_length=32)

  如上所示,即可在Django的基础上添加我们所需要的信息。

(2)设置model的时候,设置三个字段联合唯一
  1. class Book(models.Model):
  2. """会议室预订信息"""
  3. ....
  4. class Meta:
  5. unique_together = ( # 三个联合唯一,防止有人重复预定
  6. ('room', 'date', 'time_id'),
  7. )

   存的是key 显示的是value,且只能存key

2、修改配置文件settings.py,覆盖默认的User模型

  Django允许你通过修改setting.py文件中的 AUTH_USER_MODEL 设置覆盖默认的User模型,其值引用一个自定义的模型。

AUTH_USER_MODEL = "app01.UserInfo"

  上面的值表示Django应用的名称(必须位于INSTALLLED_APPS中)和你想使用的User模型的名称。

注意:在创建任何迁移或者第一次运行 manager.py migrate 前设置 AUTH_USER_MODEL

  设置AUTH_USER_MODEL数据库结构有很大的影响。改变了一些会使用到的表格,并且会影响到一些外键和多对多关系的构造。在你有表格被创建后更改此设置是不被 makemigrations 支持的,并且会导致你需要手动修改数据库结构,从旧用户表中导出数据,可能重新应用一些迁移。

3、数据迁移及创建超级用户

  1. $ python3 manage.py makemigrations
  2. $ python3 manage.py migrate

  这里遇到了一个问题:创建项目时没有创建应用,手动通过manage.py startapp user创建子项目,修改AUTH_USER_MODEL后执行makemigrations一直报错,找不到app01。

  创建两个超级用户:

MacBook-Pro:MRBS hqs$ python3 manage.py createsuperuser
Username: yuan
Password:yuan1234

MacBook-Pro:MRBS hqs$ python3 manage.py createsuperuser
Username: alex
Password:alex1234

三、系统登录login

urls.py:

  1. from django.contrib import admin
  2. from django.urls import path
  3. from app01 import views
  4. urlpatterns = [
  5. path('admin/', admin.site.urls),
  6. path('login/', views.login),
  7. path('index/', views.index),
  8. path('book/', views.book),
  9. ]

简单login.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="" method="post">
  9. 用户名:<input type="text" name="user">
  10. 密码:<input type="password" name="pwd">
  11. <input type="submit">
  12. </form>
  13. </body>
  14. </html>

login视图函数:

  1. from django.shortcuts import render, redirect
  2. # Create your views here.
  3. from django.contrib import auth
  4. def login(request):
  5. if request.method == "POST":
  6. user = request.POST.get("user")
  7. pwd = request.POST.get("pwd")
  8. user = auth.authenticate(username=user, password=pwd)
  9. if user:
  10. # 登录成功
  11. auth.login(request, user) # 注册request.user,可以拿到登录用户对象所有信息
  12. redirect("/index/")
  13. return render(request, "login.html")

  注意:auth模块的authenticate()方法,提供了用户认证,如果认证信息有效,会返回一个  User  对象;如果认证失败,则返回None。

四、index部分

1、引入admin组件(后台数据管理组件)并完成admin注册

admin.py:

  1. from django.contrib import admin
  2. # Register your models here.
  3. from app01.models import *
  4. admin.site.register(UserInfo)
  5. admin.site.register(Book)
  6. admin.site.register(Room)

2、在数据库添加数据

  

  

3、index视图函数数据处理和index.html模板渲染

def index(request):
    # 取当前日期
    date = datetime.datetime.now().date()
    print(date)  # 2018-08-17
    # 取预约日期,没有指定取当前日期
    book_date = request.GET.get("book_date", date)
    print(book_date)  # 2018-08-17

    # 拿到预定表中的时段
    time_choices = Book.time_choices
    # 拿到所有的会议室
    room_list = Room.objects.all()
    # 拿到预定信息
    book_list = Book.objects.filter(date=boo
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/675917
推荐阅读
相关标签
  

闽ICP备14008679号