django(图书管理系统)
一、表的设计

from django.db import models # Create your models here. class Book(models.Model):
title = models.CharField(max_length=32, verbose_name='书名')
price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name='价格')
publish_date = models.DateField(auto_now_add=True, verbose_name='出版时间')
publish = models.ForeignKey(to='Publish')
author = models.ManyToManyField(to='Author') class Publish(models.Model):
name = models.CharField(max_length=32, verbose_name='出版社名')
addr = models.CharField(max_length=64, verbose_name='出版社地址')
email = models.EmailField(verbose_name='邮箱地址') class Author(models.Model):
name = models.CharField(max_length=32, verbose_name='作者名')
age = models.IntegerField(verbose_name='年龄')
author_detail = models.OneToOneField(to='AuthorDetail') class AuthorDetail(models.Model):
phone = models.BigIntegerField(verbose_name='手机号')
addr = models.CharField(max_length=64, verbose_name='作者住址')
models.py
二、路由层(url.py)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home, name='home'),
url(r'^book/list/', views.book_list, name='book_list'),
# 书籍增加
url(r'^book/add/', views.book_add, name='book_add'),
# 书籍的编辑
url(r'^book/edit/(?P<edit_id>\d+)', views.book_edit, name='book_edit'),
# 书籍的删除
url(r'^book/delete/(\d+)', views.book_delete, name='book_delete')
]
三、视图层(views.py)
def home(request):
return render(request, 'home.html') def book_list(request):
book_query = models.Book.objects.all()
return render(request, 'book_list.html', locals()) # 书籍增加
def book_add(request):
if request.method == 'POST':
print(request.POST)
title = request.POST.get('title')
price = request.POST.get('price')
publish_date = request.POST.get('publish_date')
publish_id = request.POST.get('publish')
author_list = request.POST.getlist('author')
# 操作数据库存储数据
# 书籍表
book_obj = models.Book.objects.create(title=title, price=price, publish_date=publish_date,
publish_id=publish_id)
# 书籍与作者的关系表
book_obj.author.add(*author_list) # *将列表打散
# 跳转到书籍的展示页面
'''
redirect括号内可以直接写url
也可以直接写别名 但是别名需要额外的参数,就必须使用reverse解析
'''
return redirect('book_list')
# 获取当前系统所有的出版社和作者信息
publish_queryset = models.Publish.objects.all()
author_queryset = models.Author.objects.all()
return render(request, 'book_add.html', locals()) def book_edit(request, edit_id):
if request.method == 'POST':
title = request.POST.get('title')
price = request.POST.get('price')
publish_date = request.POST.get('publish_date')
publish_id = request.POST.get('publish')
author_list = request.POST.getlist('author')
models.Book.objects.filter(pk=edit_id).update(title=title, price=price, publish_date=publish_date,
publish_id=publish_id)
# 修改第三张表
book_obj = models.Book.objects.filter(pk=edit_id).first()
book_obj.author.set(author_list)
return redirect('book_list')
# 获取当前用户想要编辑的书籍对象,展示给用户看
edit_obj = models.Book.objects.filter(pk=edit_id).first()
publish_queryset = models.Publish.objects.all()
author_queryset = models.Author.objects.all()
return render(request, 'book_edit.html', locals()) def book_delete(request, delete_id):
models.Book.objects.filter(pk=delete_id).delete()
return redirect('book_list')
四、首页页面

def home(request):
return render(request, 'home.html') def book_list(request):
book_query = models.Book.objects.all()
return render(request, 'book_list.html', locals()) # 书籍增加
def book_add(request):
if request.method == 'POST':
print(request.POST)
title = request.POST.get('title')
price = request.POST.get('price')
publish_date = request.POST.get('publish_date')
publish_id = request.POST.get('publish')
author_list = request.POST.getlist('author')
# 操作数据库存储数据
# 书籍表
book_obj = models.Book.objects.create(title=title, price=price, publish_date=publish_date,
publish_id=publish_id)
# 书籍与作者的关系表
book_obj.author.add(*author_list) # *将列表打散
# 跳转到书籍的展示页面
'''
redirect括号内可以直接写url
也可以直接写别名 但是别名需要额外的参数,就必须使用reverse解析
'''
return redirect('book_list')
# 获取当前系统所有的出版社和作者信息
publish_queryset = models.Publish.objects.all()
author_queryset = models.Author.objects.all()
return render(request, 'book_add.html', locals()) def book_edit(request, edit_id):
if request.method == 'POST':
title = request.POST.get('title')
price = request.POST.get('price')
publish_date = request.POST.get('publish_date')
publish_id = request.POST.get('publish')
author_list = request.POST.getlist('author')
models.Book.objects.filter(pk=edit_id).update(title=title, price=price, publish_date=publish_date,
publish_id=publish_id)
# 修改第三张表
book_obj = models.Book.objects.filter(pk=edit_id).first()
book_obj.author.set(author_list)
return redirect('book_list')
# 获取当前用户想要编辑的书籍对象,展示给用户看
edit_obj = models.Book.objects.filter(pk=edit_id).first()
publish_queryset = models.Publish.objects.all()
author_queryset = models.Author.objects.all()
return render(request, 'book_edit.html', locals()) def book_delete(request, delete_id):
models.Book.objects.filter(pk=delete_id).delete()
return redirect('book_list')
home.html
五、图书展示页面(book_list.html)
{% extends 'home.html' %}
{% block content %}
<a href="{% url 'book_add' %}" class="btn-success">添加</a>
<br>
<table class="table table-hover table-striped">
<thead>
<tr>
<th>ID</th>
<th>书名</th>
<th>价格</th>
<th>出版日期</th>
<th>出版社</th>
<th>作者</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for book_obj in book_query %}
<tr>
<td>{{ book_obj.pk }}</td>
<td>{{ book_obj.title }}</td>
<td>{{ book_obj.price }}</td>
<td>{{ book_obj.publish_date|date:'Y-m-d' }}</td>
<td>{{ book_obj.publish.name }}</td>
<td>
{% for author_obj in book_obj.author.all %}
{% if forloop.last %}
{{ author_obj.name }}
{% else %}
{{ author_obj.name }},
{% endif %}
{% endfor %}
</td>
<td>
<a href="{% url 'book_edit' book_obj.pk %}" class="btn btn-primary btn-xs">编辑</a>
<a href="{% url 'book_delete' book_obj.pk %}" class="btn btn-primary btn-xs">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
六 图书增加(book_add.html)
{% extends 'home.html' %}
{% block content %}
<h1 class="text-center">书籍添加</h1>
<form action="" method="post">
<p>书名:
<input type="text" name="title" class="form-control">
</p>
<p>价格:
<input type="text" name="price" class="form-control">
</p>
<p>出版日期:
<input type="date" name="publish_date" class="form-control">
</p>
<p>出版社:
<select name="publish" id="" class="form-control">
{% for publish_obj in publish_queryset %}
<option value="{{ publish_obj.pk }}">{{ publish_obj.name }}</option>
{% endfor %}
</select>
</p>
<p>作者:
<select name="author" id="" multiple class="form-control">
{% for author_obj in author_queryset %}
<option value="{{ author_obj.pk }}">{{ author_obj.name }}</option>
{% endfor %}
</select>
</p>
<input type="submit" value="新增" class="btn btn-primary btn-block">
</form>
{% endblock %}
七 图书编辑(book_edit.html)
{% extends 'home.html' %}
{% block content %}
<h1 class="text-center">书籍编辑</h1>
<form action="" method="post">
<p>书名:
<input type="text" name="title" class="form-control" value="{{ edit_obj.title }}">
</p>
<p>价格:
<input type="text" name="price" class="form-control" value="{{ edit_obj.price }}">
</p>
<p>出版日期:
<input type="date" name="publish_date" class="form-control"
value="{{ edit_obj.publish_date|date:'Y-m-d' }}">
</p>
<p>出版社:
<select name="publish" id="" class="form-control">
{% for publish_obj in publish_queryset %}
{# 针对当前书籍对象的出版社应该默认选中 #}
{% if edit_obj.publish == publish_obj %}
<option value="{{ publish_obj.pk }}" selected>{{ publish_obj.name }}</option>
{% else %}
<option value="{{ publish_obj.pk }}">{{ publish_obj.name }}</option>
{% endif %}
{% endfor %}
</select>
</p>
<p>作者:
<select name="author" id="" multiple class="form-control">
{% for author_obj in author_queryset %}
{% if author_obj in edit_obj.author.all %}
<option value="{{ author_obj.pk }}" selected>{{ author_obj.name }}</option>
{% else %}
<option value="{{ author_obj.pk }}" >{{ author_obj.name }}</option>
{% endif %}
{% endfor %}
</select>
</p>
<input type="submit" value="确定编辑" class="btn btn-info btn-block">
</form>
{% endblock %}
django(图书管理系统)的更多相关文章
- Django——图书管理系统
基于Django的图书管理系统 1.主体功能 1.列出图书列表.出版社列表.作者列表 2.点击作者,会列出其出版的图书列表 3.点击出版社,会列出旗下图书列表 4.可以创建.修改.删除 图书.作者.出 ...
- Django(图书管理系统1)
day63 内容回顾 1. 单表的增删改查 1. 删和改 1. GET请求 URL传值 1. 格式 ...
- Django图书管理系统(前端对数据库的增删改查)
图书管理系统 出版社的管理 源码位置:https://gitee.com/machangwei-8/learning_materials/tree/master/%E9%A1%B9%E7%9B%AE/ ...
- django 图书管理系统
一.图书管理系统 单表的增删改查 1.创建项目 2.注释掉中间件 就可以提交post 请求 3.配置静态文件 并手动创建static 文件夹存放静态文件 二.具体的数据库配置 1.创建数据库 2. ...
- Django图书管理系统(前端对有外键的数据表增删改查)
图书管理 书籍管理 book name 项目源码位置:https://gitee.com/machangwei-8/learning_materials/tree/master/%E9%A1%B9%E ...
- django图书管理系统实例
首页,其他页面全部继承首页的上半部分 点击发布图书页面 首页点击书名,跳转到图书信息界面,该界面可删除图书 项目结构 #views.py from django.shortcuts import re ...
- Django(图书管理系统2)
day64 内容回顾 1. ORM外键操作 图书表和出版社表 多对一 的关系 # 书 class Book(models.Model): ...
- Django图书管理系统(单表操作)
以下内容需要掌握: Python3 以及前端:HTML,CSS,jQuery,BootStrap,Django,JavaScript 开启Django新项目: 1,settings.py 数据库选择: ...
- Django练习——图书管理系统
Django图书管理系统 创建一个项目 1. django-admin startproject 图书管理 2. cmd 命令终端下创建一个app python manage.py startapp ...
- 在Django中使用ORM创建图书管理系统
一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等 ...
随机推荐
- Go 之烧脑的接口
基本定义 Go 官方对于接口的定义是一句话:An interface type is defined as a set of method signatures. 翻译过来就是,一个接口定义了一组方法 ...
- 同一份代码怎能在不同环境表现不同?记一个可选链因为代码压缩造成的bug
壹 ❀ 引 某一天,CSM日常找我反馈客户紧急工单,说有一个私有部署客户升级版本后,发现一个功能使用不太正常.因为我们公司客户分为两种,一种是SaaS客户,客户侧使用的版本被动跟随主版本变动,而私有部 ...
- Python中矩阵运算(基于numpy包)
1 乘法 在数组中,a * a计算对应元素相乘(矩阵点乘):在矩阵中,A*A计算矩阵乘法 np.multiply()计算对应元素相乘(矩阵点乘) np.dot()计算矩阵乘法 import numpy ...
- 之前练手使用基于gin的go web项目
目录结构: `-- demo |-- cmd | |-- api.go | `-- root.go |-- common | `-- consts | `-- consts.go |-- config ...
- ADVMP 三代壳(vmp加固)原理分析(执行流程)
由于在加壳时插入了System.loadLibrary("advmp");,看一下JNI_OnLoad JNIEXPORT jint JNICALL JNI_OnLoad(Java ...
- 学习go语言编程之常量
什么在常量 在Golang中,常量是指在编译期就已知且不可改变的值. 字面常量 在程序中硬编码的常量值被称为字面常量,如: -12 // 整数类型常量 3.1415926 // 浮点类型常量 3.2+ ...
- Flutter学习(一)——创建一个项目
本文基于 flutter 2.5.1,开发工具 Visual Studio Code. 一.创建 打开 VS Code 点击 View > Command Palette-(快捷键command ...
- OpenCV开发笔记(六十):红胖子8分钟带你深入了解Harris角点检测(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- Html飞机大战(十): 消灭敌机
好家伙,本篇是带着遗憾写完的. 很遗憾,我找了很久,找到了bug但并没有成功修复bug 再上一篇中我们看到 子弹射中了敌机,但是敌机并没有消失,所以这篇我们要来完善这个功能 按照惯例我们来捋一下思路: ...
- VIM初使化
vim ~/.vimrc #设置编码 set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 #显示行号 set number #一个tab为4个空格 ...