• 项目搭建之虚拟环境和项目配置


    一.虚拟环境virtualenv

      如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令,

    在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了.而公司里面往往会

    存在多个项目的情况,所以需要使用虚拟环境,把当前项目所需要用到的模块及其版本进行隔离包装到一个虚拟环境中使用。

      1.虚拟环境的安装

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

    #以上四步依次安装下来

      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.进入虚拟环境

    workon 虚拟环境名称

        
    
    

      2.在虚拟环境中安装我们需要的模块

    pip install django
    
    pip install PymySQL
    
    pip install Pillow
    
    pip install djangorestframework

      3.创建django项目

    1.先进入项目要保存的目录
    2.django-admin startproject luffy
      
        
    #注意:最好带虚拟环境

       4.打开项目,为项目其配置环境

    1.找到设置
      
          

    2.为其配置解释器(选择后面的add local来选择虚拟环境中的解释器,而不再是系统中安装的python解释器了)
      
             

    3.选择existing enviroment(选择已存在的环境)
        
          

    4.第3步的...点击之后会跳出窗口,我们再去选择我们锁需要的虚拟环境中的python解释器
        
            

    5.回到第一步,配置我们新增的解释器为当前项目的解释器
        
        
    
    

    三.项目配置

      1. 目录结构

    ├── docs           # 项目相关资料保存目录
    ├── logs           # 项目运行时/开发时日志目录
    ├── manage.py
    ├── luffy         # 开发时的代码保存
    │   ├── apps       # 开发者的代码保存目录,以模块[子应用]为目录保存
    │   ├── libs       # 第三方类库的保存目录
    │   ├── settings.py
    │   ├── urls.py
    │   ├── utils      # 多个模块[子应用]的公共函数类库
    └── scripts        # 保存项目运营时的脚本文件

      2.创建数据库

    #创建数据库
    create database luffycity default charset=utf8;

    #为当前项目创建数据库用户和密码[这个用户只能看到这个数据库]
    #把数据库权限开放给这个用户
    #刷新数据库

      create user luffy_user identified by 'luffy';
      grant all privileges on luffycity.* to 'luffy_user'@'%';
      flush privileges;

    注意:这边 有个注意点就是:

      如果你的mysql之前没有配置过,直接通过mysql就可以直接进入的情况下,你就需要把这种情况禁止,否则沪报错:

      处理:

        mysql>use mysql;

        mysql>delete from user where user=”;

        mysql>flush privileges; (必须的)

       3.配置连接数据库

        打开settings.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()

      4.日志配置

        在settings.py追加

    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.utils.log.RequireDebugTrue', }, },
      #日志处理()
    'handlers': { 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(BASE_DIR, "logs/lufei.log"), 'maxBytes': 300 * 1024 * 1024, #300MB 'backupCount': 10, #最多是个文件 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'propagate': True, }, } }

       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

      settings.py

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

       6.创建主页应用(把应用都创建在apps中)

    python ../../manage.py startapp home

      

    
    
  • 相关阅读:
    linux系统中输入输出重定向 0<、<、1>、>、2>、1>>、>>、2>>、&>、>&、&>>、2>&1、<<
    linux系统统计某一行出现特定字符的次数
    linux系统中常用的通配符*、?、[ ]、[^xxx]、{}
    R语言strsplit函数用法
    linux系统统计某一字符出现的次数
    什么时候你需要一个虚构函数是虚的
    strcpy的返回值有什么用?
    boost.array 使用实例
    《DB 查询分析器》使用技巧之(七)
    《微型电脑应用》2011年第11期刊登出《万能数据库查询分析器中的事务管理在Oracle中的应用》
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10573279.html
Copyright © 2020-2023  润新知