创建项目
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结合使用
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
如果成功通过身份验证,TokenAuthentication
将提供以下凭据。
-
request.user
是一个 DjangoUser
实例. -
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