Luffy之虚拟环境.项目搭建,目录日志等配置信息
1. 项目开发前
1.1 虚拟环境virtualenv
如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了.而公司里面往往会存在多个项目的情况,所以需要使用虚拟环境,把当前项目所需要用到的模块及其版本进行隔离包装到一个虚拟环境中使用。
pip install virtualenv pip install virtualenv-clone pip install virtualenvwrapper pip install virtualenvwrapper-win # 注意以上命令适用于window系统
Linux和Mac下安装配置
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
安装虚拟环境的命令 : sudo pip install virtualenv sudo pip install virtualenvwrapper 安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量: # 1、创建目录用来存放虚拟环境 mkdir $HOME/.virtualenvs # 2、打开~/.bashrc文件,并添加如下: export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh # 3、运行 source ~/.bashrc
创建虚拟环境: mkvirtualenv 虚拟环境名称 创建虚拟环境(指定python版本): mkvirtualenv -p python 虚拟环境名称 查看所有虚拟环境: workon+2次tab键 使用虚拟环境: workon 虚拟环境名称 退出虚拟环境: deactivate 删除虚拟环境(必须先退出虚拟环境内部才能删除当前虚拟环境): rmvirtualenv 虚拟环境名称 其他相关命令: 查看虚拟环境中安装的包: pip freeze 或者 pip list 收集当前环境中安装的包及其版本: pip freeze > requirements.txt 在部署项目的服务器中安装项目使用的模块: pip install -r requirements.txt
提示:
-
虚拟环境只会管理环境内部的模块和python解析器,对于源代码是毫无关系
-
创建虚拟环境需要联网
-
创建成功后, 会自动工作在这个虚拟环境上
-
工作在虚拟环境上, 提示符最前面会出现 “(虚拟环境名称)”
企业的web项目类型:
-
商城
-
门户网站[企业站和门户站]
-
社交网络
-
资讯论坛
-
内部系统
-
个人博客
-
内容收费站
项目流程:
1.3需求分析
1.4 项目架构
-
项目采用前后端分离的应用模式
-
前端使用Vue.js vue-cli
-
后端使用Django REST framework
2. 搭建DRF项目
进入虚拟环境
workon luffy
安装基本类库
在之前虚拟环境luffy中安装项目需要用到的类库
pip install django
pip install PymySQL
pip install Pillow
pip install djangorestframework
django-admin startproject luffy
提示:
在pycharm中如果要使用已经创建好的虚拟环境,则必须设置pycharm中的python解释器,设置为
虚拟环境中的python。
/.virtualenvs/环境名称/Scripts/python.exe
如下图:
坑:注意
1. 安装了虚拟环境以后,无法使用deactivate退出环境,并且使用pip list输出的当前环境模块是全局环境中的.
3. 项目配置
3.1 项目目录调整
├── docs # 项目相关资料保存目录 ├── logs # 项目运行时/开发时日志目录 ├── manage.py ├── luffy # 开发时的代码保存 │ ├── apps # 开发者的代码保存目录,以模块[子应用]为目录保存 │ ├── libs # 第三方类库的保存目录 │ ├── settings.py │ ├── urls.py │ ├── utils # 多个模块[子应用]的公共函数类库 └── scripts # 保存项目运营时的脚本文件
create database luffycity default charset=utf8;
为当前项目创建数据库用户[这个用户只能看到这个数据库]
MySQL添加新用户、为用户创建数据库、为新用户分配权限
详细教程请看:
1.https://blog.csdn.net/weixin_38091140/article/details/82983229(较详细,图文演示)
2.https://blog.csdn.net/piaocoder/article/details/53704126(基本命令)
坑:注意的地方
错误发生的原因:在安装mysql的时候,没有进行初始化[没有删除匿名用户]
防范出现这个问题:以后安装了mysql以后,进入到mysql的控制台,找到mysql数据库的user表,把user=''的用户删除
相关操作语句:
delete from mysql.user where user='' 注意,如果在删除匿名用户之前已经创建的用户,这些用户是无法登陆,这些用户也需要删除 删除了用户以后,还要从权限中移除上面账号的相关权限记录 drop user '无法登陆的用户名'; # 匿名用户无需进行这项操作 flush privileges; # 刷新mysql的权限记录,保证上面更改立马刷新
3.3 配置数据库连接
打开settings/dev.py文件,并配置
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "HOST": "127.0.0.1", "PORT": 3306, "USER": "luffy_user", "PASSWORD": "luffy", "NAME": "luffycity", } }
import pymysql pymysql.install_as_MySQLdb()
3.4 日志配置
在settings.py文件中追加如下配置:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 日志配置 LOGGING = { 'version': 1, # 是否禁用其他已经存在的日志功能,False表示不禁用 '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.utils.log.RequireDebugTrue', }, }, # 日志处理方式 'handlers': { 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 存储日志的目录地址和文件名[logs目录必须自己动手创建] 'filename': os.path.join(BASE_DIR, "logs/luffy.log"), # 日志文件的大小[字节],日志文件最大是300M 'maxBytes': 300 * 1024 * 1024, # 日志备份数量是10个 'backupCount': 10, 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'propagate': True, }, } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from rest_framework.views import exception_handler from django.db import DatabaseError from rest_framework.response import Response from rest_framework import status import logging logger = logging.getLogger('luffy') def custom_exception_handler(exc, context): """ 自定义异常处理 :param exc: 异常类 :param context: 抛出异常的上下文 :return: Response响应对象 """ # 调用drf框架原生的异常处理方法 response = exception_handler(exc, context) if response is None: view = context['view'] if isinstance(exc, DatabaseError): # 数据库异常 logger.error('[%s] %s' % (view, exc)) response = Response({'message': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE) return response
settings.py配置文件中添加
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
REST_FRAMEWORK = { ... # 异常处理 'EXCEPTION_HANDLER': 'luffy.utils.exceptions.custom_exception_handler', }