Python-S9—Day86-ORM项目实战之会议室预定相关
01 会议室预定1
02 会议室预定2
03 会议室预定3
04 会议室预定4
05 会议室预定5
06 会议室预定6
01 会议室预定1
1.1 项目的架构目录;
1.2 使用Pycharm创建Django项目:MRBS并建立引用app01(Django版本指向全局解释器,为Django =“1.11.1”)
1.3 settings.py中配置STATICFILES_DIRS以及AUTH_USER_DIRS
AUTH_USER_MODEL = "app01.UserInfo"
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
1.4 models.py中配置ORM并在admin.py中进行注册;
from django.db import models # Create your models here.
from django.db import models
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):
tel = models.CharField(max_length=32) class Room(models.Model):
"""
会议室表;
"""
caption = models.CharField(max_length=32)
num = models.IntegerField() # 容纳的人数; def __str__(self):
return self.caption class Book(models.Model):
"""
会议室预定信息;
"""
user = models.ForeignKey("UserInfo", on_delete=models.CASCADE) # 级联删除;
room = models.ForeignKey("Room", on_delete=models.CASCADE)
date = models.DateField()
time_choices = (
(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"),
)
time_id = models.IntegerField(choices=time_choices) # class Meta:
unique_together = (
('room', 'date', 'time_id')
) # 联合唯一! def __str__(self):
return str(self.user) + "预定了" + str(self.room)
1.5 配置urls.py;
"""MRBS URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^index/', views.index),
]
1.6 编写views.py视图函数;
from django.shortcuts import render, redirect # Create your views here.
from django.contrib import auth
from .models import *
import datetime def login(request):
if request.method == "POST":
user = request.POST.get('user')
pwd = request.POST.get('pwd')
user = auth.authenticate(username=user, password=pwd)
if user:
auth.login(request, user) # request.user
return redirect("/index/")
return render(request, "login.html") def index(request):
date = datetime.datetime.now().date()
book_date = request.GET.get("book_date", date)
time_choices = Book.time_choices
room_list = Room.objects.all()
book_list = Book.objects.filter(date=book_date) htmls = ""
for room in room_list:
htmls += "<tr><td>{}({})</td>".format(room.caption, room.num)
for time_choice in time_choices:
flag = False
for book in book_list:
if book.room.pk == room.pk and book.time_id == time_choice[0]:
flag = True
break # 意味着这个单元格已经被预定;
if flag:
if request.user.pk == book.user.pk:
htmls += "<td class = 'active' room_id={} time_id={} >{}</td>".format(room.pk, time_choice[0],
book.user)
else:
htmls += "<td class = 'another_active' room_id={} time_id={} >{}</td>".format(room.pk,
time_choice[0],
book.user)
else:
htmls += "<td room_id={} time_id={} ></td>".format(room.pk, time_choice[0],
)
htmls += "</tr>" print(htmls)
return render(request, "index.html", locals())
1.7 编写templates;
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
<script src="/static/js/jquery-1.12.4.min.js"></script>
<script src="/static/datetimepicker/bootstrap-datetimepicker.min.js"></script>
<script src="/static/datetimepicker/bootstrap-datetimepicker.zh-CN.js"></script>
<style>
.active {
background-color: green !important;
color: white;
} .another_active {
background-color: #2b669a;
color: white;
} .td_active {
background-color: lightblue;
color: white;
}
</style>
</head>
<body>
<h3>会议室预定</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>会议室/时间</th>
{% for time_choice in time_choices %}
<th>{{ time_choice.1 }}</th>
{% endfor %}
</tr> </thead>
<tbody>
{{ htmls|safe }}
</tbody>
</table>
</body>
</html>
1.8 创建static目录并添加jquery、Bootstrap以及datetimerpicker;
1.9 基本的页面展示如下:
02 会议室预定2
03 会议室预定3
04 会议室预定4
05 会议室预定5
06 会议室预定6
Python-S9—Day86-ORM项目实战之会议室预定相关的更多相关文章
- Python爬虫开发与项目实战
Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...
- Python爬虫开发与项目实战pdf电子书|网盘链接带提取码直接提取|
Python爬虫开发与项目实战从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言与HTML基础知识引领读者入门,之后根据当前风起云涌的云计算.大数据热潮,重点讲述了云计算的相关内容及其在爬虫中的应 ...
- python工业互联网监控项目实战5—Collector到opcua服务
本小节演示项目是如何从连接器到获取Tank4C9服务上的设备对象的值,并通过Connector服务的url返回给UI端请求的.另外,实际项目中考虑websocket中间可能因为网络通信等原因出现中断情 ...
- python工业互联网监控项目实战4—python opcua
前面章节我们采用OPC作为设备到上位的信息交互的协议,本章我们介绍跨平台的OPC UA.OPC作为早期的工业通信规范,是基于COM/DCOM的技术实现的,用于设备和软件之间交换数据,最初,OPC标准仅 ...
- python金融反欺诈-项目实战
python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...
- python工业互联网监控项目实战2—OPC
OPC(OLE for Process Control)定义:指为了给工业控制系统应用程序之间的通信建立一个接口标准,在工业控制设备与控制软件之间建立统一的数据存取规范.它给工业控制领域提供了一种标准 ...
- python数据分析美国大选项目实战(三)
项目介绍 项目地址:https://www.kaggle.com/fivethirtyeight/2016-election-polls 包含了2015年11月至2016年11月期间对于2016美国大 ...
- Python工业互联网监控项目实战3—websocket to UI
本小节继续演示如何在Django项目中采用早期websocket技术原型来实现把OPC服务端数据实时推送到UI端,让监控页面在另一种技术方式下,实时显示现场设备的工艺数据变化情况.本例我们仍然采用比较 ...
- Python轻松入门到项目实战-实用教程
本课程完全基于Python3讲解,针对广大的Python爱好者与同学录制.通过本课程的学习,可以让同学们在学习Python的过程中少走弯路.整个课程以实例教学为核心,通过对大量丰富的经典实例的讲解.让 ...
随机推荐
- 【ros depthimage_to_laser kinect2】
kinect2的深度图可以转换成激光来用,使用depthimage_to_laser 这个tf是用来给rviz显示的 1)开启kinect2 rosrun kinect2_bridge kinect2 ...
- python super用法
普通继承 class FooParent(object): def __init__(self): self.parent = 'I\'m the parent.' print 'Parent' de ...
- 使用OpenFileDialog组件打开对话框
实现效果: 知识运用: OpenFileDialog组件的ShowDialog方法 public DialogResult Show () //返回枚举值 DialogRrsult.OK 或 Di ...
- Java MD5加密算法工具类
MD5.java package util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExcep ...
- SQL 值得记住的点
概要 记录在学习过程中,遇到的不懂且需要掌握的知识点.主要基于 MySQL. 汇总 replace 函数 删除重复 取子串 substr 项连接 ...
- Bootstrap历练实例:弹出框(popover)事件
事件 下表列出了弹出框(Popover)插件中要用到的事件.这些事件可在函数中当钩子使用. 事件 描述 实例 show.bs.popover 当调用 show 实例方法时立即触发该事件. $('#my ...
- c++ question 003 求两数大者?
#include <iostream>using namespace std; int main(){ //求两数中的大者? int a,b; cin>>a>>b; ...
- 1045: [HAOI2008] 糖果传递
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4897 Solved: 2457[Submit][Status][Discuss] Descript ...
- Windows 下编辑 hosts 文件
hosts 文件目录: C:\WINDOWS\system32\drivers\etc\hosts hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应 ...
- SpringMVC URL模板模式映射
使用@RequestMaping和@PathVariable 组合使用 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可 ...