一、项目设计

1、项目主要模块

模块 功能
验证 图形验证、短信验证
用户 注册、登录、用户中心(基本信息、邮箱激活、收货地址、我的订单、修改密码)
第三方登录 QQ登录
首页广告 首页广告
商品 商品列表、商品搜索、商品详情、商品浏览记录
购物车 购物车管理、购物车合并
订单 确认订单、提交订单、订单商品评价
支付 支付宝支付
MIS系统 数据统计、用户管理、权限管理、商品管理、订单管理

2、项目架构设计

image.png

3、知识要点

项目主要架构

  • 帮助我们整体把握项目的工作流程和主要的业务场景。
  • 项目开发时,明确工作的重心是实现后端业务逻辑

    二、工程创建和配置

    1、工程创建

    环境安装

    1. pip install django

    项目启动

    1. django-admin startproject meiduo_mall

    2、配置开发目录

    image.png

  • libs 存放第三方的库文件

  • utils 存放项目自己定义的公共函数或类等
  • apps 存放Django的应用
  • templates 模板文件存放文件夹

    3、配置MySQL数据库

    1、新建MySQL数据库

    1.新建MySQL数据库:meiduo_mall

    1. $ create database meiduo_mall charset=utf8;

    2.新建MySQL用户

    1. $ create user itcast identified by '123456';

    3.授权itcast用户访问meiduo_mall数据库

    1. $ grant all on meiduo_mall.* to 'itcast'@'%';

    4.授权结束后刷新特权

    1. $ flush privileges;

    2、配置MySQL数据库

    数据库配置文档 ```python import pymysql

pymysql.install_as_MySQLdb()

DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.mysql’, # 数据库引擎 ‘HOST’: ‘127.0.0.1’, # 数据库主机 ‘PORT’: 3306, # 数据库端口 ‘USER’: ‘itcast’, # 数据库用户名 ‘PASSWORD’: ‘123456’, # 数据库用户密码 ‘NAME’: ‘meiduo_mall’ # 数据库名字 }, }

  1. <a name="yrogl"></a>
  2. ## 4、配置Redis数据库
  3. <a name="E7tqu"></a>
  4. ### 1、安装django-redis拓展包

$ pip install django-redis

  1. <a name="cuTZR"></a>
  2. ### 2、配置redis
  3. [django-redis文档](https://django-redis-chs.readthedocs.io/zh_CN/latest/)
  4. ```python
  5. CACHES = {
  6. # 默认使用0号库
  7. "default": { # 默认
  8. "BACKEND": "django_redis.cache.RedisCache",
  9. "LOCATION": "redis://127.0.0.1:6379/0",
  10. "OPTIONS": {
  11. "CLIENT_CLASS": "django_redis.client.DefaultClient",
  12. }
  13. },
  14. # session存放1号库
  15. "session": { # session
  16. "BACKEND": "django_redis.cache.RedisCache",
  17. "LOCATION": "redis://127.0.0.1:6379/1",
  18. "OPTIONS": {
  19. "CLIENT_CLASS": "django_redis.client.DefaultClient",
  20. }
  21. },
  22. }
  23. SESSION_ENGINE = "django.contrib.sessions.backends.cache"
  24. SESSION_CACHE_ALIAS = "session"

default:

  • 默认的Redis配置项,采用0号Redis库。

session:

  • 状态保持的Redis配置项,采用1号Redis库。

SESSION_ENGINE

  • 修改session存储机制使用Redis保存。

SESSION_CACHE_ALIAS:

  • 使用名为”session”的Redis配置项存储session数据。

5、配置工程日志

日志配置文档

1、配置工程日志

  1. LOGGING = {
  2. 'version': 1,
  3. 'disable_existing_loggers': False, # 是否禁用已经存在的日志器
  4. 'formatters': { # 日志信息显示的格式
  5. 'verbose': {
  6. 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
  7. },
  8. 'simple': {
  9. 'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
  10. },
  11. },
  12. 'filters': { # 对日志进行过滤
  13. 'require_debug_true': { # django在debug模式下才输出日志
  14. '()': 'django.utils.log.RequireDebugTrue',
  15. },
  16. },
  17. 'handlers': { # 日志处理方法
  18. 'console': { # 向终端中输出日志
  19. 'level': 'INFO',
  20. 'filters': ['require_debug_true'],
  21. 'class': 'logging.StreamHandler',
  22. 'formatter': 'simple'
  23. },
  24. 'file': { # 向文件中输出日志
  25. 'level': 'INFO',
  26. 'class': 'logging.handlers.RotatingFileHandler',
  27. 'filename': os.path.join(BASE_DIR, 'logs/meiduo.log'), # 日志文件的位置
  28. 'maxBytes': 300 * 1024 * 1024,
  29. 'backupCount': 10,
  30. 'formatter': 'verbose'
  31. },
  32. },
  33. 'loggers': { # 日志器
  34. 'django': { # 定义了一个名为django的日志器
  35. 'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志
  36. 'propagate': True, # 是否继续传递日志信息
  37. 'level': 'INFO', # 日志器接收的最低日志级别
  38. },
  39. }
  40. }

2、创建日志目录

image.png

3、日志记录器的使用

不同的应用程序所定义的日志等级可能会有所差别,分的详细点的会包含以下几个等级:

  • FATAL/CRITICAL = 重大的,危险的
  • ERROR = 错误
  • WARNING = 警告
  • INFO = 信息
  • DEBUG = 调试
  • NOTSET = 没有设置 ```python import logging

创建日志记录器

logger = logging.getLogger(‘django’)

输出日志

logger.debug(‘测试logging模块debug’) logger.info(‘测试logging模块info’) logger.error(‘测试logging模块error’)

  1. <a name="W7ha5"></a>
  2. ### 4、Git记录工程日志
  3. 提示1:
  4. - 开发过程中,产生的日志信息不需要代码仓库进行管理和记录。
  5. 提示2:
  6. - 建立代码仓库时,生成的忽略文件中已经默认忽略掉了***.log**。
  7. <a name="aruNs"></a>
  8. ### 5、知识要点
  9. 1. 本项目最低日志等级设置为:**INFO**
  10. 1. 创建日志记录器的方式:logger = logging.getLogger('django')
  11. 1. 日志记录器的使用:logger.info('测试logging模块info')
  12. 1. 在日志loggers选项中可以指定多个日志记录器
  13. <a name="RNJe3"></a>
  14. ## 6、配置访问域名
  15. ```python
  16. ALLOWED_HOSTS = ['*']

三、用户注册

1、用户模型类

1、定义用户模型类

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

image.png

  • 父类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字段。 ```python 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=’手机号’)

  1. class Meta:
  2. db_table = 'tb_users'
  3. verbose_name = '用户'
  4. verbose_name_plural = verbose_name
  5. def __str__(self):
  6. return self.username
  1. <a name="IxwbK"></a>
  2. #### 4、知识要点
  3. 1. Django自带**用户认证系统**,**核心就是User对象**。
  4. 1. Django用户认证系统包含了一系列对用户的操作,比如:模型类,认证,权限,分组,密码处理等。
  5. 1. Django用户认证系统中的用户模型类可以自定义,继承自**AbstractUser**。
  6. 1. [Django用户认证系统说明文档](https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/index.html)
  7. <a name="HlTjb"></a>
  8. ### 2、迁移用户模型类
  9. <a name="K8j5s"></a>
  10. #### 1、指定用户模型类
  11. [官方文档](https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/customizing.html)<br />Django用户模型类是通过全局配置项AUTH_USER_MODEL决定的<br />配置规则:
  12. ```python
  13. AUTH_USER_MODEL = '应用名.模型类名'
  1. # 指定本项目用户模型类
  2. AUTH_USER_MODEL = 'users.User'

2、 迁移用户模型类

1.创建迁移文件

  • python manage.py makemigrations

2.执行迁移文件

  • python manage.py migrate

    3、知识要点

    用户认证系统中的用户模型类,是通过全局配置项AUTH_USER_MODEL决定的。
    如果迁移自定义用户模型类,必须先配置 AUTH_USER_MODEL