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等 ...
随机推荐
- Power BI 12 DAY
电商平台流量分析 案例练习 参数建模 建模-->新建参数 新建度量值使用SWITCH函数将需要的指标数据化 15.关键指标 = switch([指标选择 值],1,[1.访客数合计],2,[2. ...
- Freaktab将于12月底关闭
出过众多优秀固件的电视盒子论坛Freaktab, 将于2021年12月31日关闭 R.I.P
- 【OpenGL ES】渲染管线
1 前言 渲染管线是指图形渲染流程,涉及到的概念非常多,主要包含图元.片段.光栅化.空间.变换.裁剪.着色器.片段测试.混合等.渲染管线主体流程如下: 为方便读者理解渲染管线,本文将先介绍顶点 ...
- PHP验证码识别实例
PHP验证码识别实例 PHP验证码识别实例,识别的过程包括对图像的二值化.降噪.补偿.切割.倾斜矫正.建库.匹配,最后会提供实例代码,能够直接运行识别. 简述 要识别的验证码相对比较简单,没有粘连字符 ...
- Oracle insert all语句介绍
Oracle 中insert语句的高级用法,INSERT ALL 语句介绍: 1.无条件insert all 全部插入 CREATE TABLE t1(product_id NUMBER, produ ...
- spring事务的传播
目录 事务的传播行为类型 注意事项 关于事务的传播,我们先确定一个场景:方法A调用方法B,方法A可能存在事务,也可能不存在事务,我们这里重点关注方法B上定义的事务传播行为,以及方法B中出现异常时,方法 ...
- QT 无法识别某些字体导致程序启动失败
有用户反馈启动程序时,没有出现 UI 界面,程序跟 "闪退了一样",查看日志,没有发现闪退或者报错异常,后面远程用户电脑并尝试解决 研究分析:在用户电脑上运行 debug 包,会出 ...
- 【Android 逆向】【攻防世界】基础android
1. 下载并安装apk,提示要输入密码 2. apk拖入到jadx中看一下 this.login.setOnClickListener(new View.OnClickListener() { // ...
- MySQL的随机排序(random orderby)
MySQL的随机排序(random orderby)是指在查询数据库时,将结果集以随机的方式排列.这种排序方式可以用于有趣的应用场景,例如实现随机音乐播放.广告推荐等. 要实现MySQL的随机排序,可 ...
- 常见的问题系列--- Swagger @ApiOperationSupport忽略失效的问题
https://www.cnblogs.com/hujunwei/p/15853307.html