后端
路由
urlpatterns = [
path('admin/', admin.site.urls),
首頁
re_path('^$', views.Bms.as_view()),
圖書
path('book/', views.Books.as_view()),
出版社
path('publish/', views.Publish.as_view()),
作者
path('author/', views.Authors.as_view()),
修改
re_path('^book_update/(\d+)$', views.Update.as_view(), name="obj1"),
刪除
re_path('^book_delete/(\d+)$', views.Delete.as_view(), name="obj2"),
添加
path('add/', views.BookAdd.as_view()),
]
模型層
# 圖書表
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8, decimal_places=2) # 總共8位,小數點占8位
date = models.DateField(auto_now_add=True)
"""
圖書和出版社是一對多 并且書是多的一方 所以外鍵字段放在書表里面
"""
publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE, ) # 默認會跟出版社表的主鍵關聯
"""
如果字段對應的是ForeignKey 那么會orm會自動在字段的后面加_id
"""
authors = models.ManyToManyField(to='Author')
"""
authors是一個虛擬字段 主要是用來告訴orm 書籍表和作者表是多對多關系
讓orm自動幫你創建第三張關系表
"""
# 出版社表
class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=32, null=True)
email = models.EmailField()
# 作者表
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField(null=True)
author_detail = models.OneToOneField(to='AuthorDetail', on_delete=models.CASCADE, )
# 作責詳情表
class AuthorDetail(models.Model):
phone = models.BigIntegerField() # 或者直接字符類型
addr = models.CharField(max_length=32)
視圖層
from django.shortcuts import render, HttpResponse, redirect
# Create your views here.
from django.views import View
from app01 import models
class Bms(View):
def get(self,request):
return render(request, "bms.html")
class Books(View):
def get(self,request):
# 先查詢出所有的書籍信息 傳遞給html頁面
book_all = models.Book.objects.all()
return render(request, "books.html",locals())
class Publish(View):
def get(self,request):
return render(request, "publishs.html")
class Authors(View):
def get(self,request):
return render(request, "authors.html")
class BookAdd(View):
def get(self,request):
publish_all = models.Publish.objects.all()
author_all = models.Author.objects.all()
return render(request, "add.html",locals())
def post(self,request):
# 獲取前端提交過來的所有數據
title = request.POST.get("title")
price = request.POST.get("price")
publish_date = request.POST.get("date")
publish_id = request.POST.get("publish")
authors_list = request.POST.getlist("author")
# 操作數據庫存儲數據
# 書籍表
book_obj = models.Book.objects.create(title=title, price=price, date=publish_date,
publish_id=publish_id)
# 書籍表與作者表的關系
book_obj.authors.add(*authors_list)
return redirect('/book/')
class Update(View):
def get(self,request,up):
edit_obj = models.Book.objects.filter(pk=up).first()
publish_list = models.Publish.objects.all()
author_list = models.Author.objects.all()
return render(request, "book_up.html",locals())
def post(self,request,up):
# 獲取當前用戶想要編輯的書籍對象 展示給用戶看
edit_obj = models.Book.objects.filter(pk=up).first()
title = request.POST.get("title")
price = request.POST.get("price")
publish_date = request.POST.get("date")
publish_id = request.POST.get("publish")
authors_list = request.POST.getlist("author") # [1,2,3,4,]
models.Book.objects.filter(pk=up).update(title=title,
price=price,
date=publish_date,
publish_id=publish_id
)
# 該第三張關系表
edit_obj.authors.set(authors_list)
return redirect('/book/')
class Delete(View):
def get(self, request, up):
models.Book.objects.filter(pk=up).delete()
return redirect("/book/")
前端
圖書(books)
{% extends "bms.html" %}
{% block content %}
<div class="panel panel-info">
<!-- Default panel contents -->
<div class="panel-heading">圖書<a href="/add/" class="btn btn-success btn-sm navbar-right" role="button">添加</a>
</div>
<div class="panel-body">
<!-- Table -->
<table class="table table-hover">
<thead>
<tr>
<td>書名</td>
<td>價格</td>
<td>出版社</td>
<td>出版日期</td>
<td>作者</td>
<td>操作</td>
</tr>
</thead>
<tbody>
{% for book in book_all %}
<tr>
<td>{{ book.title }}</td>
<td>{{ book.price }}</td>
<td>{{ book.publish.name }}</td>
<td>{{ book.date|date:"Y-m-d" }}</td>
<td>
{% for author in book.authors.all %}
{% if forloop.last %}
{{ author.name }}
{% else %}
{{ author.name }} |
{% endif %}
{% endfor %}
</td>
<td>
<a href="{% url "obj1" book.id %}" class="btn btn-primary">編輯</a>
<a href="{% url "obj2" book.id %}" class="btn btn-success">刪除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}
首頁(bms)
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static "bootstrap-3.4.1-dist/bootstrap-3.4.1-dist/css/bootstrap.min.css" %}">
<script href="{% static "bootstrap-3.4.1-dist/bootstrap-3.4.1-dist/js/bootstrap.min.js" %}"></script>
</head>
<body>
<nav class="navbar navbar-default">
<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">
<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="/lon1/" class="active">登錄</a></li>
<li><a href="/regin/" class="active">注冊</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
<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="/book/" class="list-group-item">圖書列表</a>
<a href="/author/" class="list-group-item">作者列表</a>
<a href="/publish/" class="list-group-item">出版社列表</a>
</div>
</div>
<div class="col-md-9">
{% block content %}
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">首頁</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<img src="../static/imge/1.jpg" alt="...">
<div class="caption">
<h3>圖書</h3>
<p><a href="/book/" class="btn btn-primary" role="button">Button</a></p>
</div>
</div>
</div>
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<img src="../static/imge/2.jpg" alt="...">
<div class="caption">
<h3>作者</h3>
<p><a href="/author/" class="btn btn-primary" role="button">Button</a></p>
</div>
</div>
</div>
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<img src="../static/imge/3.jpg" alt="...">
<div class="caption">
<h3>出版社</h3>
<p><a href="/publish/" class="btn btn-primary" role="button">Button</a></p>
</div>
</div>
</div>
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<img src="../static/imge/4.jpg" alt="...">
<div class="caption">
<h3>廢物一個</h3>
<p><a href="/bao/" class="btn btn-primary" role="button">查看特性</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{# 模板的導入#}
{# {% include "file.html" %}#}
</div>
</div>
</div>
</body>
</html>
編輯
{% extends "bms.html" %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-lg-8 col-md-offset-2">
<h2 class="text-center">修改書籍</h2>
<form method="post">
{% csrf_token %}
<p>書名:<input class="form-control" type="text" name="title" value="{{ edit_obj.title }}"><p/>
<p>價格:<input class="form-control" type="text" name="price" value="{{ edit_obj.price }}"><p/>
<p>日期:<input class="form-control" type="date" name="date" value="{{ edit_obj.date|date:"Y-m-d" }}"><p/>
<p>出版社:
<select name="publish" id="" class="form-control">
{% for obj in publish_list %}
{% if edit_obj.publish == obj%}
<option value="{{ obj.pk }}" selected>{{ obj.name }}</option>
{% else %}
<option value="{{ obj.pk }}">{{ obj.name }}</option>
{% endif %}
{% endfor %}
</select>
<p/>
<p>作者:
<select name="author" id="" multiple class="form-control">
{% for obj1 in author_list %}
{% if obj1 in edit_obj.authors.all %}
<option value="{{ obj1.pk }}" selected>{{ obj1.name }}</option>
{% else %}
<option value="{{ obj1.pk }}">{{ obj1.name }}</option>
{% endif %}
{% endfor %}
</select>
<p/>
<p><input class="form-control btn-success" type="submit" name="submit"><p/>
</form>
</div>
</div>
</div>
{% endblock %}
添加
{% extends "bms.html" %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-lg-8 col-md-offset-2">
<h2 class="text-center">修改書籍</h2>
<form method="post">
{% csrf_token %}
<p>書名:<input class="form-control" type="text" name="title" value="{{ up_id.title }}"><p/>
<p>價格:<input class="form-control" type="text" name="price" value="{{ up_id.price }}"><p/>
<p>日期:<input class="form-control" type="date" name="date" value="{{ up_id.price }}"><p/>
<p>出版社:
<select name="publish" id="" class="form-control">
{% for obj in publish_all %}
<option value="{{ obj.pk }}">{{ obj.name }}</option>
{% endfor %}
</select>
<p/>
<p>作者:
<select name="author" id="" multiple class="form-control">
{% for obj1 in author_all %}
<option value="{{ obj1.pk }}">{{ obj1.name }}</option>
{% endfor %}
</select>
<p/>
<p><input class="form-control btn-success" type="submit" name="submit"><p/>
</form>
</div>
</div>
</div>
{% endblock %}
settings
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'bms', 'USER': 'root', 'PASSWORD': '', 'HOST': '127.0.0.1', 'PORT': 3306, } } STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'app01/static') ]
浙公網安備 33010602011771號