一、项目设计
1、项目主要模块
模块 | 功能 |
---|---|
验证 | 图形验证、短信验证 |
用户 | 注册、登录、用户中心(基本信息、邮箱激活、收货地址、我的订单、修改密码) |
第三方登录 | QQ登录 |
首页广告 | 首页广告 |
商品 | 商品列表、商品搜索、商品详情、商品浏览记录 |
购物车 | 购物车管理、购物车合并 |
订单 | 确认订单、提交订单、订单商品评价 |
支付 | 支付宝支付 |
MIS系统 | 数据统计、用户管理、权限管理、商品管理、订单管理 |
2、项目架构设计
3、知识要点
项目主要架构
- 帮助我们整体把握项目的工作流程和主要的业务场景。
-
二、工程创建和配置
1、工程创建
环境安装
pip install django
项目启动
django-admin startproject meiduo_mall
2、配置开发目录
libs 存放第三方的库文件
- utils 存放项目自己定义的公共函数或类等
- apps 存放Django的应用
- templates 模板文件存放文件夹
3、配置MySQL数据库
1、新建MySQL数据库
1.新建MySQL数据库:meiduo_mall
$ create database meiduo_mall charset=utf8;
2.新建MySQL用户
$ create user itcast identified by '123456';
3.授权itcast用户访问meiduo_mall数据库
$ grant all on meiduo_mall.* to 'itcast'@'%';
4.授权结束后刷新特权
$ 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’ # 数据库名字 }, }
<a name="yrogl"></a>
## 4、配置Redis数据库
<a name="E7tqu"></a>
### 1、安装django-redis拓展包
$ pip install django-redis
<a name="cuTZR"></a>
### 2、配置redis
[django-redis文档](https://django-redis-chs.readthedocs.io/zh_CN/latest/)
```python
CACHES = {
# 默认使用0号库
"default": { # 默认
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
# session存放1号库
"session": { # session
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"
default:
- 默认的Redis配置项,采用0号Redis库。
session:
- 状态保持的Redis配置项,采用1号Redis库。
SESSION_ENGINE
- 修改session存储机制使用Redis保存。
SESSION_CACHE_ALIAS:
- 使用名为”session”的Redis配置项存储session数据。
5、配置工程日志
1、配置工程日志
LOGGING = {
'version': 1,
'disable_existing_loggers': False, # 是否禁用已经存在的日志器
'formatters': { # 日志信息显示的格式
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
},
},
'filters': { # 对日志进行过滤
'require_debug_true': { # django在debug模式下才输出日志
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': { # 日志处理方法
'console': { # 向终端中输出日志
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': { # 向文件中输出日志
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'logs/meiduo.log'), # 日志文件的位置
'maxBytes': 300 * 1024 * 1024,
'backupCount': 10,
'formatter': 'verbose'
},
},
'loggers': { # 日志器
'django': { # 定义了一个名为django的日志器
'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志
'propagate': True, # 是否继续传递日志信息
'level': 'INFO', # 日志器接收的最低日志级别
},
}
}
2、创建日志目录
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’)
<a name="W7ha5"></a>
### 4、Git记录工程日志
提示1:
- 开发过程中,产生的日志信息不需要代码仓库进行管理和记录。
提示2:
- 建立代码仓库时,生成的忽略文件中已经默认忽略掉了***.log**。
<a name="aruNs"></a>
### 5、知识要点
1. 本项目最低日志等级设置为:**INFO**
1. 创建日志记录器的方式:logger = logging.getLogger('django')
1. 日志记录器的使用:logger.info('测试logging模块info')
1. 在日志loggers选项中可以指定多个日志记录器
<a name="RNJe3"></a>
## 6、配置访问域名
```python
ALLOWED_HOSTS = ['*']
三、用户注册
1、用户模型类
1、定义用户模型类
1、Django默认用户认证系统
- Django自带用户认证系统
- 它处理用户账号、组、权限以及基于cookie的用户会话。
- Django认证系统位置
- django.contrib.auth包含认证框架的核心和默认的模型。
- django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联。
- Django认证系统同时处理认证和授权
- 认证:验证一个用户是否它声称的那个人,可用于账号登录。
- 授权:授权决定一个通过了认证的用户被允许做什么。
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)
- 处理密码的方法
- User对象基本属性
观察注册界面会发现,美多商城注册数据中必选用户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=’手机号’)
class Meta:
db_table = 'tb_users'
verbose_name = '用户'
verbose_name_plural = verbose_name
def __str__(self):
return self.username
<a name="IxwbK"></a>
#### 4、知识要点
1. Django自带**用户认证系统**,**核心就是User对象**。
1. Django用户认证系统包含了一系列对用户的操作,比如:模型类,认证,权限,分组,密码处理等。
1. Django用户认证系统中的用户模型类可以自定义,继承自**AbstractUser**。
1. [Django用户认证系统说明文档](https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/index.html)
<a name="HlTjb"></a>
### 2、迁移用户模型类
<a name="K8j5s"></a>
#### 1、指定用户模型类
[官方文档](https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/customizing.html)<br />Django用户模型类是通过全局配置项AUTH_USER_MODEL决定的<br />配置规则:
```python
AUTH_USER_MODEL = '应用名.模型类名'
# 指定本项目用户模型类
AUTH_USER_MODEL = 'users.User'
2、 迁移用户模型类
1.创建迁移文件
- python manage.py makemigrations
2.执行迁移文件