Luffy之虚拟环境.项目搭建,目录日志等配置信息

1. 项目开发前

1.1 虚拟环境virtualenv

如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了.而公司里面往往会存在多个项目的情况,所以需要使用虚拟环境,把当前项目所需要用到的模块及其版本进行隔离包装到一个虚拟环境中使用。

1.1.1 安装

pip install virtualenv             
pip install virtualenv-clone       
pip install virtualenvwrapper      
pip install virtualenvwrapper-win

# 注意以上命令适用于window系统

Linux和Mac下安装配置

安装虚拟环境的命令 :

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
View Code

 

1.1.2 常用命令

创建虚拟环境:                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解析器,对于源代码是毫无关系

  • 创建虚拟环境需要联网

  • 创建成功后, 会自动工作在这个虚拟环境上

  • 工作在虚拟环境上, 提示符最前面会出现 “(虚拟环境名称)”

1.2 企业项目开发流程

企业的web项目类型:

  1. 商城

  2. 门户网站[企业站和门户站]

  3. 社交网络

  4. 资讯论坛

  5. 内部系统

  6. 个人博客

  7. 内容收费站

项目流程:

                                     

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项目

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        # 保存项目运营时的脚本文件

3.2 创建数据库

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(基本命令)

 

 坑:注意的地方

数据创建的账号无法登陆,原来的root账号没有问题,创建账号的sql语句没有问题.

  错误发生的原因:在安装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",
    }
}

在项目主模块的 __init__.py中导入pymysql

import pymysql

pymysql.install_as_MySQLdb()

3.4 日志配置

在settings.py文件中追加如下配置:

# 日志配置
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,
        },
    }
}
View Code

 

3.5 异常处理

可以再 主文件夹下创建 utils/exceptions.py

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
View Code

settings.py配置文件中添加

REST_FRAMEWORK = {
    ...
  
    # 异常处理
    'EXCEPTION_HANDLER': 'luffy.utils.exceptions.custom_exception_handler',
}
View Code

 

posted @ 2019-03-21 20:21  Mixtea  阅读(250)  评论(0编辑  收藏  举报