python的web框架---Django项目
Django项目之会议室预预订:
界面效果展示:
1、创建超级管理员,实现预定界面功能


2、预定界面:

(一)基于pymysql设计数据表结构,理清前后端与用户交互逻辑。(用户表,会议室表,预定内容存储表)
1、settings设置默认数据库为mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'dbname',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
2、model表设计:
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) 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(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'),
)
time_id = models.IntegerField(time_choice) class Meta:
unique_together = (
("room","date","time_id"),
) def __str__(self):
return "{}预定了{}".format(self.user,self.room)
2、梳理urls路由系统、利用内置的auth验证模块编写用户登录。利用js在后端处理用户操作,ajax技术发送request数据。
from django.shortcuts import render,redirect,HttpResponse
from django.contrib import auth
from app01 import models
import datetime
import json
# Create your views here. def login(request): #设置登录处理函数
if request.method == "POST": username = request.POST.get("username")
pwd = request.POST.get("password")
user = auth.authenticate(username=username,password=pwd)
if user:
auth.login(request,user)
return redirect("/index/") return render(request,"login.html",locals()) date = datetime.datetime.now().date() def index(request): if not request.user.is_authenticated:
return redirect("/login/") book_date = request.GET.get("book_date",date) time_choice=models.Book.time_choice
room_obj = models.Room.objects.all()
book_obj = models.Book.objects.filter(date=date) htmls = ""
for room in room_obj:
htmls += "<tr><td>{}</td>".format(room) for time in time_choice: is_choose = False for book in book_obj:
if book.time_id == time[0] and book.room_id == room.pk: #判断是否有人预订
is_choose = True
break if is_choose:
if request.user.pk == book.user_id: #在python代码层面处理模板json数据
51 htmls += "<td class='my_active item' time_id={} room_id={}>{}</td>".format(time[0],room.pk,book.user)
else:
htmls += "<td class='active item' time_id={} room_id={}>{}</td>".format(time[0],room.pk,book.user)
else:
htmls += "<td class='item' time_id={} room_id={}></td>".format(time[0],room.pk)
htmls += "</tr>"
return render(request,"index.html",locals())
def manage(request):
if request.method == "POST":
data = json.loads(request.POST.get("post_data"))
print(data)
for room_id,time_id_list in data["del"].items():
for time_id in time_id_list:
models.Book.objects.filter(user_id=request.user.pk,room_id=room_id,time_id=time_id,date=date).delete()
for room_id,time_id_list in data["add"].items():
for time_id in time_id_list:
models.Book.objects.create(user_id=request.user.pk,room_id=room_id,time_id=time_id,date=date)
return HttpResponse(json.dumps("ok"))
3、编写templates模板,利用bootstrap丰富起始界面,在python代码层面处理模板json数据。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
<style>
.my_active{background-color: red}
.active{background-color: silver}
.temp_active{background-color: #2aabd2}
</style>
</head>
<body> <h1>会议室预订</h1> <table class="table table-bordered">
<tr>
<th>会议室/时间</th>
{% for time in time_choice %}
<th>{{ time.1 }}</th>
{% endfor %}
</tr>
{{ htmls|safe }}
</table>
<button>保存</button>
{% csrf_token %} <script src="/static/jquery.js"></script>
<script src="/static/bootstrap/js/bootstrap.js"></script>
<script> var post_data = {"add":{},"del":{}}; //为td标签绑定点击事件
$(".item").click(function(){ var time_id = $(this).attr("time_id");
var room_id = $(this).attr("room_id"); if($(this).hasClass("my_active")){ //如果是登录人预订的时间
$(this).removeClass("my_active");
$(this).text(""); if(post_data["del"][room_id]){
post_data["del"][room_id].push(time_id)
}else{
post_data["del"][room_id] = [time_id,];
} }else if($(this).hasClass("active")){ //如果是别人预订的时间
alert("已经被预订!") }else if($(this).hasClass("temp_active")){
$(this).removeClass("temp_active")
$(this).text("")
post_data["add"][room_id].splice(jQuery.inArray(time_id,post_data["add"][room_id]),1) }else{ //如果没人预订
$(this).addClass("temp_active");
$(this).text("{{ request.user.username }}") if(post_data["add"][room_id]){
post_data["add"][room_id].push(time_id)
}else{
post_data["add"][room_id] = [time_id,];
}
}
console.log(post_data)
}) var csrf = $("[name='csrfmiddlewaretoken']").val() $("button").click(function(){
$.ajax({
url:"/manage/",
type:"post",
data:{
post_data:JSON.stringify(post_data),
csrfmiddlewaretoken:csrf,
},
dataType:"json",
success:function(arg){
console.log(arg)
location.href = "" }
})
})
</script>
</body>
</html>
python的web框架---Django项目的更多相关文章
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
- Python 17 web框架&Django
本节内容 1.html里面的正则表达式 2.web样式简介 3.Django创建工程 Html里的正则表达式 test 用来判断字符串是否符合规定的正则 rep.test('....') ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Python编程Web框架 :Django 从入门到精通
Django是一个高级别的Python Web框架,它鼓励快速开发和干净实用的设计. 现在我们开始学习它. Django学习之 第一章:Django介绍 Django学习之 第二章:Django快速上 ...
- 在python的web框架Django中使用SQL Server
在pycharm中安装 安装pyodbc和Django——pyodbc是一个用python写的ODBC引擎 安装Django-pyodbc-azure 在后方网址中查 ...
- python运维开发(十七)----jQuery续(示例)web框架django
内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定,dom绑定在form表单提交按钮地方都会绑定一个onclick事件,所有查看网站的人都能看到代码 ...
- 利用python web框架django实现py-faster-rcnn demo实例
操作系统.编程环境及其他: window7 cpu python2.7 pycharm5.0 django1.8x 说明:本blog是上一篇blog(http://www.cnblogs.co ...
- Python Flask Web 框架入门
Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...
随机推荐
- RecyclerView notifyDataSetChanged无效问题
使用notifyDataSetChanged方法更新列表数据时, 一定要保证数据为同个对象(hashCode要一致) 所以重新刷新数据列表时, 不能使用 List list = mlist: 应该使用 ...
- POJ-1020-Anniversary Cake
链接:https://vjudge.net/problem/POJ-1020 题意: 给一个宽为s的正方形,再给n个变长为an的小正方形, 判断是否能将这n个小正方形完全填充到这个大正方形里面. 思路 ...
- 【aspnetcore】在过滤器(Filter)中使用注入服务(ServiceFilter|TypeFilter)
在MVC中,AOP是很常用的功能,我们经常会使用如 ActionFilter,IAuthorizeFilter 等描述对Controller和Action进行约束和扩展,一般做法如下: public ...
- 105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
给定一棵树的前序遍历与中序遍历,依据此构造二叉树.注意:你可以假设树中没有重复的元素.例如,给出前序遍历 = [3,9,20,15,7]中序遍历 = [9,3,15,20,7]返回如下的二叉树: ...
- Spark Mllib里如何将trainDara训练数据的分类特征字段转换为数值字段(图文详解)
不多说,直接上干货! 字段3 是分类特征字段,但是呢,在分类算法里不能直接用.所以,必须要转换为数值字段才能够被分类算法使用. 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的 ...
- Unity Shader入门精要学习笔记 - 第2章 渲染流水线
来源作者:candycat http://blog.csdn.net/candycat1992/article/ 2.1 综述 渲染流水线的最终目的在于生成或者说是渲染一张二维纹理,即我们在电脑屏 ...
- 实战:liunx定时清理日志脚本
参考https://blog.csdn.net/qq_39291929/article/details/79054452 1.需求:我们在 /var/log下面有 EmcsYn.log 和 ...
- oracle删除数据库表空间
步骤一: 删除user drop user ×× cascade 说明: 删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的. 步骤二: 删 ...
- AJPFX关于线程创建的方式
创建线程的第一种方式:继承Thread ,由子类复写run方法. 步骤: 1,定义类继承Thread类: 2,目的是复写run方法,将要让线程运行的代码都存储到run方法中: 3,通过创建Thread ...
- 一样的Java,不一样的HDInsight大数据开发体验
大数据的热潮一直居高不下,每个人都在谈.你也许不知道,早些年这个领域可是有个非常「惹眼球」的段子: 1首先开始科普 什么是 HDInsight Azure HDInsight 是 Hortonwork ...