ORM练习项目-图书管理系统(BMS)实现细节

分析

  • 一本书 可以由多个作者编著
  • 一本书只能由一个出版社出版
  • 一个作者可以写多本书
  • 每个作者有自己的简介

对应关系

  • Author-Book # 多对多
  • Publish-Book # 一对多
  • Author-AuhtorDetail # 一对一

如何创建

  • 多对多:ManyToManyField
  • 一对多:ForeignKey
  • 一对一:OneToOneField

注意:创建一对多表的时候,ForeignKey建在多的那一方。另外两个随意建在哪一方。

目录结构

配置 settings.py

注册app:INSTALLED_APPS 项中添加bms

配置静态文件

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, ‘bms‘, ‘static‘)
]

配置模板

TEMPLATES中添加:

‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)]

配置路由分发

DjangoBMS.urls.py

from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^bms/‘, include(‘bms.urls‘)),
]

配置母模

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>Title</title>
    <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.min.css">
    {% block page-css %}
    {% endblock %}
<body>
{% block page-main %}
{% endblock %}

<script src="/static/js/jquery-3.2.1.min.js"></script>
<script src="/static/plugins/bootstrap/js/bootstrap.min.js"></script>
{% block page-js %}
{% endblock %}
</body>
</html> 

layout

创建数据库表结构

bms.models.py

from django.db import models

class Publish(models.Model):
    # 出版社
    name = models.CharField(max_length=32)
    email = models.EmailField()

class AuhtorDetail(models.Model):
    # 作者简介
    addr = models.CharField(max_length=32)
    email = models.EmailField()

class Author(models.Model):
    # 作者
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    detail = models.OneToOneField(‘AuhtorDetail‘)

class Book(models.Model):
    # 书籍
    title = models.CharField(max_length=32)
    publishDate = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)  # 最大 999.99
    publish = models.ForeignKey(‘Publish‘)  # 一对多
    authors = models.ManyToManyField(‘Author‘)  # 多对多

生成表命令:

python manange.py makemigrations

python manage.py migrate

数据增删改查

作者-作者详情

增加-显示:

from django.conf.urls import url
from bms import views
urlpatterns = [

    url(r‘^indexAuthor/‘,views.indexAutor),
    url(r‘^addAuthor/‘,views.addAuthor),
]

urls.py

def indexAutor(request):
    author_list = Author.objects.all()
    return render(request, ‘indexAuthor.html‘, {‘author_list‘: author_list})

def addAuthor(request):
    if request.method == ‘POST‘:
        name = request.POST.get(‘name‘)
        age = request.POST.get(‘age‘)
        addr = request.POST.get(‘addr‘)
        email = request.POST.get(‘email‘)
        detail_obj = AuhtorDetail.objects.create(addr=addr, email=email)
        Author.objects.create(name=name, age=age, detail_id=detail_obj.id)
        return redirect(‘/bms/indexAuthor/‘)
    return render(request, ‘addAuthor.html‘)

views.py

{% extends ‘layout.html‘ %}

{% block page-main %}

    <div class="container">

        <div>
        <span class="h1">
            图书管理系统
            <small>
                作者管理
            </small>
         </span>
        </div>
    <p><a href="/bms/addAuthor/" class="btn btn-sm bg-primary">添加</a></p>
        <div class="table-responsive">

        <table class="table table-striped table-bordered table-hover table-condensed">
<thead>
<tr>
    <th>id</th>
    <th>作者姓名</th>
    <th>作者年龄</th>
    <th>作者住址</th>
    <th>作者邮箱</th>
    <th>操作</th>
</tr>
</thead>
            <tbody>
            {% for author in author_list %}
            <tr>
                <td>{{ author.id }}</td>
                <td>{{ author.name }}</td>
                <td>{{ author.age }}</td>
                <td>{{ author.detail.addr }}</td>
                <td>{{ author.detail.email}}</td>
                <td>
                    <a href="" class="btn btn-sm bg-danger">删除</a>
                    <a href="" class="btn btn-sm bg-primary">编辑</a>
                </td>
            </tr>
            {% endfor %}
            </tbody>
        </table>
        </div>
    </div>

{% endblock %}

indexAuthor.html

{% extends ‘layout.html‘ %}

{% block page-main %}

    <div class="container">

        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title">添加作者 </h3>
            </div>
            <div class="panel-body">
                <!--表单开始-->
                <form class="form-horizontal" action="/bms/addAuthor/" method="post">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="inputName" class="col-sm-2 control-label">姓名</label>
                        <div class="col-sm-3">
                            <input type="text" name="name" class="form-control" id="inputName" placeholder="姓名">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="inputAge" class="col-sm-2 control-label">年龄</label>
                        <div class="col-sm-3">
                            <input type="text" name="age" class="form-control" id="inputAge" placeholder="年龄">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="inputAddr" class="col-sm-2 control-label">住址</label>
                        <div class="col-sm-3">
                            <input type="text" name="addr" class="form-control" id="inputAddr" placeholder="住址">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="inputEmail" class="col-sm-2 control-label">邮箱</label>
                        <div class="col-sm-3">
                            <input type="text" name="email" class="form-control" id="inputEmail" placeholder="邮箱">
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="col-sm-3 col-sm-offset-2">
                            <input type="submit" value="提交" class="bg-primary">
                        </div>
                    </div>
                </form>
                <!--表单结束-->
            </div>
        </div>

    </div>

{% endblock %}

addAuthor.html

 出版社

增加-显示

from django.conf.urls import url
from bms import views
urlpatterns = [

    url(r‘^indexAuthor/‘,views.indexAutor),
    url(r‘^addAuthor/‘,views.addAuthor),
    url(r‘^indexPublish/‘,views.indexPublish),
    url(r‘^addPublish/‘,views.addPublish),
]

urls.py

# 显示出版社
def indexPublish(request):
    publish_list = Publish.objects.all()
    return render(request, ‘indexPublish.html‘, {‘publish_list‘: publish_list})

# 添加出版社
def addPublish(request):
    if request.method == ‘POST‘:
        name = request.POST.get(‘name‘)
        email = request.POST.get(‘email‘)
        Publish.objects.create(name=name, email=email)
        return redirect(‘/bms/indexPublish/‘)
    return render(request, ‘addPublish.html‘)

views.py

{% extends ‘layout.html‘ %}

{% block page-main %}

    <div class="container">

        <div>
        <span class="h1">
            图书管理系统
            <small>
                出版社管理
            </small>
         </span>
        </div>
        <br>
        <hr>
        <br>
        <p><a href="/bms/addPublish/" class="btn btn-sm bg-primary">添加</a></p>
        <div class="table-responsive">

            <table class="table table-striped table-bordered table-hover table-condensed">
                <thead>
                <tr>
                    <th>出版社名称</th>
                    <th>出版社邮箱</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for publish in publish_list %}
                    <tr>
                        <td>{{ publish.name }}</td>
                        <td>{{ publish.email }}</td>
                        <td>
                            <a href="" class="btn btn-sm bg-danger">删除</a>
                            <a href="" class="btn btn-sm bg-primary">编辑</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>

{% endblock %}

indexPublish.html

{% extends ‘layout.html‘ %}

{% block page-main %}

    <div class="container">

        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title">添加出版社 </h3>
            </div>
            <div class="panel-body">
                <!--表单开始-->
                <form class="form-horizontal" action="/bms/addPublish/" method="post">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="inputName" class="col-sm-2 control-label">出版社名称</label>
                        <div class="col-sm-3">
                            <input type="text" name="name" class="form-control" id="inputName" placeholder="出版社名称">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="inputEmail" class="col-sm-2 control-label">邮箱</label>
                        <div class="col-sm-3">
                            <input type="text" name="email" class="form-control" id="inputEmail" placeholder="邮箱">
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="col-sm-3 col-sm-offset-2">
                            <input type="submit" value="提交" class="bg-primary">
                        </div>
                    </div>
                </form>
                <!--表单结束-->
            </div>
        </div>

    </div>

{% endblock %}

addPublish.html

时间: 2024-10-08 08:43:38

ORM练习项目-图书管理系统(BMS)实现细节的相关文章

Java swing项目-图书管理系统(swing+mysql+jdbc)

(一)项目功能分析 该项目是设计一个图书管理系统,主要包含的内容有 (1)管理员登陆界面 ->信息录入 ->登录 ->重置 (2)图书管理系统总界面 ->子界面菜单: 1)图书类别添加子界面 ->图书类别信息录入 ->图书类别添加 ->图书类别信息重置 2)图书类别管理子界面 ->显示所有的图书类别 ->查询图书类别 ->修改的图书类别信息显示 ->修改图书类别信息 ->删除图书类别 3)图书添加子界面 ->图书信息录入 -&g

结对项目 —— 图书管理系统实验报告

一.项目简介 该系统主要建立一个基于基本模式的图书馆登录系统,该系统类似二叉树,可以对跟系统的二个用户类型的使用实现: ①用户(User)登录 用户登录包含的是管理员和读者的登录信息,管理员和读者的信息内容都是调用用户类中的信息. ②读者(Reader)登录 读者登录包含的老师和学生的登录信息,登录时则是调用读者类中相关信息. 二.基本流程图 三.模块功能介绍 1)用户模块功能介绍 public class User { String name; int passWord; public Use

个人项目-图书管理系统登陆功能模拟

一.题目简介 假设图书管理系统中有图书馆员.读者两类用户,读者又分为教师读者和学生读者.所有用户登录系统后才能使用各种功能.登录时,需要提供用户的账号和密码信息.此外,对于不同的用户,登录成功后显示不同的欢迎信息(包括用户的姓名.身份等信息).请根据以上要求,模拟图书馆管理系统的登录功能. 二.源码的github链接 https://github.com/bbker/library 三.所设计的模块测试用例.测试结果截图 package NEWlibrary; import static org

小组项目———图书管理系统之?需求分析

需求分析 一个成功的图书管理系统能提供快速的图书信息检索功能.快捷的图书借阅.归还流程,为管理者与读者提供充足的信息和快捷的数据处理手段,本系统应具有以下特点: 1.具有良好的系统性能,友好的用户界面. 2.系统应该有很好的可扩展性和较高的处理效率,便于使用和维护. 3.采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期. 4.系统尽量简化图书馆管理员的重复工作,提高工作效率. 5.简化数据查询,统计难度. 需求规格说明书: (1)在启动系统后,首先是登陆界面,根据用户输入判断用户身份是

Java swing项目-图书管理系统(swing+mysql+jdbc) 总结

(一)java Swing的学习. (1)学习如何安装windowbuilder插件的安装. <1>在eclipse中点击help <2>在help的下拉选中选择install new software,弹出插件的添加界面 <3>点击add,在弹出如下界面: <4>在name栏输入windowbuider 在location中输入如下地址:http://download.eclipse.org/windowbuilder/WB/release/R201506

在Django中使用ORM创建图书管理系统

一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等)会有点区别, 因此直接在你的项目中使用sql语句的话,不便于以后的修改,万一更换了数据库,那所有sql语句不就要重新写吗? 所以这个时候ORM就体现出优点了,你只需要写ORM的代码,它就会根据你连接的数据库自动帮你翻译成对应的sql语句, 也就是说无论你使用的是mysql还是oracle,ORM操

Django框架进阶5 models常用字段及参数, choices参数, 自动显示sql命令配置, orm查询优化相关, orm中的事务操作, MTV与MVC模型, 图书管理系统(图书的增删改查)

models中的常用字段 AutoField(primary_key=True) 主键   (int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列.) CharField(max_length=32)     varchar(32) IntegerField()       int BigIntergerField()           bigint DecimalField()    decimal EmailField(

图书管理系统项目

项目名:图书管理系统 作者:李帅 参考:http://blog.csdn.net/sdliujiangbo/article/details/9003655 MainFrame.java private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: //1.先获取用户名和密码 String name = LoginName.getText();

C语言项目2:图书管理系统

项目名称:图书管理系统 项目作者:宁哥 开发工具:Visual Studio 2017 编程语言:C语言 意义:链表.文件存储.数据加解密.多文件开发综合应用 功能描述: 1:增.删.改.查 2:数据加解密 3:文件数据库,带记忆功能 4:初始化 5:搜索 检查时间:2017年8月6日 结构体原型: struct _book { char bid[10];//编号 char name[30];//书名 int page;//页数 int price;//价格 struct _book *next