# Django - Django REST framework - API **Repository Path**: caesar_jo_admin/dj_project1 ## Basic Information - **Project Name**: Django - Django REST framework - API - **Description**: 由Django-rest-framework框架写的“疯狂刷题”项目,主要功能是提供用户刷题和购买练习题的项目。(个人练习) - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-02-21 - **Last Updated**: 2024-02-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # **Django REST framework-API:前后端分离项目** ## :star2:项目介绍:“疯狂刷题” 前后端分离项目练习。“疯狂刷题”使用django-rest-framework框架构建Web API项目。使用Token进行权限认证和授权管理,使用celery实现了异步发送邮件来显示用户注册功能,fastdfs分布式文件系统上传文件,elasticsearch实现题目搜索等等。 ## :star2:项目目录结构: ``` └─mydjango ├─manage.py # 管理django项目的重要命令行工具 └─mydjango # django项目配置目录 ├─settings.py # 重要配置文件 ├─urls.py # 记录路由映射关系 ├─wsgi.py # 服务器程序的入口文件 ├─__init__.py ``` ## :star2:应用目录结构: ``` └─app ├─ admin.py # django Admin 应用的配置文件 ├─ apps.py # 用于应用程序本身的属性配置文件 ├─ models.py # 用于定义应用中所需要的数据表 ├─ tests.py # 文件用于编写当前应用程序的单元测试 ├─ views.py # 用来定义视图处理函数的文件 ├─__init__.py └─ migrations # 存储数据库迁移时生成的文件 ├─__init__.py ``` ## :star2:软件架构: ![输入图片说明](images/framework.png) ## :star2: 内置功能: #### :tw-2600:1. **用户管理** : - :tw-1f33b: **用户注册** :注册时,使用Token的授权为consumer,使用celery异步邮件发送随机创建的密码。 - :tw-1f33b:**用户登录** :账号密码登录,使用Token的权限认证登录;验证码设置:使用redis数据库进行数据的临时存储。 - :tw-1f33b:**用户信息管理** :修改个人信息,修改密码,使用fastdfs分布式文件系统上传上头像。 - :tw-1f33b:**用户收获地址** :省市区的三级联动。 - :tw-1f33b: **用户升级** :普通用户升级为VIP用户。 #### :tw-2600:2. **在线刷题** : - :tw-1f33b: **使用分页器** :题目数量较多,使用分页器对数据进行管理展示。 - :tw-1f33b:**题目创建** :创建数据保存到数据库中,并且将数据存储到Elasticsearch中,便于快速搜索。 - :tw-1f33b:**题目修改** :修改数据库中的数据,同时将ES的数据进行修改。 - :tw-1f33b:**题目删除** :删除数据库中的数据,同时将ES的数据进行删除。 - :tw-1f33b: **题目搜索** :使用ik分词器(ES的插件)对搜索数据进行分析,然后搜索相关的信息。 - :tw-1f33b:**练习刷题 ,随机刷题**:普通用户可以进行刷题。 - :tw-1f33b: **模拟卷等题目** :VIP权限的用户才能进行刷题。 #### :tw-2600:3. **练习册书店** : - :tw-1f33b: **商品上架** :创建店铺,在店铺中上架商品,注意商品分类,便于按类别搜索商品;使用fastdfs分布式文件系统上传上商品的图片。 - :tw-1f33b:**加入购物车** :用户将要购买的商品加入购物车,判断要商品库存是否足够。 - :tw-1f33b:**购买,生成订单** :将购物车中要购买的商品进行下单,按一定规律生成订单号,选择支付方式(支付宝,到付),填写用户收获地址。创建事务,形成订单表和订单商品,自动计算商品数量和总金额,配合保存点和乐观锁,保证并发时数据的一致性和完整性。 - :tw-1f33b:**商品支付** :调用支付宝开发平台的Alipay接口,完成支付宝支付的测试,支付成功会自动修改订单的状态。 - :tw-1f33b:**订单商品的评分** :购买商品的用户可以对商品进行5星打分,并给予评价,可以选择匿名操作。 - :tw-1f33b: **商品评论** :其他用户可以在评论区中对商品进行质量等方面进行询问、讨论,店家也会一同讨论。 ## :star2:准备工作: - 在linux中给虚拟机创建一个虚拟环境 - python >=3.6 - 数据库:mysql - django > 3.0 - djangorestframework > 3.0 ## :star2:安装的库:pip install “X” - **Token认证** :djangoresetframework-jwt - **验证码** :pillow、django-redis - **异步** :celery - **fastdfs文件上传** :py3Fdfs、requests、mutagen - **ES(ElasticSearch)搜索** :elasticsearch、Django-haystack - **支付宝接口** :python-alipay-sdk - **uWSGI服务器** :uwsgi ## :star2:docker下载: - :blossom: **FastDFS分布式文件系统** : - :tw-1f340: docker pull delron/fastdfs - :tw-1f340:**启动tracker** :docker run -dit --network=host --name tracker01 -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker - :tw-1f340:**创建Storage** :docker run -dit --network=host --name storage01 -e TRACKER_SERVER=10.0.2.15:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage - :blossom:**ES搜索** : - :tw-1f340:**ES下载** :docker run -d --name es01(容器名) -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2 - :tw-1f340:**IK分词器** :docker cp ./elasticsearch-analysis-ik-7.6.2.zip es01:/usr/share/elasticsearch/plugins/ - :tw-1f340:**Kibana下载** :docker run --name kibana -e ELASTICSEARCH_HOSTS=http://10.0.2.15:9200 -p 5601:5601 -d kibana:7.6.2 - :tw-1f340:**Head下载** :docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5 ## :star2:Postment接口演示: ![输入图片说明](images/users.png) ![输入图片说明](images/register.png) ![输入图片说明](images/vip.png) ![输入图片说明](images/area1.png) ![输入图片说明](images/area2.png) ![输入图片说明](images/label.png) ![输入图片说明](images/practice.png) ![输入图片说明](images/random.png) ![输入图片说明](images/vip_practice.png) ![输入图片说明](images/ES.png) ![输入图片说明](images/shop.png) ![输入图片说明](images/shop_commodity.png) ![输入图片说明](images/shop_commodity2.png) ![输入图片说明](images/commodities.png) ![输入图片说明](images/classification1.png) ![输入图片说明](images/classification2.png) ![输入图片说明](images/classifi_commodity1.png) ![输入图片说明](images/classifi_commodity2.png) ![输入图片说明](images/commoditysearch.png) ![输入图片说明](images/commoditysearch1.png) ![输入图片说明](images/order.png) ![输入图片说明](images/ordergoods.png) ![输入图片说明](images/ordergoodscomment.png) ![输入图片说明](images/goodscomment_discuss.png)