基于python的django框架数码电子产品销售交易商城电商平台设计

目录
摘 要 I
目录 III
第一章 绪论 1
1.1 课题研究背景及意义 1
1.2 国内外研究现状 2
1.3 本文的主要工作 3
第二章 技术选型 4
2.1 Python 4
2.2 Django 5
2.3 MySQL 6
2.4 Django Rest Framework 7
2.5 Vue 8
第三章 系统分析 9
3.1 可行性分析 9
3.2 系统需求分析 10
3.2.1 业务需求分析 10
3.2.2 用户需求 11
3.2.3 功能需求分析 12
3.2.4 非功能需求分析 14
第四章 总体设计 16
4.1 总体功能模块设计 16
4.2 数据库设计 18
4.2.1 数据表结构 18
4.2.2 数据表字段 18
第五章 详细设计与实现 25
5.1 用户模块 25
5.2 商品模块 32
5.3 用户操作模块 41
5.4 交易模块 44
5.5 后台模块 51
5.6 其他模块 52
第六章 系统测试与部署 54
6.1 测试环境 54
6.2 系统测试 54
6.3 测试内容 55
6.4 测试结果 58
第七章 全文总结 59
参考文献 60
致谢 61
第三章 系统分析
3.1 可行性分析
可行性研究的目的就是用最小的代价在尽可能短的时间里确定问题是否能解决。本章将从以下四个方面去阐述该项目的可行性。
从经济可行性的角度分析,该项目的实施不涉及物力成本,只涉及人力的成本。若该项目是市场上的某个商业项目,确定项目是否值得投资开发,即要分析在整个软件生存周期中所花费的代价和效益之间的度量。本课题属于毕业设计,不涉及成本和效益,默认可行。
从技术可行性角度讲,如今要实现一个电商网站,技术已经不是问题,本项目中将使用开源免费的Python生态中的多个组件去完成这样一个电商网站,使用Django去实现网站基础的搭建、使用DRF去实现网站向前端所提供的各个接口、使用Vue实现前端页面的制作,期间设计的第三方登录、第三方支付都可以使用第三方开放平台所提供的API来实现,在项目部署时,本项目同样使用开源免费的Nginx容器。以上所提到的各种技术都已相对成熟,并且在行业内也属于领先水平,所以在技术上,是完全行得通的。
从操作可行性上分析,本项目开发阶段是在Windows环境下实施的,在这个环境下各种操作都非常方便,各种开发工具一应俱全,对于编写代码也十分便利,是十分友好的开发环境。项目编码结束后将会部署在Linux环境下,这个环境对于Python的支持十分到位,同时其灵活性和稳定性也相较于Windows更高,操作也十分便捷。所以在操作可行性上,是可行的。
最后从法律可行性上讲,本项目并不涉及与国家安全相关的一些信息,也不会危害社会。在项目的安全性得到保障的条件下,也不会泄露用户的个人信息。本项目属于B2C的电商网站,所出售的产品都是商家自己的产品,这也免去了很多C2C电商所产生的法律问题。在法律上,项目是可行的。
综上所述,本项目在经济可行性、技术可行性、操作可行性和法律可行性上都行得通,是值得去实施的一个项目。
3.2 系统需求分析
软件需求分析是软件开发期的第一个阶段,是软件生存周期最重要的一步,是关系到软件开发成败的关键步骤。它在问题定义和可行性研究阶段之后进行。它的基本任务是准确地回答"系统必须做什么?"这个问题。虽然在可行性研究阶段粗略了解了用户的需求,至还提出了一些可行的方案,但是可行性研究的基本目的是最小的代价在尽可能短的时间内确定问题是否存在可行的解法,因此许多细节都被忽略了,一个微小的错漏都可能导致误解或铸成系统的大错,在纠正时付出巨大的代价。因而可行性研究并不能代替需求分析,它实际上并没有准确地回答"系统必须做什么"这个关键问题。
需求分析是整个软件生命周期中非常重要的阶段,决定着软件项目的成败,在这个阶段本章将从业务需求、用户需求、功能需求和非功能需求这四个方面去阐述项目的需求问题。
3.2.1 业务需求分析
业务需求主要是面向投资人的需求,通过客户访谈的方式可以获取项目的业务需求。客户访谈是一个直接与客户交流的过程,既可以了解高层用户对软件的要求,也可以直接听取用户的呼声。
通过带入甲方角色来分析项目的业务需求。
甲方需要这样一个平台,在这个平台上,作为直接向用户出售商品商户,可以轻松地管理商品,这里面包括对商品的分类管理、首页头图投放等问题。在此之上,甲方也需要方便地管理用户和订单,若用户对于账户或订单有一些变更,作为管理者的甲方管理员可以轻松的进行管理。还有其最基本的功能,要完成一个或多个商品的交易流程,这个过程一定要是安全的。
业务需求分析是客户或机构组织层面的需求分析。由于这一些人并不是专业的技术人员,所以我们在与他们进行沟通是要注意引导和提取他们对系统业务需求。
项目的系统目标是构建一个B/S架构的电子设备线上商城,管理员可以进行用户的权限管理、信息管理,还可以进行交易管理和订单管理,也可以进行商品的添加、删除、修改等操作。用户可以注册登录商城账号,浏览商品,并对商品进行过滤筛选,完成一个完整的交易。实现以上功能即满足基本业务需求。
3.2.2 用户需求
用户需求是在软件设计和开发的过程中以用户为核心,进心调查与分析,发掘用户的具体要求。在本系统中,有以下两种重要角色,用户和管理员。作为用户,主要任务是访问网站进行商品购买和其他操作,而作为管理员,主要是对于数据库中的商品、订单、用户进行管理操作。项目中将系统划分为以下几个模块,这也是Django提倡开发者这样做的,以模块的方式划分职责,将系统划分为商品模块、交易模块、用户操作模块、用户模块和后台模块。
在本项目中,配合使用DRF,使用REST风格的API使接口更加通俗易懂且易于管理维护。
在本项目中,主要由四个模块组成,这四个模块分别是用户模块、用户操作模块、交易模块和商品模块,本文转载自http://www.biyezuopin.vip/onews.asp?id=13089这四个模块相互协作,完成网站的主体功能,具体主体功能模块设计图如图4-2:
基于python的django框架数码电子产品销售交易商城电商平台设计_第1张图片
图4-2 功能模块设计图

from django.shortcuts import render

# Create your views here.
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from django.db.models import Q
from rest_framework.mixins import CreateModelMixin
from rest_framework import viewsets
from .serializers import SmsSerializer, UserRegSerializer, UserDetailSerializer
from rest_framework.response import Response
from rest_framework import status
from random import choice
from rest_framework import mixins
from rest_framework import permissions
from rest_framework import authentication
from rest_framework_jwt.authentication import JSONWebTokenAuthentication

from rest_framework_jwt.serializers import jwt_encode_handler, jwt_payload_handler

from utils.yunpian import YunPian
from .models import VerifyCode

User = get_user_model()


class CustomBackend(ModelBackend):
    """
    自定义用户验证
    """
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = User.objects.get(Q(username=username) | Q(mobile=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None


class SmsCodeViewset(CreateModelMixin, viewsets.GenericViewSet):
    """
    发送短信验证码
    """
    serializer_class = SmsSerializer

    def generate_code(self):
        """
        生成四位数字的验证码
        :return:
        """
        seeds = "1234567890"
        random_str = []
        for i in range(4):
            random_str.append(choice(seeds))

        return "".join(random_str)

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        mobile = serializer.validated_data["mobile"]
        # yun_pian = YunPian("")

        code = self.generate_code()
        # sms_status = yun_pian.send_sms(code=code, mobile=mobile)
        sms_status = {}

        sms_status["code"] = 0

        if sms_status["code"] != 0:
            return Response({
                "mobile": sms_status["msg"]
            }, status=status.HTTP_400_BAD_REQUEST)
        else:
            code_record = VerifyCode(code=code, mobile=mobile)
            code_record.save()
            return Response({
                "mobile": mobile
            }, status=status.HTTP_201_CREATED)


class UserViewset(CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
    """
    用户(用户注册,用户获取)
    """
    serializer_class = UserRegSerializer
    queryset = User.objects.all()
    authentication_classes = (authentication.SessionAuthentication, JSONWebTokenAuthentication)

    # 在用户注册的时候,不可以使用这种permission
    # permission_classes = (permissions.IsAuthenticated, )
    # 通过重写get_permissions函数,动态的加载permission_classes
    def get_permissions(self):
        if self.action == "retrieve":
            return [permissions.IsAuthenticated()]
        elif self.action == "create":
            return []
        return []

    # 通过重写get_serializer_class函数,动态加载Serializer
    def get_serializer_class(self):
        if self.action == "retrieve":
            return UserDetailSerializer
        elif self.action == "create":
            return UserRegSerializer
        return UserDetailSerializer

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = self.perform_create(serializer)

        re_dict = serializer.data
        pyload = jwt_payload_handler(user)
        re_dict["token"] = jwt_encode_handler(pyload)
        re_dict["name"] = user.name if user.name else user.username

        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

    # 重写get_object方法,在url中随意请求一个,都会返回当前用户
    def get_object(self):
        return self.request.user

    def perform_create(self, serializer):
        return serializer.save()




基于python的django框架数码电子产品销售交易商城电商平台设计_第2张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第3张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第4张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第5张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第6张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第7张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第8张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第9张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第10张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第11张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第12张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第13张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第14张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第15张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第16张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第17张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第18张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第19张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第20张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第21张图片

基于python的django框架数码电子产品销售交易商城电商平台设计_第22张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第23张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第24张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第25张图片
基于python的django框架数码电子产品销售交易商城电商平台设计_第26张图片

你可能感兴趣的:(django,python,电子商城系统,购物商城,毕业设计)