Django项目之图书管理系统

一、指定数据库

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day54',
        'USER': 'root',
        'PASSWORD': '123123',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'CHARSET': 'utf8'
    }
}
# __init__
import pymysql

pymysql.install_as_MySQLdb()

二、设计表

数据库迁移命令:

        pycharm命令段快捷方式ctrl + alt + R

                任何执行makemigrations  migrate

# app01/models.py
from django.db import models


# Create your models here.
class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    publish_date = models.DateField(auto_now_add=True)
    publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)  # 一对多
    authors = models.ManyToManyField(to='Author')


class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=64)
    email = models.EmailField()  # varchar(254) 该字段类型不是给models看的 而是给校验型组件看的


class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    author_detail = models.OneToOneField(to='AuthorDetail', on_delete=models.CASCADE)


class AuthorDetail(models.Model):
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=64)

三、插入数据

1.authordetail

2.author 

3.publish

 4.book

 5.book_authors

四、页面匹配

# urls.py
from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    # 首页
    path('', views.home, name='home'),
    # 图书的展示页
    path('book/list/', views.book_list, name='book_list'),
    # 书籍的添加
    path('book/add/', views.book_add, name='book_add'),
    # 书籍的编辑
    path('book/edit/', views.book_edit, name='book_edit'),
    # 书籍的删除
    path('book/delete/', views.book_delete, name='book_delete')
]
# app01/views.py
from django.shortcuts import render, redirect
from app01 import models


# Create your views here.
def home(request):
    return render(request, 'home.html')


def book_list(request):
    # 先查询出所有的书籍信息 传递给html页面
    book_queryset = models.Book.objects.all()
    return render(request, 'book_list.html', locals())


def book_add(request):
    # 先获取当前系统中所有的出版社信息和作者信息
    publish_queryset = models.Publish.objects.all()
    author_queryset = models.Author.objects.all()
    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')
        authors_list = request.POST.getlist('authors')
        # 操作数据库存储数据
        # 书籍表
        book_obj = models.Book.objects.create(title=title, price=price, publish_date=publish_date,
                                              publish_id=publish_id)
        # 书籍与作者的关系表
        book_obj.authors.add(*authors_list)  # 将列表打散传入数据
        # 跳到书籍的展示页面
        return redirect('book_list')
    return render(request, 'book_add.html', locals())


def book_edit(request):
    # 获取当前用户想要编辑的书籍对象 展示给用户看
    edit_id = request.GET.get('book_id')
    edit_obj = models.Book.objects.filter(id=edit_id).first()
    publish_queryset = models.Publish.objects.all()
    author_queryset = models.Author.objects.all()
    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')
        authors_list = request.POST.getlist('authors')
        # 操作数据库存储数据
        # 书籍表
        book_obj = models.Book.objects.filter(pk=edit_id).update(title=title, price=price, publish_date=publish_date,
                                                                 publish_id=publish_id)
        # 书籍与作者的关系表
        edit_obj.authors.set(authors_list)
        # 跳到书籍的展示页面
        return redirect('book_list')
    return render(request, 'book_edit.html', locals())


def book_delete(request):
    # 获取用户想要删除的数据id值
    delete_id = request.GET.get('book_id')
    # 直接去数据库中找到对应的数据删除即可
    models.Book.objects.filter(id=delete_id).delete()
    return redirect('book_list')

 五、HTML页面

1.home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    {% block css %}

    {% endblock %}
</head>
<body>
<div>
    <nav class="navbar navbar-inverse">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                        data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#">图书管理系统</a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">图书<span class="sr-only">(current)</span></a></li>
                    <li><a href="#">作者</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                           aria-expanded="false">更多<span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="#">Action</a></li>
                            <li><a href="#">Another action</a></li>
                            <li><a href="#">Something else here</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">Separated link</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">One more separated link</a></li>
                        </ul>
                    </li>
                </ul>
                <form class="navbar-form navbar-left">
                    <div class="form-group">
                        <input type="text" class="form-control" placeholder="Search">
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
                </form>
                <ul class="nav navbar-nav navbar-right">
                    <li><a href="#">千岁忧</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                           aria-expanded="false">更多操作<span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="#">Action</a></li>
                            <li><a href="#">Another action</a></li>
                            <li><a href="#">Something else here</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">Separated link</a></li>
                        </ul>
                    </li>
                </ul>
            </div><!-- /.navbar-collapse -->
        </div><!-- /.container-fluid -->
    </nav>
</div>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-3">
            <div class="list-group">
                <a href="#" class="list-group-item active">
                    首页
                </a>
                <a href="{% url 'book_list' %}" class="list-group-item">图书列表</a>
                <a href="#" class="list-group-item">出版社列表</a>
                <a href="#" class="list-group-item">作者列表</a>
                <a href="#" class="list-group-item">更多</a>
            </div>
        </div>
        <div class="col-md-9">
            <div class="panel panel-primary">
                <div class="panel-heading">
                    <h3 class="panel-title">图书管理系统</h3>
                </div>
                <div class="panel-body">
                    {% block content %}
                        <div class="jumbotron">
                            <h1>Hello, world!</h1>
                            <p>...</p>
                            <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
                        </div>
                    {% endblock %}

                </div>
            </div>
        </div>
    </div>
</div>

<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
{% block js %}

{% endblock %}
</body>
</html>

2.book_list.html

{% extends 'home.html' %}
{% block content %}
    <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>
        <a href="{% url 'book_add' %}" class="btn btn-success">添加</a>
        <br>
        {% for book_obj in book_queryset %}

            <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.authors.all %}
                        {% if forloop.last %}
                            {{ author_obj.name }}
                        {% else %}
                            {{ author_obj.name }}、
                        {% endif %}

                    {% endfor %}

                </td>
                <td>
                    <a href="{% url 'book_edit' %}?book_id={{ book_obj.pk }}" class="btn btn-primary btn-xs">编辑</a>
                    <a href="{% url 'book_delete' %}?book_id={{ book_obj.pk }}" class="btn btn-danger btn-xs">删除</a>
                </td>
            </tr>
        {% endfor %}

        </tbody>
    </table>
{% endblock %}

3.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="authors" 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 %}

4.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="authors" id="" multiple class="form-control">
                {% for author_obj in author_queryset %}
                    {% if author_obj in edit_obj.authors.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 %}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解关于使用 Django 制作图书管理系统项目的一些信息是吗?我可以为您提供一些指导和建议。 首先,您需要安装 Django 并创建一个项目。然后,您可以创建一个应用程序来管理图书。在应用程序中,您可以定义图书模型,并使用 Django 的内置视图和表单来创建、更新和删除图书。 以下是一些可能有用的步骤: 1. 安装 Django。您可以通过 pip 安装最新版本的 Django。 2. 创建项目。您可以使用命令行工具创建一个新的 Django 项目,例如: ``` django-admin startproject myproject ``` 3. 创建应用程序。在项目中,您可以创建一个应用程序来管理图书。使用以下命令创建一个新的应用程序: ``` python manage.py startapp books ``` 4. 定义模型。在应用程序中,您可以定义一个图书模型。例如,您可以创建一个 Book 类,具有 title、author 和 published_date 等属性。 5. 创建视图。您可以使用 Django 的内置视图来创建视图,例如 ListView 和 DetailView。 6. 创建表单。您可以使用 Django 的内置表单来创建表单,例如 ModelForm。 7. 创建模板。您可以使用 Django 的模板语言来创建模板,例如在列表视图中显示所有图书的模板。 8. 集成 Bootstrap。您可以使用 Bootstrap 来改善您的项目的外观和用户体验。 这些是一些可能有用的步骤,但是制作一个完整的图书管理系统涉及的步骤可能会更多。希望这些信息能够帮助您开始。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值