1.图书管理系统后端接口
1.1books/models.py 中设置表
from django.db import models class Books(models.Model): btitle = models.CharField(max_length=20) bpub_date = models.DateField() bread = models.IntegerField() bcomment = models.IntegerField() is_delete = models.BooleanField(default=False)books/models.py
1.2urls.py中设置路由
from django.urls import path from . import views urlpatterns = [ path('book/', views.BooksView.as_view()), ]books/urls.py
1.3 book/views.py视图函数
from django.http import JsonResponse import json from rest_framework.views import View from .models import * class BooksView(View): def get(self, request): books = Books.objects.filter(is_delete=False) book_list = books.values('id', 'btitle', 'bpub_date', 'bread', 'bcomment') book_list = list(book_list) data = { "code":0, "msg":"success", "books":book_list } return JsonResponse(data) def post(self,request): body_json = request.body.decode() body_dict = json.loads(body_json) btitle = body_dict.get('btitle') bpub_date = body_dict.get('bpub_date') bread = body_dict.get('bread') bcomment = body_dict.get('bcomment') book = Books(btitle=btitle, bpub_date=bpub_date, bread=bread, bcomment=bcomment) book.save() return JsonResponse({"code": 0, "msg": "success"}) def put(self, request): body_json = request.body.decode() body_dict = json.loads(body_json) id = body_dict.get('id') btitle = body_dict.get('btitle') bpub_date = body_dict.get('bpub_date') bread = body_dict.get('bread') bcomment = body_dict.get('bcomment') book = Books.objects.get(id=id) book.btitle = btitle book.bpub_date = bpub_date book.bread = bread book.bcomment = bcomment book.save() return JsonResponse({"code": 0, "msg": "success"}) def delete(self, request): body_json = request.body.decode() body_dict = json.loads(body_json) id = body_dict.get('id') book = Books.objects.get(id=id) book.is_delete = True book.save() return JsonResponse({"code": 0, "msg": "success"})books/views.py
查询
http://127.0.0.1:8000/books/book/
添加
http://127.0.0.1:8000/books/book/
{ "btitle": "我真不是大魔王05", "bpub_date": "2018-02-04", "bread": 100, "bcomment": 0 }
修改
http://127.0.0.1:8000/books/book/
{ "id": 1, "btitle": "红楼梦", "bpub_date": "2018-02-04", "bread": 100, "bcomment": 0 }
删除
http://127.0.0.1:8000/books/book/
{ "id": 1, "btitle": "红楼梦", "bpub_date": "2018-02-04", "bread": 100, "bcomment": 0 }
2 图书管理前端页面
1.1 http/apis.js添加后端请求路由
import { get, post, put, del } from './index' // 用户登录 export const login = (params, headers) => post("/login/", params, headers) export const getBookList = (params, headers) => get("/books/book/", params, headers) export const addBook = (params, headers) => post("/books/book/", params, headers) export const editBook = (params, headers) => put("/books/book/", params, headers) export const delBook = (params, headers) => del("/books/book/", params, headers)http/apis.js
1.2 router/index.js添加路由
import BookEdit from '@/components/BookEdit' import Books from '@/views/books/Books' { path:'/books', name:'Books', component:Books }, { path:'/bookEdit', name:'BookEdit', component:BookEdit },src/router/index.js
1.3 src\views\books\Books.vue父组件
<template> <div> <h1>图书管理系统</h1> <div style="margin:30px;"> <button @click="addNew">新增图书</button> <BookEdit v-show="dialogVisible" :visible.sync='dialogVisible' :data='editData' @save='save' > </BookEdit> </div> <div> <table style='margin: auto; border: solid 1px black;'> <tr> <th>图书编号</th> <th>图书名子</th> <th>出版时间</th> <th>阅读数</th> <th>评论数</th> <th>操作</th> </tr> <tr v-for="(book,index) in books" :key="book.id"> <td>{{book.id}}</td> <td>{{book.btitle}}</td> <td>{{book.bpub_date}}</td> <td>{{book.bread}}</td> <td>{{book.bcomment}}</td> <td> <button @click="edit(index)">修改</button> <button @click="del(index)">删除</button> </td> </tr> </table> </div> </div> </template> <script> import { getBookList, addBook, editBook, delBook } from '@/http/apis' import BookEdit from '@/components/BookEdit' export default { components:{ BookEdit }, data(){ return{ dialogVisible:false, books:[ { id: 3, btitle: "...", bpub_date: "2020-08-11", bread: 100, bcomment: 50 } ], editData:{ // 编辑的内容 btitle: "", bpub_date: "", bread: 0, bcomment: 0 } } }, methods:{ //1.点击新增图书时初始化数据 addNew(){ this.editData={ // 初始化 编辑内容 btitle: "", bpub_date:'', bread: 100, bcomment: 0 } this.dialogVisible=true //显示弹框 }, //2.获取图书列表 get(){ getBookList().then((data) => { // console.log(data) // books: [{btitle: "西游记", bpub_date: "2020-08-11", bread: 100, bcomment: 50}] this.books = data.books }) }, //3 修改或者添加图书 save(){ // 根据editData中的id判断是更新还是新增 // debugger console.log(this.editData) if (this.editData.id) { // 如果有id, 修改图书 //修改请求 let params = this.editData editBook(params).then((res)=>{ console.log(res) this.get() }) } else { //增加图书 addBook(this.editData).then((res) => { this.get() })} }, //点击修改弹出修改页面 edit(index){ this.editData=JSON.parse(JSON.stringify(this.books[index])) // 复制this.books[index] 的数据 // this.editData = this.books[index] // this.dialogVisible = true }, //删除 del(index){ let params={ id: this.books[index].id } delBook(params).then((res)=>{ console.log(res) this.get() })} }, created(){ this.get() } } </script> <style scoped> table tr td{ width: 150px; border:solid 1px black; } </style>src\views\books\Books.vue
1.4 src\components\BookEdit.vue子组件
<template> <div> <el-dialog title="新增图书" :visible="visible" > <div> <span>图书名称:</span> <el-input class="elinput" v-model="data.btitle" ></el-input> </div> <div> <span>发布日期:</span> <el-input class='elinput' v-model="data.bpub_date" ></el-input> </div> <div> <span>阅读量:</span> <el-input class='elinput' v-model="data.bread" ></el-input> </div> <div> <span>评论量:</span> <el-input class="elinput" v-model="data.bcomment" ></el-input> </div> <el-button @click="cancel">取消</el-button> <el-button type="primary" @click="addBook" >确定 </el-button> </el-dialog> </div> </template> <script> // import { addbook } from '@/http/apis' export default { props: ['data', 'visible'], data(){ return{ } }, methods:{ addBook(){ this.$emit('update:visible', false) this.$emit('save') }, cancel(){ this.$emit('update:visible', false) } }, mounted(){ } } </script> <style scoped> .eliput{ width: 220px; height: 40px; } </style>src\components\BookEdit.vuue
1.5 src/mian.js引入ElementUl
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './router' Vue.config.productionTip = false // 使用 elementui // npm i element-ui -S 安装到当前项目 import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })src\main.js