创建项目仓库&集成前端页面
1.创建码云空白项目
2.克隆到本地&集成前端页面
3.提交版本
4.添加前端文件
1)在meiduo目录中创建前端文件子目录front_end_pc
并将前端静态文件复制到此目录下
2)git本地提交
git add front_end_pc
git status
git commit -m '添加静态文件'
3)推送到远端
git push origin master:master
live-server服务器提供静态页面
注意:开发的时候用,部署的时候不用
安装live-server:
1)安装node.js的版本控制工具nvm,在终端中执行如下命令:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
2)重新进入终端,使用nvm安装最新版本的node.js
nvm install node
3)安装live-server
npm install -g live-server
启动:(先进入静态文件目录,再启动live-server服务)
live-server
live-server运行在8080端口下,可以通过127.0.0.1:8080
来访问静态页面。
Django目录结构调整
workon django
django-admin startproject meiduo_mall
ls # 查看目录
cd meiduo_mall # 切换到项目目录
内层meiduo_mall目录:
创建apps(存放项目的子应用)
创建libs(用来存放项目的第三方包)
创建utils(用来存放项目的工具包)
创建settings(用来存放项目的配置)
开发阶段配置文件dev.py
生产阶段配置文件prod.py
外层meiduo_mall目录:
创建scripts(开发时使用的脚本,SQL文件等)
创建logs(用于存储日志)
创建docs(用于存放文档)
流程注意点:
1.中间自动生成的文件不用被git管理,点no。
2.runserver记得设置
3.修改manage.py中的配置文件注册
3.空目录中新建.gitkeep文件,用于把空目录提交到远程仓库。
项目配置
apps搜索包目录路径添加
创建子应用
python ../../manage.py startapp users
项目运行搜索包目录:
import sys
sys.path:搜索包的目录列表
['目录1','目录2','目录3',......]
搜索包目录路径添加:
使用sys.path
添加<BASE_DIR>/apps
目录,即可添加apps应用的导包路径。
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 添加apps搜索包路径
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
INSTALLED_APPS = [
...
'users.apps.UsersConfig',
]
mysql数据库配置
实际开发中:会给开发人员创建新用户并且给用户分配操作数据库权限。
1.先创建数据库
create database meiduo_sh24 default charset=utf8;
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 数据库主机
'PORT': 3306, # 数据库端口
'USER': 'meiduo_sh24', # 数据库用户名
'PASSWORD': 'meiduo', # 数据库用户密码
'NAME': 'meiduo_sh24' # 数据库名字
}
}
为本项目创建数据库用户(不再使用root账户)
create user meiduo_sh24 identified by 'meiduo'; meiduo_sh24是用户名,meiduo是密码
grant all on meiduo_sh24.* to 'meiduo_sh24'@'%';
flush privileges; # 刷新权限
第一句:创建用户账号 meiduo_sh24, 密码 meiduo (由identified by 指明)
第二句:授权meiduo_sh24数据库下的所有表(meiduo_sh24.*)的所有权限(all)给用户meiduo_sh24在以任何ip访问数据库的时候('meiduo'@'%')
第三句:刷新生效用户权限
*代表数据库的所有表
%代表授权所有IP,替换为IP的话,就是只为某个ip授权
注意点:安装pymysql后注册
django框架的缓存和session储存设置
安装django-redis
pip install django-redis
# Django框架的缓存设置,默认Django框架的缓存为服务器的内存,此处将Django框架的缓存改为了redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
# 设置将session信息存储到缓存中,上面已经将缓存改为了redis,所有session会存放到redis中
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# 指定session存储到缓存空间的名称
SESSION_CACHE_ALIAS = "session"
查看redis的IP和端口号
ps aux | grep redis
日志存储设置
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(os.path.dirname(BASE_DIR), "logs/meiduo.log"), # 日志文件的位置
'maxBytes': 300 * 1024 * 1024,
'backupCount': 10,
'formatter': 'verbose'
},
},
'loggers': {
# 日志器
'django': {
# 定义了一个名为django的日志器
'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志
'propagate': True, # 是否继续传递日志信息
'level': 'INFO', # 日志器接收的最低日志级别
},
}
}
异常处理设置
修改Django REST framework的默认异常处理方法,补充处理数据库异常和Redis异常。
1)新建utils/exceptions.py
import logging
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.response import Response
from rest_framework import status
from django.db import DatabaseError
from redis.exceptions import RedisError
# 获取在配置文件中定义的logger,用来记录日志
logger = logging.getLogger('django')
def exception_handler(exc, context):
"""
自定义异常处理
:param exc: 异常
:param context: 抛出异常的上下文
:return: Response响应对象
"""
# 调用drf框架原生的异常处理方法
response = drf_exception_handler(exc, context)
if response is None:
# 获取异常视图对象
view = context['view']
if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
# 数据库异常