分享一套【优质Python源码】基于Python的Django+Vue图书借阅推荐系统

0 阅读3分钟

大家好,我是python222_小锋老师,分享一套优质的基于Python的Django+Vue图书借阅推荐系统  。  

1.jpg

项目简介

本文旨在设计和实现一种基于Python的图书借阅系统,以满足图书馆和阅读者的管理和借阅需求。该系统采用Python作为主要开发语言,结合Django框架进行后端开发,MySQL数据库用于数据存储,同时利用Vue.js构建前端界面,实现了一个全方位的图书管理平台。

该系统旨在提供用户友好的界面和高效的功能,以便图书管理员能够轻松管理图书信息、借阅记录和用户信息。用户可以通过系统进行图书搜索、借阅、归还等操作,实现了便捷的图书借阅流程。系统还支持用户注册、登录、个人信息管理等功能,提升了用户体验和管理效率。在技术实现方面,系统采用了Python作为开发语言,具有良好的可读性和扩展性,便于团队协作开发。Django框架提供了强大的后端支持,包括路由、模型、视图等功能,简化了开发流程并提高了开发效率。MySQL数据库作为数据存储工具,保证了数据的安全性和稳定性。Vue.js作为前端框架,实现了动态的用户界面,提升了用户交互体验。通过本系统的设计与实现,图书馆管理者可以更加高效地管理图书资源,提供更好的借阅服务;读者可以通过系统方便地查找图书信息、借阅图书,提升了图书借阅的便捷性和效率。同时,系统采用Python、Django、MySQL和Vue等技术,展现了这些技术在实际项目中的应用和价值,为类似系统的开发提供了参考和借鉴。综上所述,基于Python的图书借阅系统结合了多种先进技术,实现了图书管理和借阅的全面化,为图书馆管理和读者提供了便捷、高效的服务平台,具有一定的实用和推广价值。

源码下载

链接: pan.baidu.com/s/1YICZQ_KM…

提取码: 1234

相关截图

2.jpg

5.jpg

6.jpg

7.jpg

8.jpg

核心代码

# Create your views here.
import datetime

from rest_framework.decorators import api_view, authentication_classes

from myapp.auth.authentication import TokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Borrow, Book
from myapp.serializers import BorrowSerializer


@api_view(['GET'])
def list_api(request):
    if request.method == 'GET':
        userId = request.GET.get('userId', -1)
        borrowStatus = request.GET.get('borrowStatus', '')

        borrows = Borrow.objects.all().filter(user=userId).filter(status__contains=borrowStatus).order_by('-borrow_time')
        serializer = BorrowSerializer(borrows, many=True)
        return APIResponse(code=0, msg='查询成功', data=serializer.data)


@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def create(request):
    """
    创建借书
    """

    data = request.data.copy()
    if data['user'] is None or data['book'] is None:
        return APIResponse(code=1, msg='参数错误')

    book = Book.objects.get(pk=data['book'])
    if book.repertory <= 0:
        return APIResponse(code=1, msg='库存不足')

    borrows = Borrow.objects.filter(book=data['book']).filter(user=data['user']).filter(status='1')
    if len(borrows) > 0:
        return APIResponse(code=1, msg='您已经借过该书了')

    create_time = datetime.datetime.now()

    data['status'] = '1'
    data['delayed'] = False
    data['create_time'] = create_time
    data['expect_time'] = create_time + datetime.timedelta(days=60)
    serializer = BorrowSerializer(data=data)
    if serializer.is_valid():
        serializer.save()
        # 减库存
        book.repertory = book.repertory - 1
        book.save()

        return APIResponse(code=0, msg='借书成功', data=serializer.data)
    else:
        print(serializer.errors)
        return APIResponse(code=1, msg='借书失败')


@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def return_book(request):
    """
    还书
    """
    try:
        pk = request.GET.get('id', -1)
        borrow = Borrow.objects.get(pk=pk)
    except Borrow.DoesNotExist:
        return APIResponse(code=1, msg='对象不存在')

    data = {
        'status': 2
    }
    serializer = BorrowSerializer(borrow, data=data)
    if serializer.is_valid():
        serializer.save()
        # 加库存
        bookId = request.data['book']
        book = Book.objects.get(pk=bookId)
        book.repertory = book.repertory + 1
        book.save()

        # 加积分
        borrow.user.score = borrow.user.score + 1
        borrow.user.save()

        return APIResponse(code=0, msg='还书成功', data=serializer.data)
    else:
        print(serializer.errors)
        return APIResponse(code=1, msg='更新失败')


@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def delay(request):

    try:
        pk = request.GET.get('id', -1)
        borrow = Borrow.objects.get(pk=pk)
    except Borrow.DoesNotExist:
        return APIResponse(code=1, msg='对象不存在')

    if borrow.delayed:
        return APIResponse(code=1, msg='已超最大延期次数')
    else:
        data = {
            "delayed": True,
            "expect_time": borrow.expect_time + datetime.timedelta(days=30)
        }
        serializer = BorrowSerializer(borrow, data=data)
        if serializer.is_valid():
            serializer.save()
            return APIResponse(code=0, msg='延期成功', data=serializer.data)
        else:
            print(serializer.errors)
            return APIResponse(code=1, msg='延期失败')