zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    安装IIS的郁闷之旅
    设置WPF窗口相对于非WPF窗口的位置
    钓鱼记
    java拾遗
    人间四月芳菲尽
    [linux] x server can not start under VMWare
    如果没有开源软件没有免费软件,这个世界会怎么样?评[盖茨北大演讲遭遇开源人士抗议]
    程序员的面包
    2007中国软件英雄会-七年的等待
    sysbench安装
  • 原文地址:https://www.cnblogs.com/Mixtea/p/10573236.html
Copyright © 2011-2022 走看看