一个基于Django的写字楼管理系统实现方案

打印 上一主题 下一主题

主题 1788|帖子 1788|积分 5366

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个基于Django的写字楼管理系统实现方案

用户现在必要我用Django来编写一个写字楼管理系统的Web版本,要求包罗增编削查写字楼的HTML页面,视频管理功能,本地化部署,以及职员权限管理,包含完整的代码结构和功能实现:
1. 项目结构

首先,用户之前问过用Python的Flask和Spring Boot实现雷同系统,现在转向Django。这意味着我要提供一个完整的Django项目结构,包含模子、视图、模板以及权限管理。用户还特别提到了视频管理和权限管理,这两个是新增的功能点,必要特别注意。
bash
复制
  1. office_management/
  2. ├── office/
  3. │   ├── migrations/
  4. │   ├── templates/
  5. │   │   ├── buildings/
  6. │   │   │   ├── list.html
  7. │   │   │   ├── detail.html
  8. │   │   │   ├── form.html
  9. │   │   ├── videos/
  10. │   │   │   ├── video_list.html
  11. │   │   ├── registration/
  12. │   │   │   ├── login.html
  13. │   │   │   ├── register.html
  14. │   ├── models.py
  15. │   ├── views.py
  16. │   ├── admin.py
  17. │   ├── urls.py
  18. ├── config/
  19. │   ├── settings.py
  20. │   ├── urls.py
  21. ├── media/
  22. │   ├── videos/
  23. ├── static/
  24. ├── manage.py
复制代码
2. 数据库模子 (models.py)

models.py代码,定义了简朴三哥权限,管理员,普通员工和租户
数据库方面,用户之前使用过SQLite和MySQL,Django默认使用SQLite,但也可以设置为使用其他数据库。考虑到本地化部署,可能继续使用SQLite简化设置,但用户如果有MySQL的需求,也必要在settings.py中设置。


  1. from django.db import models
  2. from django.contrib.auth.models import AbstractUser
  3. class CustomUser(AbstractUser):
  4.     ROLES = (
  5.         ('admin', '管理员'),
  6.         ('staff', '普通员工'),
  7.         ('tenant', '租户')
  8.     )
  9.     role = models.CharField(max_length=10, choices=ROLES, default='staff')
  10.     phone = models.CharField(max_length=20, blank=True)
  11. class Building(models.Model):
  12.     name = models.CharField(max_length=100)
  13.     address = models.TextField()
  14.     floors = models.PositiveIntegerField()
  15.     area = models.DecimalField(max_digits=10, decimal_places=2)
  16.     manager = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True)
  17.     created_at = models.DateTimeField(auto_now_add=True)
  18. class BuildingVideo(models.Model):
  19.     building = models.ForeignKey(Building, on_delete=models.CASCADE)
  20.     title = models.CharField(max_length=200)
  21.     video_file = models.FileField(upload_to='videos/')
  22.     description = models.TextField(blank=True)
  23.     upload_date = models.DateTimeField(auto_now_add=True)
复制代码
  1. [/code] [size=3]3. 视图逻辑 (views.py)[/size]
  2. 写字楼的list列表,
  3. 接下来是增编削查功能。Django的通用视图(Generic Views)如ListView、CreateView、UpdateView、DeleteView可以快速实现这些功能。必要创建相应的模板,比如building_list.html、building_form.html等,并在视图中处理表单提交。
  4. [code]from django.contrib.auth.decorators import login_required, permission_required
  5. from django.views.generic import ListView, CreateView, UpdateView, DeleteView
  6. from django.urls import reverse_lazy
  7. from .models import Building, BuildingVideo
  8. class BuildingListView(ListView):
  9.     model = Building
  10.     template_name = 'buildings/list.html'
  11.     context_object_name = 'buildings'
  12.     def get_queryset(self):
  13.         if self.request.user.role == 'tenant':
  14.             return Building.objects.filter(manager=self.request.user)
  15.         return super().get_queryset()
  16. @permission_required('office.add_building')
  17. class BuildingCreateView(CreateView):
  18.     model = Building
  19.     fields = ['name', 'address', 'floors', 'area', 'manager']
  20.     template_name = 'buildings/form.html'
  21.     success_url = reverse_lazy('building-list')
  22. class VideoListView(ListView):
  23.     model = BuildingVideo
  24.     template_name = 'videos/video_list.html'
  25.     def get_queryset(self):
  26.         return BuildingVideo.objects.filter(building_id=self.kwargs['pk'])
复制代码
  1. [/code] [size=3]4. 模板示例 (list.html)[/size]
  2. 可以通过浏览器的list.html
  3. [code]{% extends "base.html" %}
  4. {% block content %}
  5. <h2>写字楼管理</h2>
  6. {% if perms.office.add_building %}
  7. <a href="{% url 'building-create' %}" class="btn btn-primary mb-3">新增楼宇</a>
  8. {% endif %}
  9. <table class="table table-hover">
  10.     <thead>
  11.         <tr>
  12.             <th>名称</th>
  13.             <th>地址</th>
  14.             <th>楼层</th>
  15.             <th>面积</th>
  16.             <th>操作</th>
  17.         </tr>
  18.     </thead>
  19.     <tbody>
  20.         {% for building in buildings %}
  21.         <tr>
  22.             <td>{{ building.name }}</td>
  23.             <td>{{ building.address }}</td>
  24.             <td>{{ building.floors }}</td>
  25.             <td>{{ building.area }}㎡</td>
  26.             <td>
  27.                 <a href="{% url 'building-detail' building.id %}" class="btn btn-info btn-sm">详情</a>
  28.                 {% if perms.office.change_building %}
  29.                 <a href="{% url 'building-update' building.id %}" class="btn btn-warning btn-sm">编辑</a>
  30.                 {% endif %}
  31.             </td>
  32.         </tr>
  33.         {% endfor %}
  34.     </tbody>
  35. </table>
  36. {% endblock %}
复制代码
  1. [/code] 运行 HTML
  2. [size=3]5. 权限设置 (settings.py)[/size]
  3. 权限管理方面,Django内置了用户认证系统,可以在此底子上扩展。用户可能必要不同角色,比如管理员和普通用户,管理员可以管理写字楼信息,普通用户只能查看。可能必要使用Django的组(Groups)和权限(Permissions),大概自定义用户模子来添加角色字段。
  4. 设置url的权限设置
  5. [code]AUTH_USER_MODEL = 'office.CustomUser'
  6. LOGIN_URL = '/login/'
  7. LOGIN_REDIRECT_URL = '/buildings/'
  8. LOGOUT_REDIRECT_URL = '/'
  9. MEDIA_URL = '/media/'
  10. MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
复制代码
  1. [/code] [size=3]6. URL路由设置 (urls.py)[/size]
  2. url定义路由
  3. [code]from django.urls import path
  4. from office import views
  5. urlpatterns = [
  6.     path('buildings/', views.BuildingListView.as_view(), name='building-list'),
  7.     path('building/create/', views.BuildingCreateView.as_view(), name='building-create'),
  8.     path('building/<int:pk>/videos/', views.VideoListView.as_view(), name='building-videos'),
  9.    
  10.     # 视频管理
  11.     path('video/upload/', views.VideoUploadView.as_view(), name='video-upload'),
  12.     path('video/<int:pk>/delete/', views.VideoDeleteView.as_view(), name='video-delete'),
  13.    
  14.     # 用户认证
  15.     path('accounts/', include('django.contrib.auth.urls')),
  16.     path('register/', views.RegisterView.as_view(), name='register'),
  17. ]
复制代码
  1. [/code] [size=3]7. 视频管理功能[/size]
  2. 视频管理部门必要单独的模子,可能包罗标题、形貌、视频文件、上传时间、关联的写字楼等字段。在模板中,必要上传视频的表单,并在详情页显示视频列表,可能还必要播放视频的功能,可以使用HTML5的video标签。
  3. 视频管理部门,我必要考虑怎样存储视频文件。Django通常使用FileField和ImageField来处理文件上传,但视频文件较大,可能必要设置MEDIA_ROOT和MEDIA_URL,同时考虑使用Django的静态文件服务大概更好的生产环境方案,比如Nginx来处理静态文件。不外用户提到本地化部署,可能临时不必要考虑生产环境,所以先用Django的开辟服务器处理上传文件。
  4. [code]# views.py
  5. class VideoUploadView(LoginRequiredMixin, CreateView):
  6.     model = BuildingVideo
  7.     fields = ['building', 'title', 'video_file', 'description']
  8.     template_name = 'videos/upload.html'
  9.    
  10.     def form_valid(self, form):
  11.         form.instance.uploader = self.request.user
  12.         return super().form_valid(form)
  13. class VideoDeleteView(PermissionRequiredMixin, DeleteView):
  14.     model = BuildingVideo
  15.     permission_required = 'office.delete_buildingvideo'
  16.     success_url = reverse_lazy('building-list')
复制代码
  1. [/code] [size=3]8. 权限管理装饰器示例[/size]
  2. 权限管理必要装饰器,比如@login_required和@permission_required,来控制访问权限。用户注册和登录可以使用Django自带的auth模块,大概自定义用户模子。可能必要创建用户组,分配不同的权限,比如管理员组有增编削查的权限,普通用户只有查看权限。
  3. [code]python
  4. 复制
  5. # 在视图中使用
  6. @method_decorator(permission_required('office.add_building'), name='dispatch')
  7. class BuildingCreateView(CreateView):
  8.     ...
  9. # 在模板中检查权限
  10. {% if perms.office.delete_building %}
  11. <button class="btn btn-danger">删除</button>
  12. {% endif %}
复制代码
9. 运行部署步调

必要确保代码示例精确,包罗模子定义、视图函数、模板中的表单和权限判定,以及URL设置。同时,给出运行步调,安装依赖,迁移数据库,创建超级用户等。

  1)安装依赖

        pip install django pillow
  2)数据库迁移

python manage.py makemigrations
python manage.py migrate
  3)创建管理员

 python manage.py createsuperuser
输入用户admin,email地址为admin@admin.com
输入密码为admin123 ,确定后就可以进入后台
 4)运行开辟服务器

本地化部署方面,必要确保settings.py中的ALLOWED_HOSTS设置,DEBUG模式关闭,静态文件收集等。但用户可能只是必要在本地运行,所以临时不必要处理这些生产设置,但必要给出运行步调,比如python manage.py runserver。
 python manage.py runserver
5)访问系统


  1. http://localhost:8000/buildings/
复制代码
10. 功能扩展建议

1)视频播放页面

video.html
  1. <video width="640" controls>
  2.     <source src="{{ video.video_file.url }}" type="video/mp4">
  3.     您的浏览器不支持视频播放
  4. </video>
复制代码
运行 HTML
2)高级权限控制

  1. # 自定义权限类
  2. class IsBuildingManager(permissions.BasePermission):
  3.     def has_object_permission(self, request, view, obj):
  4.         return obj.manager == request.user
复制代码
  1. [/code] [size=1]1)本地化设置[/size]
  2. [code]# settings.py
  3. LANGUAGE_CODE = 'zh-hans'
  4. TIME_ZONE = 'Asia/Shanghai'
  5. USE_I18N = True
  6. USE_L10N = True
复制代码
2)文件上传限定

  1. # 在forms.py中添加验证
  2. class VideoUploadForm(forms.ModelForm):
  3.     class Meta:
  4.         model = BuildingVideo
  5.         fields = '__all__'
  6.    
  7.     def clean_video_file(self):
  8.         file = self.cleaned_data['video_file']
  9.         if file.size > 1024*1024*500:  # 500MB限制
  10.             raise ValidationError("视频文件大小不能超过500MB")
  11.         return file
复制代码
总结

这个实现方案包含以下核心功能:

  • 完整的RBAC权限管理系统
  • 楼宇信息CRUD操作
  • 视频文件上传和管理
  • 用户角色区分(管理员/员工/租户)
  • 本地化中文支持
  • 响应式Bootstrap界面
  • 文件上传和媒体管理
  • Django Admin后台管理
可根据实际需求通过以下方式扩展:


  • 添加合同管理模块
  • 集成报表生乐成能
  • 添加消息通知系统
  • 实现API接口
  • 集成第三方存储(如阿里云OSS)
  • 添加工作流审批功能

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表