- 0 前言
- 1 实现效果及业务流程
- 2 表结构设计和生成
- 2.1 models.py(用户继承AbstractUser)
- 2.2 修改配置文件settings.py,覆盖默认的User模型
- 3 系统登录login
- 4 index部分
- 4.1 引入admin组件(后台数据管理组件)并完成admin注册
- 最后
Hi,同学们好呀,被评为全网最细的丹成学长ヾ(•ω•`)o,今天带大家复盘一个学长帮往届同学做的一个毕业作品
基于Django的会议室预定系统
计算机毕设选题大全及项目分享:
https://blog.csdn.net/WEB_DC/article/details/125563252
1 实现效果及业务流程
业务流程:
- 用户注册
- 用户登录
- 预订会议室
- 退订会议室
- 选择日期;今日以及以后日期
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserInfo(AbstractUser):
tel = models.CharField(max_length=32,verbose_name="电话")
avatar = models.FileField(upload_to="avatars/", default="avatars/timg.jpg", verbose_name="头像")
class Room(models.Model):
"""会议室表"""
caption = models.CharField(max_length=32,verbose_name="会议室名称")
num = models.IntegerField(verbose_name="容纳人数") # 容纳人数
def __str__(self):
return self.caption
class Meta:
verbose_name = "会议室信息"
verbose_name_plural = verbose_name
class Book(models.Model):
"""会议室预订"""
user = models.ForeignKey(to="UserInfo",on_delete=models.CASCADE)
room = models.ForeignKey(to="Room",on_delete=models.CASCADE)
date = models.DateField()
time_choice = (
(1, "8:00"),
(2, "9:00"),
(3, "10:00"),
(4, "11:00"),
(5, "12:00"),
(6, "13:00"),
(7, "14:00"),
(8, "15:00"),
(9, "16:00"),
(10, "17:00"),
(11, "18:00"),
(12, "19:00"),
(13, "20:00"),
(14, "21:00"),
(15, "22:00"),
(16, "23:00"),
)
time_id = models.IntegerField(choices=time_choice)
def __str__(self):
return str(self.user)+"预定了"+str(self.room)
class Meta:
verbose_name = "预定信息"
verbose_name_plural = verbose_name
unique_together = (
("room","date","time_id"), # 这三个字段联合唯一,防止重复预订
)
2.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 系统登录loginurls.py:
from django.conf.urls import url
from django.contrib import admin
from django.views.static import serve
from django.conf import settings
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 用户登录
url(r'^login/',views.acc_login),
# 展示预订信息
url(r'^index/',views.index),
# 极验滑动验证码 获取验证码的url
url(r'^pc-geetest/register', views.get_geetest),
# media相关的路由设置
url(r'^media/(?P.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
# 处理预订请求
url(r'^book/',views.book),
# 首页
url(r'^home/',views.home),
# 注销
url(r'^logout/',views.acc_logout),
# 用户注册
url(r'^reg/',views.reg),
# 临时测试
url(r'^test/',views.test),
# 修改密码
url(r'^change_password/',views.change_password),
]
login.html(使用了滑动验证)
用户登录
欢迎登录会议室预订系统
4 index部分
4.1 引入admin组件(后台数据管理组件)并完成admin注册
from django.contrib import admin
from app01 import models
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy
# Register your models here.
# 配置会议室信息表
class RoomConfig(admin.ModelAdmin):
list_display = ('caption','num')
list_filter=('num',)
search_fields = ('caption','num')
# 配置预订信息表
class BookConfig(admin.ModelAdmin):
list_display = ('user','room','date','time_id')
list_filter = ('user','room','date','time_id')
search_fields = ('user','room','date','time_id')
# 配置用户管理表
class UserProfileAdmin(UserAdmin):
list_display = ('username','last_login','is_superuser','is_staff','is_active','date_joined')
list_filter = ('last_login', 'is_staff', 'date_joined', 'is_active')
search_fields = ('username',)
fieldsets = (
(None,{'fields':('username','password','first_name','last_name','email')}),
(gettext_lazy('用户信息'),{'fields':('username','email','tel','avatar')}),
(gettext_lazy('用户权限'), {'fields': ('is_superuser','is_staff','is_active',
'groups', 'user_permissions')}),
(gettext_lazy('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
admin.site.register(models.Room,RoomConfig)
admin.site.register(models.UserInfo,UserProfileAdmin)
admin.site.register(models.Book,BookConfig)
计算机毕设选题大全及项目分享:
https://blog.csdn.net/WEB_DC/article/details/125563252
最后



