创建项目

pip install djangorestframework
pip install -i https://pypi.douban.com/simple django==2.0.2
pip install markdown
pip install django-filter
pip install pillow
pip install pymysql

初始化

django-admin startproject MxShop
python manage.py startapp users

新建两个python package

  • extra_apps   (扩展的源码包)
  • apps              (放所有app)

新建两个文件夹

  • media       (保存图片)
  • db_tools   (数据库相关)

把extra_apps和apps标记为sources root,然后settings中也要加路径

import sys
sys.path.insert(0,BASE_DIR)
sys.path.insert(0,os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0,os.path.join(BASE_DIR, 'extra_apps'))

数据模型

在apps目录下创建三个app

  • goods                     商品
  • trade                       交易
  • user_operation       用户操作

users/models.py   重新定义用户模型,UserProfile和VerifyCode(验证码模型)

setting.py

#重载系统的用户,让UserProfile生效
AUTH_USER_MODEL = 'users.UserProfile'

goods/models.py -->  GoodsCategory(商品分类)、Goods(商品)、GoodsImage(商品轮播图)、Banner(首页轮播的商品)、HotSearchWords(热搜词)

trade/models.py  -->  ShoppingCart(购物车)、OrderInfo(订单信息)、OrderGoods(订单内的商品详情)

user_operation/models.py --> UserFav(用户收藏操作)、UserAddress(用户收货地址)、UserLeavingMessage(用户留言)

后台管理

安装第三方插件

  • xadmin                              xadmin安装方法
  • DjangoUeditor                  富文本编辑器安装方法

安装好后把xadmin和DjangoUeditor放到extra_apps目录下面

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',
    'goods',
    'trade',
    'user_operation',
    'rest_framework',
    'xadmin',
    'crispy_forms',
    'DjangoUeditor'
]


MEDIA_ROOT = os.path.join(BASE_DIR, "media")


配置MySQL数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mxshop',        #数据库名字
        'USER': 'root',          #账号
        'PASSWORD': '123456',    #密码
        'HOST': '127.0.0.1',     #IP
        'PORT': '3306',          #端口
        #这里引擎用innodb(默认myisam)
        #因为后面第三方登录时,要求引擎为INNODB
        # 'OPTIONS':{'init_command': 'SET storage_engine=INNODB'}, #这样设置会报错,改为
        "OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"}
    }
}

安装MySQLClient

下载地址https://www.lfd.uci.edu/~gohlke/pythonlibs/

pip install mysqlclient-1.3.12-cp36-cp36m-win_amd64

__init__.py添加

import pymysql
pymysql.install_as_MySQLdb()

在xadmin中添加ueditor

xadmin/plugins/ueditor.py

urls.py

from django.urls import path, include
import xadmin

urlpatterns = [
    path('xadmin/', xadmin.site.urls),
    path('ueditor/', include('DjangoUeditor.urls')),
]

将app注册到xadmin,修改adminx.py、apps.py和__init__.py

生成数据库表

python manage.py makemigrations
python manage.py migrate

导入测试数据,在db_tools目录

运行 import_category_data.py和import_goods_data.py

创建管理员 python manage.py createsuperuser  -->    copper, dong*2019

商品列表

访问http://127.0.0.1:8000/goods/ 可以获取商品列表信息的json数据

APIview实现商品列表页

  • pip install coreapi                         drf的文档支持
  • pip install django-guardian           drf对象级别的权限支持
#drf文档,title自定义
    path('docs',include_docs_urls(title='仙剑奇侠传')),
    path('api-auth/',include('rest_framework.urls')),

seriailizers.py中使用ModelSerializer

views.py中用GeneiricAPIView,它继承APIView,封装了很多方法,比APIView功能更强大


用的时候需要定义queryset和serializer_class GenericAPIView里面默认为空 queryset = None serializer_class = None


添加分页

REST_FRAMEWORK = {
    #分页
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    #每页显示的个数
    'PAGE_SIZE': 10,
}

http://127.0.0.1:8000/goods/?page=4&page_size=2

ViewSets和Routers结合使用

django 电商数据分析 django电商项目_django 电商数据分析

REST framework 的 Request 类扩展与标准的 HttpRequest,并做了相应的增强,比如更加灵活的请求解析(request parsing)和认证(request authentication)。

过滤,“django_filters”,

filters.py,自定义一个过滤器,搜索和排序

商品类别数据展示

类别序列化

http://127.0.0.1:8000/categorys/

跨域问题,pip install django-cors-headers

用户登录与手机注册

token会生成一张表authtoken_token,所以要运行migrations和migrate

django 电商数据分析 django电商项目_mysql_02

如果成功通过身份验证,TokenAuthentication 将提供以下凭据。

  • request.user 是一个 Django User 实例.
  • request.auth 是一个 rest_framework.authtoken.models.Token 实例.

未经身份验证的响应被拒绝将导致 HTTP 401 Unauthorized 的响应和相应的 WWW-Authenticate header。例如:

drf的token缺点

  • 保存在数据库中,如果是一个分布式的系统,就非常麻烦
  • token永久有效,没有过期时间。

json web token方式完成用户认证

$ pip install djangorestframework-jwt

jwt接口它默认采用的是用户名和密码登录验证,如果用手机登录的话,就会验证失败,所以我们需要自定义一个用户验证

自定义用户认证,短信验证码,#apps/utils/yunpian.py

users/serializers.py

用户密码修改

商品详情页功能

查看商品

pycharm远程代码调试

云服务

支付包沙箱环境配置

https://open.alipay.com/platform/home.htm

首页、商品数量、缓存和限速功能开发

权限

social_django集成第三方登录

微博http://open.weibo.com/authentication