头图

教程总体简介:欢迎来到美多商城! 项目需求分析 1. 项目主要页面介绍 2. 归纳项目主要模块 3. 知识要点 项目架构设计 1. 项目开发模式 2. 项目运行机制 项目介绍 创建工程 1. 准备项目代码仓库 3. 创建美多商城工程 配置开发环境 1. 新建配置文件 2. 指定开发环境配置文件 配置Jinja2模板引擎 1. 安装Jinja2扩展包 配置MySQL数据库 3. 安装PyMySQL扩展包 配置Redis数据库 1. 安装django-redis扩展包 配置工程日志 2. 准备日志文件目录 3. 日志记录器的使用 4. Git管理工程日志 配置前端静态文件 2. 指定静态文件加载路径 工程创建和配置 项目准备 收货地址 展示地址前后端逻辑 1. 展示地址接口设计和定义 设置默认地址 2. 设置默认地址后端逻辑实现 修改地址标题 3. 修改地址标题前端逻辑实现 修改密码 1. 修改密码后端逻辑 用户中心 商品数据库表设计 SPU和SKU 1. SPU介绍 思考 首页广告数据库表分析 2. 定义首页广告模型类 文件存储方案FastDFS 1. FastDFS介绍 准备商品数据 容器化方案Docker 1. Docker介绍 2. Docker安装(ubuntu 16.04) Docker和FastDFS上传和下载文件 1. Docker安装运行FastDFS 3. 浏览器下载并渲染图片 录入商品数据和图片数据 1. SQL脚本录入商品数据 2. FastDFS服务器录入图片数据 首页广告 展示首页商品频道分类 1. 分析首页商品频道分类数据结构 自定义Django文件存储类 1. Django文件存储类url()方法介绍 商品列表页分析 1. 商品列表页组成结构分析 列表页面包屑导航 列表页分页和排序 列表页热销排行 1. 查询列表页热销排行数据 全文检索方案Elasticsearch 1. 全文检索和搜索引擎原理 3. 使用Docker安装Elasticsearch 商品搜索 Haystack扩展建立索引 1. Haystack介绍和安装配置 3. 全文检索测试 渲染商品搜索结果 1. 准备商品搜索结果页面 商品详情页分析和准备 3. 商品详情页初步渲染 展示详情页数据 1. 查询和渲染SKU详情信息 3. 查询和渲染详情、包装和售后信息 商品详情页 统计分类商品访问量 设计浏览记录存储方案 1. 存储数据说明 保存和查询浏览记录 1. 保存用户浏览记录 商品 购物车存储方案 1. 登录用户购物车存储方案 购物车管理 添加购物车 展示商品页面简单购物车 订单 结算订单 1. 结算订单逻辑分析 4.结算订单页面渲染 创建订单数据库表 2. 订单模型类迁移建表 保存订单基本信息和订单商品信息 2. 保存订单基本信息 使用事务保存订单数据 1. Django中事务的使用 展示用户注册页面 创建用户模块子应用 2. 查看项目导包路径 追加导包路径 2. 重新注册用户模块应用 定义用户模型类 2. Django默认用户模型类 用户注册业务逻辑分析 用户注册接口设计和定义 1. 设计接口基本思路 2. 用户注册接口设计 提交订单 使用乐观锁并发下单 1. 并发下单问题演示和解决方案 3. MySQL事务隔离级别 展示提交订单成功页面 我的订单 订单支付功能 保存订单支付结果 评价订单商品 详情页展示评价信息 支付 页面静态化 MySQL读写分离 性能优化 状态保持 1. login()方法介绍 3. 查看状态保持结果 用户名重复注册 1. 用户名重复注册逻辑分析 图形验证码逻辑分析 容联云通讯短信平台 2. 容联云通讯短信SDK测试 3. 封装发送短信单例类 短信验证码后端逻辑 1. 短信验证码接口设计 补充注册时短信验证逻辑 避免频繁发送短信验证码 pipeline操作Redis数据库 1. pipeline的介绍 生产者消费者设计模式 RabbitMQ介绍和使用 3. 新建administrator用户 4. RabbitMQ配置远程访问 Celery介绍和使用 2. 创建Celery实例并加载配置 4. 启动Celery服务 5. 调用发送短信任务 6. 补充celery worker的工作模式 异步方案RabbitMQ和Celery 验证码 账号登录 用户名登录 3. 用户名登录接口定义 首页用户名展示 2. 用户名写入到cookie 3. Vue渲染首页用户名 退出登录 判断用户是否登录 1. 展示用户中心界面 2. is_authenticate 判断用户是否登录 3. login_required装饰器 判断用户是否登录 4. 登录时next参数的使用 1. 定义模型类基类 OAuth2.0认证获取openid 2. 接收Authorization Code 4. 本机绑定www.meiduo.site域名 openid是否绑定用户的处理 1. 判断openid是否绑定过用户 4. 补充itsdangerous的使用 用户基本信息 添加邮箱后端逻辑 3. 判断用户是否登录并返回JSON Django发送邮件的配置 2. 准备发邮件服务器 发送邮箱验证邮件 1. 定义和调用发送邮件异步任务 2. 生成邮箱验证链接 添加和验证邮箱 省市区三级联动 2. 准备省市区模型和数据

完整笔记资料代码:https://gitee.com/yinuo112/Backend/tree/master/Django/前后端...

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

展示用户注册页面

创建用户模块子应用

1. 创建用户模块子应用

1.准备apps包,用于管理所有应用

2.在apps包下创建应用users
$ cd ~/projects/meiduo_project/meiduo_mall/meiduo_mall/apps
$ python ../../manage.py startapp users

2. 查看项目导包路径

重要提示:
  • 若要知道如何导入users应用并完成注册,需要知道项目导包路径

已知导包路径
  • meiduo_project/meiduo_mall

已知 'users'应用所在目录

  • meiduo_project/meiduo_mall/meiduo_mall/apps/users

得到导入'users'应用的导包路径是:meiduo_mall/apps/users

3. 注册用户模块子应用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'meiduo_mall.apps.users', # 用户模块应用
]
注册完users应用后,运行测试程序。

追加导包路径

思考:
  • 是否可以将注册users应用做的更加简便?
  • 按照如下形式,直接以应用名users注册
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'users', # 用户模块应用
]
分析:
  • 已知导包路径

    • meiduo_project/meiduo_mall
  • 已知'users'应用所在目录

    • meiduo_project/meiduo_mall/meiduo_mall/apps/users
  • 若要直接以应用名'users'注册

    • 需要一个导包路径:meiduo_project/meiduo_mall/meiduo_mall/apps

解决办法

* 追加导包路径:`meiduo_project/meiduo_mall/meiduo_mall/apps`

1. 追加导包路径

1.查看项目BASE_DIR

2.追加导包路径

2. 重新注册用户模块应用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'users', # 用户模块应用
]
重新注册完users应用后,运行测试程序。

3. 知识要点

  1. 查看导包路径

    • 通过查看导包路径,可以快速的知道项目中各个包该如何的导入。
    • 特别是接手老项目时,可以尽快的适应项目导包的方式。
  2. 追加导包路径

    • 通过追加导包路径,可以简化某些目录复杂的导包方式。

展示用户注册页面

1. 准备用户注册模板文件

加载页面静态文件
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>美多商城-注册</title>
    <link rel="stylesheet" type="text/css" href="{{ static('css/reset.css') }}">
    <link rel="stylesheet" type="text/css" href="{{ static('css/main.css') }}">
</head>

2. 定义用户注册视图

class RegisterView(View):
    """用户注册"""

    def get(self, request):
        """
        提供注册界面
        :param request: 请求对象
        :return: 注册界面
        """
        return render(request, 'register.html')

3. 定义用户注册路由

1.总路由
urlpatterns = [
    # users
    url(r'^', include('users.urls', namespace='users')),
]
2.子路由
urlpatterns = [
    # 注册
    url(r'^register/$', views.RegisterView.as_view(), name='register'),
]

展示用户注册页面

定义用户模型类

1. Django默认用户认证系统

  • Django自带用户认证系统

    • 它处理用户账号、组、权限以及基于cookie的用户会话。
  • Django认证系统位置

    • django.contrib.auth包含认证框架的核心和默认的模型。
    • django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联。
  • Django认证系统同时处理认证和授权

    • 认证:验证一个用户是否它声称的那个人,可用于账号登录。
    • 授权:授权决定一个通过了认证的用户被允许做什么。
  • Django认证系统包含的内容

    • 用户:用户模型类、用户认证。
    • 权限:标识一个用户是否可以做一个特定的任务,MIS系统常用到。
    • 组:对多个具有相同权限的用户进行统一管理,MIS系统常用到。
    • 密码:一个可配置的密码哈希系统,设置密码、密码校验。

2. Django默认用户模型类

  • Django认证系统中提供了用户模型类User保存用户的数据。

    • User对象是认证系统的核心。
  • Django认证系统用户模型类位置

    • django.contrib.auth.models.User

  • 父类AbstractUser介绍

    • User对象基本属性

      • 创建用户(注册用户)必选: username、password
      • 创建用户(注册用户)可选:email、first_name、last_name、last_login、date_joined、is_active 、is_staff、is_superuse
      • 判断用户是否通过认证(是否登录):is_authenticated
    • 创建用户(注册用户)的方法

      user = User.objects.create_user(username, email, password, **extra_fields)
  • 用户认证(用户登录)的方法

    from django.contrib.auth import authenticate
    user = authenticate(username=username, password=password, **kwargs)
  • 处理密码的方法

    • 设置密码:set_password(raw_password)
    • 校验密码:check_password(raw_password)

3. 自定义用户模型类

思考:为什么要自定义用户模型类?
  • 观察注册界面会发现,美多商城注册数据必选用户mobile信息
  • 但是Django默认用户模型类中没有mobile字段,所以要自定义用户模型类。

如何自定义用户模型类?

  • 继承自AbstractUser(可通过阅读Django默认用户模型类的源码得知) 。
  • 新增mobile字段。
from django.db import models
from django.contrib.auth.models import AbstractUser

  
  
# Create your models here.
  
  


class User(AbstractUser):
    """自定义用户模型类"""
    mobile = models.CharField(max_length=11, unique=True, verbose_name='号')

    class Meta:
        db_table = 'tb_users'
        verbose_name = '用户'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

4. 知识要点

  1. Django自带用户认证系统核心就是User对象,并封装了一系列可用的方法和属性。
  2. Django用户认证系统包含了一系列对用户的操作,比如:模型类,认证,权限,分组,密码处理等。
  3. Django用户认证系统中的用户模型类可以自定义,继承自AbstractUser
  4. [Django用户认证系统说明文档](

迁移用户模型类

1. 指定用户模型类

思考:为什么Django默认用户模型类是User?
  • 阅读源代码:'django.conf.global_settings'

    AUTH_USER_MODEL = 'auth.User'

结论:

  • Django用户模型类是通过全局配置项 AUTH_USER_MODEL 决定的

配置规则:

AUTH_USER_MODEL = '应用名.模型类名'
  
  
# 指定本项目用户模型类
  
  
AUTH_USER_MODEL = 'users.User'

2. 迁移用户模型类

1.创建迁移文件
  • `python manage.py mak

程序员一诺python
16 声望18 粉丝

python技术发烧友 资料收集狂