Django Rest Framework 实战

慕课网 vue +Django restful framework 电商实战
  • 开发及项目搭建
    • 开发环境搭建
      • pycharm
      • 虚拟环境
      • mysql  navicat
      • mysql 绑定ip 0.0.0.0.后多人访问,需设置权限,否则仅本地可连
        • GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    • 前端的开发环境搭建
      • webstorm
      • nodejs
      • cnpm     npm install -g cnpm --registry=https://registry.npm.taobao.org
      • 运行起来
    • 进入前端代码目录 online-store 输入 
      • cnpm install  会在当前目录生成 node_modules  文件夹,所有的依赖文件都会存放在这个夹
      • 安装完依赖后,输入cnpm run dev
      • 项目已运行在本机8080 端口上
    • Django 2.0
    • git 代码托管  托管私有项目,共有项目免费托管  ,github
    • 命令行创建虚拟环境
      • mkvirtualenv -p xxxxx/python.exe(python 安装路径)  myvirtualenv(虚拟环境名)
      • pip install djangorestframework
      • pip install django
      • pip install markdown
      • pip install django-filter
    • add 'rest_framework' to your INSTALLED_APPS setting.
  • mysql 配置
    • DATABASES = {
    • 'default': {
    • 'ENGINE': 'django.db.backends.mysql',
    • 'NAME': 'GP1Day15',
    • 'USER':'root',
    • 'PASSWORD':'huawei@1234',
    • 'HOST':'localhost',
    • 'PORT':3306
  • mysql 驱动安装
    • import pymysql
    • pymysql.install_as_MySQLdb()
  • 慕学
    • 安装mysqlclient pip install mysqlclient
  •     Mysql 建库
    • 命令行   create database MyMX default charset=utf8;
  • 安装处理图片的包
  • 新建包  apps   把原先的user 拖进去
  • 新建包 extra_apps  放置第三方包  ,对第三方包进行修改,随项目打包
  • 新建media 文件夹
  • 新建templates 文件夹  防止静态文件
  • 新建文件夹 db_tools  初始化脚本
  • 将apps 和extra_apps 设置成source derectory   方便导入包
  • 将BASE_DIR apps  extra_apps 加入搜索路径
    • setting 文件中
      • 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'))
  • 项目设计思路
    • 根据前端页面进行分类,确定app  (users,goods,trade,user_operation)
    • 设计user的model
      • users
  
        • 对应字段
          • 继承AbstractUser model 将用户的基本字段继承,再添加一些字段
          • 在setting 里添加 AUTH_USER_MODEL = 'users.UserProfile'  覆盖系统本省的用户model
 
    • goods model 的设计
      • 用到了富文本  DjangoUeditor(做了修改不支持3.6)
 
 
    • 将DjangoUeditor 拷入到 extra_apps
    • 在settiing 中注册 app
      • DjangoUeditor
      • users
      • goods
      • trade
      • user_operation
    • 将源代码中xadmin 拷贝到 extra_apps  (做了修改,兼容3.6)
    • 在setting  中注册crispy_forms  和xadmin
    • 在github 上搜索xadmin 找到 requirements.txt pip install xadmin 的相关依赖
    • 修改总路由
    • 创建超级管理员
      • python manage.py createsuperuser
    • 在apps.py 中增加verbose_name ="中文名",就可以在Xadmin 视图中显示中文
    • 导入数据
      • 把 media 目录中的goods copy 到media 文件夹 ,里面都是图片
      • 将media brands 拷贝到 同目录,也是图片
      • 将db_tools 中的两个文件  category_data product_data 拷贝到同目录
      • 在db_tools 建立 data 目录  ,把上面两个文件拖进去
      • 运行import_category_data  import_product_data  插入数据
    • setting 中配置MEDIA_ROOT = os.path.join(BASE_DIR,"media")
    • 在url.py 中
      •  
    • 商品详情无法展示,注释
        • render() got an unexpected keyword argument 'renderer' 

        • 注释掉 boundfield.py 中的 renderer=self.form.renderer  富文本可访问了
    • 前后端分离优缺点
 
 
  • Restfull 实战
    • 文档
      • pip install coreapi
      • 在总url 中 增加
      • from rest_framework.documentation import include_docs_urls
      • re_path(r'docs/',include_docs_urls(title="慕学生鲜"))
      • 在setting 中注册,rest-framework app
      • 在UR;添加path('api-auth',include('rest_framework.urls',namespace='rest-framework')),
  • 配置路由
  • 设置分页
  • 模型间关系,自己画图理清楚
 
  • 过滤
    • 重写 get_queryset 方法
    • 使用restfull 的filter 模块
  • 浏览器跨域
 
 
  • jwt  
    • 安装pip install djangorestframework-jwt
    • setting 配置
    • url 配置
    • setting 中增加参数 AUTHENTICATION_BACKENDS
    • 增加JWT_AUTH
    •  
  • 发送短信
    • 云片网
    • 在云片网设置ip白名单,仅允许指定的ip 发送短信
  • signals
    • post_save()
      • create_auth_token
      • 在apps 中重写 ready  函数
  • drf 的缓存机制
    • pip  install drf-extensions
    • 用于 get 返回列表和详情页
    • 继承 CacheResponseMixin ,并将 其放在继承的首位(list 和 retrieve 之前)
    • 服务器重启后数据丢失,存在内存中,不适合分布式开发
  • 限流
    • setting  
    • 以用户的session 或标识来判断, UserRyteThrottle
    • 以用户的IP 来限制
      • AnonRateThrottle 
    • 第三方登录
  • 使用框架实现第三方登录跳转
    • pip install social-auth-app-django
    • setting 里做好相关配置,配置路由  path('', include('social_django.urls', namespace='social')),
    • 访问时会先在cookie 里面找 user  ,找到就直接登录,找不到就创建一个  mymx.social_auth_usersocialauth ,和user 表里
    • 第三方认证只会帮我们跳转到指定的界面,未登录状态,需要重写 social_core ,设置将 ursername 和token 保存到 cookie 中
    • 127.0.0.1:8000/login/webo/ 即可跳转微博登录界面,填好后会已登录状态重定向到 redirect_url
 
  • sentry  错误日志生成系统
    • github 上有
 
开启 https
 
 
 
  • 安全随机数
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/nancyfeng/p/13577963.html