赞
踩
一、创建项目文件夹
选择位置创建文件夹,在cmd中输入以下命令创建项目
django-admin startproject bookproject
点击创建的文件夹后再次cmd输入:
python manage.py startapp app01
二、打开python软件,配置
1、settings(其他配置跟以往相同)只需添加以下代码
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "bookshop",#数据名
"USER":"root",#用户名
"PASSWORD":"root",
"HOST":"",#域名
"PORT":"3306",#端口号
}
}
注:配置完成后手动添加文件夹static和template
2.配置models
#创建出版社对象
class Publisher(models.Model):
id = models.AutoField(primary_key = True)
name = models.CharField(max_length=64,null=False)
address = models.CharField(max_length=64,null=False)
#创建图书
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5,decimal_places=2,default=10.01)
inventory = models.IntegerField(verbose_name='库存数')
sale_num = models.IntegerField(verbose_name='卖出数')
publisher = models.ForeignKey(to='Publisher', on_delete=models.CASCADE)
#创建作者列表
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
book = models.ManyToManyField(to='Book')
三、迁移数据库并写入数据库,启动项目
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
四、创建路由
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ #path('admin/', admin.site.urls), #添加出版社路由 path('add_publisher/',views.add_publisher), # 出版社路由列表 path('publisher_list/',views.publisher_list), # 修改出版社路由 path('edit_publisher/',views.edit_publisher), # 图书列表路由 path('book_list/',views.book_list), # 添加图书路由 path('add_book/',views.add_book), # 修改路由 path('edit_book/',views.edit_book), # 删除图书路由 path('delete_book/',views.delete_book), # 删除出版社路由 path('delete_publisher/',views.delete_publisher), # 作者列表路由 path('author_list/',views.author_list), # 添加作者路由 path('add_author/',views.add_author), # 修改作者路由 path('edit_author/',views.edit_author), # 删除作者路由 path('delete_author/',views.delete_author), ]
五、新建HTML页
六、写入views视图代码
首先导入redirect和models 模块
1.出版社
from django.shortcuts import render, redirect from app01 import models # Create your views here. #添加出版社 def add_publisher(request): if request.method == "POST": # 获取表单提交的内容 publisher_name = request.POST.get('name') publisher_address = request.POST.get('address') # 保存数据库表单中 models.Publisher.objects.create(name=publisher_name, address=publisher_address).save() return redirect('/app01/publisher_list/') return render(request, 'add_publisher.html') # 删除出版社 def delete_publisher(request): # 获取删除图书的ID id = request.GET.get('id') # 根据ID删除数据库中的记录 models.Publisher.objects.filter(id=id).delete() return redirect('/app01/publisher_list/')
#出版社列表
def publisher_list(request):
# get
# 查询数据库中所有信息
publisher_list = models.Publisher.objects.all()
return render(request, 'publisher_list.html', locals())
#修改出版社 def edit_publisher(request): if request.method == 'POST': # 获取表单提交过来的内容 id = request.POST.get('id') name = request.POST.get('name') address = request.POST.get('address') # 根据ID去数据库中查找对象 publisher_obj = models.Publisher.objects.get(id=id) # 修改 publisher_obj.name = name publisher_obj.address = address publisher_obj.save() return redirect('/app01/publisher_list/') else: # 获取ID id = request.GET.get('id') # 去数据库中查找相应的数据 publisher_obj = models.Publisher.objects.get(id=id) publisher_obj_list = models.Publisher.objects.all() # 3返回页面 return render(request, 'edit_publisher.html', {"publisher_obj": publisher_obj, "publisher_obj_list": publisher_obj_list})
![添加(https://img-blog.csdnimg.cn/20210413143704864.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NDgxMjI1Mg==,size_16,color_FFFFFF,t_70)
2、图书
# 图书列表
def book_list(request):
# 获取图书信息
book_obj_list = models.Book.objects.all()
print(book_obj_list)
# 将数据放到页面上
return render(request, 'book_list.html', {"book_obj_list": book_obj_list})
#添加图书 def add_book(request): if request.method == 'POST': # 获取表单提交过来的内容 name = request.POST.get('name') price = request.POST.get('price') inventory = request.POST.get('inventory') sale_num = request.POST.get('sale_num') publisher_id = request.POST.get('publisher_id') print(publisher_id) # 保存到数据库app01book models.Book.objects.create(name=name, price=price, inventory=inventory, sale_num=sale_num, publisher_id=publisher_id).save() # 重定向到图书列表页面 return redirect('/app01/book_list/') else: # 获取所有出版社 publisher_obj_list = models.Publisher.objects.all() return render(request, 'add_book.html', {"publisher_obj_list": publisher_obj_list})
# 修改图书 def edit_book(request): if request.method == 'GET': # 获取ID id = request.GET.get('id') # 去数据库中查找相应的数据 book_obj = models.Book.objects.filter(id=id).first() # 查找所有出版社 publisher_list = models.Publisher.objects.all() # 返回页面 return render(request, 'edit_book.html', {'book_obj': book_obj, 'publisher_list': publisher_list}) else: # 获取表单提交过来的内容 id = request.POST.get('id') name = request.POST.get('name') inventory = request.POST.get('inventory') sale_num = request.POST.get('sale_num') price = request.POST.get('price') publisher_id = request.POST.get('publisher_id') # 查询数据库并进行更新 models.Book.objects.filter(id=id).update(name=name, price=price, inventory=inventory, sale_num=sale_num, publisher_id=publisher_id) # 定向到book_list中 return redirect('/app01/book_list/')
# 删除图书
def delete_book(request):
# 获取ID
id = request.GET.get('id')
# 删除图书
models.Book.objects.filter(id=id).delete()
# 重定向到图书列表
return redirect('/app01/book_list/')
# 删除图书管理
def delete_publisher(request):
# 获取删除图书的ID
id = request.GET.get('id')
# 根据ID删除数据库中的列表
models.Publisher.objects.filter(id=id).delete()
# 重定向
return redirect('/app01/publisher_list')
3、作者
# 添加作者 def add_author(request): if request.method == 'GET': # 1获取所有的图书 book_obj_list = models.Book.objects.all() # 2返回页面 return render(request, 'add_author.html', {'book_obj_list': book_obj_list}) else: # 1.获取表单提交过来的数据 name = request.POST.get('name') book_ids = request.POST.getlist('books') # 2 保存数据库 author_obj = models.Author.objects.create(name=name) # 创建对象 author_obj.book.set(book_ids) # 设置关系 # 3 重定向到列表页面 return redirect('/app01/author_list/')
# 删除作者
def delete_author(request):
# 获取id
id = request.GET.get('id')
# 删除作者
models.Author.objects.filter(id=id).delete()
# 重定向
return redirect('/app01/author_list/')
# 修改作者 def edit_author(request): if request.method == 'GET': # 获取id id = request.GET.get('id') # 查询对象和所有的图书 author_obj = models.Author.objects.get(id=id) book_obj_list = models.Book.objects.all() # 返回页面 return render(request, 'edit_author.html', {'author_obj': author_obj, 'book_obj_list': book_obj_list}) else: # 保存修改的数据 # 获取表单提交过来的内容 id = request.POST.get('id') name = request.POST.get('name') book_ids = request.POST.getlist('books') # 根据id查找对象并修改 author_obj = models.Author.objects.filter(id=id).first() author_obj.name = name author_obj.book.set(book_ids) author_obj.save() # 重定向到作者列表 return redirect('/app01/author_list/')
七、编写HTML页面
首先写入母板,其他网页都调用其母板
(母板)
<!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"> <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> <title>图书管理系统</title> <!-- Bootstrap --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 --> <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 --> <!--[if lt IE 9]> <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script> <![endif]--> </head> <body> <!--分页名称--> <h1 class="text-center">图书管理系统</h1> <!--这是导航栏--> {% include "nav.html" %} <!--这是侧栏--> <div class="container-fluid"> <div class="row"> <div class="col-md-3"> <ul class="nav nav-sidebar"> {% block nav %} {% endblock %} </ul> </div> <!--标题栏--> {% block bar %} {% endblock %} <!--主程序--> {% block main%} {% endblock %} <!--这是页码--> <nav aria-label="Page navigation"> <ul class="pagination"> <li> <a href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> </body> </html>
(导航栏)
<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="/app01/book_list/">首页</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="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li> <li class="active"><a href="/app01/author_list/">作者列表</a></li> <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li> <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="#" class="btn btn-default">Submit</button> </form> <ul class="nav navbar-nav navbar-right"> <li><a href="#">Link</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <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>
(1、图书列表)
{% extends "base.html" %} {% block bar %} <div class="col-md-9" style="justify-content: flex-end;"> <h1 class="page-header">出版社管理页面</h1> <div class="panel panel-primary"> <div class="panel-heading">出版社列表 <i class="fa fa-thumb-tack pull-right"></i></div> <div class="panel-body"> <div class="row" style="margin-bottom: 15px"> <div class="col-md-4"> <div class="input-group"> <input type="text" class="form-control" placeholder="Search for..."> <span class="input-group-btn"> <button class="btn btn-default" type="button">搜索</button> </span> </div> </div> <div class="col-md-2 pull-right"> <a class="btn btn-success" href="/app01/add_publisher">新增出版社</a> </div> </div> </div> {% endblock %} {% block main%} <table border="1" class="table table-hover table-bordered"> <thead> <tr> <th>序号</th> <th>出版社</th> <th>名称</th> <th>地址</th> <th>操作</th> </tr> </thead> <tbody> {% for publisher_obj in publisher_list %} <tr> <td>{{ forloop.counter }}</td> <td>{{ publisher_obj.id }}</td> <td>{{ publisher_obj.name }}</td> <td>{{ publisher_obj.address }}</td> <td> <a href="/app01/edit_publisher/?id={{ publisher_obj.id }}">修改</a> <a href="/app01/delete_publisher/?id={{ publisher_obj.id }}">删除</a> </td> </tr> {% endfor %} </tbody> </table> {% endblock %}
(修改图书)
{% extends "base.html" %} {% block bar %} <div class="col-md-9" style="justify-content:flex-end "> <h1 class="page-header">出版社管理页面</h1> <div class="panel panel-primary"> <div class="panel-heading">修改出版社<i class="fa fa-thumb-tack pull-right"></i></div> <div class="panel-body"> <div class="row" style="margin-bottom: 15px"> <div class="col-md-4"> <div class="input-group"> </div> <!- </div> <!- /input-group -- > </div> </div> </div> {% endblock %} {% block main %} <form action="" method="post"> <p> <input type="hidden" name="id" value="{{ publisher_obj.id }}"> </p> <p> 出版社名称:<input type="text" name="name" value="{{ publisher_obj.name }}"> </p> <p> 出版社地址:<input type="text" name="address" value="{{ publisher_obj.address }}"> </p> <p> <button type="submit" class="btn">提交</button> </p> </form> {% endblock %}
(添加图书)
{% extends "base.html" %} {% block bar %} <div class="col-md-9" style="justify-content: flex-end;"> <h1 class="page-header">出版社管理页</h1> <div class="panel panel-primary"> <div class="panel-heading">添加出版社 <i class="fa fa-thumb-tack pull-right"></i></div> <div class="panel-body"> <!- </div> </div> {% endblock %} {% block main %} <form action="" method="post"> {% csrf_token %} <p> 出版社名称 <input type="text" name="name"> </p> <p> 出版社地址 <input type="text" name="address"> </p> <p> <button type="submit" class="btn">提交</button> </p> </form> </body> </html> {% endblock %}
(2、添加作者)
{% extends "base.html" %} {% block bar %} <div class="col-md-9" style="justify-content: flex-end;"> <h1 class="page-header">作者管理页面</h1> <div class="panel panel-primary"> <div class="panel-heading">添加作者 <i class="fa fa-thumb-tack pull-right"></i></div> <div class="panel-body"> <div class="row" style="margin-bottom: 15px"> <div class="col-md-4"> <div class="input-group"> </div> <!- </div> </div> </div> </div> {% endblock %} {% block main %} <form action="" method="post"> {% csrf_token %} <p> 作者 <input type="text" name="name"> </p> <p> 书名 <select multiple name="books" > {% for book_obj in book_obj_list %} <option value="{{ book_obj.id }}">{{ book_obj.name }}</option> {% endfor %} </select> </p> <p> <button type="submit" class="btn">提交</button> </p> </form> {% endblock %}
(修改作者)
{% extends "base.html" %} {% block bar %} <div class="col-md-9" style="justify-content: flex-end;"> <h1 class="page-header">作者管理页面</h1> <div class="panel panel-primary"> <div class="panel-heading">编辑作者 <i class="fa fa-thumb-tack pull-right"></i></div> <div class="panel-body"> <div class="row" style="margin-bottom: 15px"> <div class="col-md-4"> <div class="input-group"> </div> <!- </div> </div> </div> </div> {% endblock %} {% block main %} <form action="" method="post"> {% csrf_token %} <p> <input type="hidden" name="id" value="{{ author_obj.id }}"> </p> <p> 作者 <input type="text" name="name" value="{{ author_obj.name }}"> </p> <p> 书名 <select name="books" id="books"> {% for book_obj in book_obj_list %} <option value="{{ book_obj.id }}">{{ book_obj.name }}</option> {% endfor %} </select> </p> <p> <button type="submit" class="btn">提交</button> </p> </form> {% endblock %}
(3、添加图书)
{% extends "base.html" %} {% block bar %} <div class="col-md-9" style="justify-content: flex-end;"> <h1 class="page-header">图书管理页面</h1> <div class="panel panel-primary"> <div class="panel-heading">添加图书 <i class="fa fa-thumb-tack pull-right"></i></div> <div class="panel-body"> <!- </div> </div> {% endblock %} {% block main %} <form action="" method="post"> {% csrf_token %} <p> 图书名称 <input type="text" name="name"> </p> <p> 价格 <input type="text" name="price"> </p> <p> 库存 <input type="inventory" name="inventory"> </p> <p> 卖出数 <input type="sale_num" name="sale_num"> </p> <p> 出版社 <select multiple name="publisher_id" id=""> {% for publisher_obj in publisher_obj_list %} <option value="{{ publisher_obj.id }}">{{ publisher_obj.name }}</option> {% endfor %} </select> </p> <p> <button type="submit" class="btn">提交</button> </p> </form> {% endblock %}
(修改图书)
{% extends "base.html" %} {% block bar %} <div class="col-md-9" style="justify-content:flex-end "> <h1 class="page-header">出版社管理页面</h1> <div class="panel panel-primary"> <div class="panel-heading">修改出版社<i class="fa fa-thumb-tack pull-right"></i></div> <div class="panel-body"> <div class="row" style="margin-bottom: 15px"> <div class="col-md-4"> <div class="input-group"> </div> <!- </div> <!- /input-group -- > </div> </div> </div> {% endblock %} {% block main %} <form action="" method="post"> {% csrf_token %} <p> <input type="hidden" name="id" value="{{ book_obj.id }}"> </p> <p> 图书名称 <input type="text" name="name" value="{{ book_obj.name }}"> </p> <p> 价格 <input type="text" name="price" value="{{ book_obj.price }}"> </p> <p> 库存 <input type="invevtory" name="inventory" value="{{ book_obj.inventory}}"> </p> <p> 卖出数 <input type="sale_num" name="sale_num"value="{{ book_obj.sale_num }}"> </p> <p> 出版社 <input type="text" name="publisher_id" value="{{ book_obj.publisher.id }}"> </p> <p> <button type="submit" class="btn">提交</button> </p> </form> {% endblock %}
(图书列表)
{% extends "base.html" %} {% block bar %} <div class="col-md-9" style="justify-content: flex-end;"> <h1 class="page-header">出版社管理页面</h1> <div class="panel panel-primary"> <div class="panel-heading">出版社列表 <i class="fa fa-thumb-tack pull-right"></i></div> <div class="panel-body"> <div class="row" style="margin-bottom: 15px"> <div class="col-md-4"> <div class="input-group"> <input type="text" class="form-control" placeholder="Search for..."> <span class="input-group-btn"> <button class="btn btn-default" type="button">搜索</button> </span> </div> </div> <div class="col-md-2 pull-right"> <a class="btn btn-success" href="/app01/add_publisher">新增出版社</a> </div> </div> </div> {% endblock %} {% block main%} <div class="container-fluid"> <div class="row-fluid"> <div class="span12"> <table border="1" class="table table-hover table-bordered"> <thead> <tr> <th>序号</th> <th>图书ID</th> <th>图书名</th> <th>价格</th> <th>库存</th> <th>卖出数</th> <th>出版社</th> <th>操作</th> </tr> </thead> <tbody> {% for book_obj in book_obj_list %} <tr> <td>{{ forloop.counter }}</td> <td>{{ book_obj.id }}</td> <td>{{ book_obj.name }}</td> <td>{{ book_obj.price }}</td> <td>{{ book_obj.inventory }}</td> <td>{{ book_obj.sale_num }}</td> <td>{{ book_obj.publiser.name }}</td> <td> <a href="/app01/edit_book/?id={{ book_obj.id }}">修改</a> <a href="/app01/delete_book/?id={{ book_obj.id }}">删除</a> </td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> {% endblock %}
总结:创建django项目修改文件内容时需迁移数据库并写入数据库,定义变量注意调用准确,书写规范等。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。