首页 > 其他 > 详细

图书管理曾删改差

时间:2020-10-30 10:15:40      阅读:40      评论:0      收藏:0      [点我收藏+]

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

 

图书管理曾删改差

原文:https://www.cnblogs.com/xiaoxiamiaichiyu/p/13900200.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!