• django项目配置


    创建工程

    本项目使用git管理项目代码,代码库放在gitee码云平台。(注意,公司中通常放在gitlab私有服务器中)

    1. 在git平台创建工程

    1) 创建私有项目库

    2)克隆项目到本地

    3)创建并切换分支到dev

    git checkout -b dev
    

    2. 添加前端文件

    在meiduo目录中创建前端文件子目录front_end_pc

    将前端静态附件复制到front_end_pc目录下

    git提交

    git add front_end_pc
    git status
    git commit -m 'add front end files'
    

    推送到远端

    git push origin dev:dev
    

    前端文件开发预览

    可以使用前端node.js 提供的服务器作为前端开发服务器使用。

    安装node.js的版本控制工具nvm,在终端中执行

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
    

    重新进入终端,使用nvm安装最新版本的node.js

    nvm install node

    安装

    npm install -g live-server
    

    使用

    # 在静态文件目录front_end_pc下执行
    live-server

    3. 创建Django REST framework工程

    参考框架阶段学习的知识,创建虚拟环境,并创建Django REST framework工程。

    • apps 存放Django的应用
    • libs 存放第三方的库文件
    • settings 存放配置文件,分为开发dev和线上prod
    • utils 存放项目自己定义的公共函数或类等
    • docs 用于存放一些说明文档资料
    • scripts 用于存放管理脚本文件

    修改settings/dev.py 文件中的路径信息

    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    # 添加导包路径
    import sys
    sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
    

    4. 创建数据库

    create database dd_shopping default charset=utf8;
    

    创建数据库用户

    create user dd identified by 'mm';
    grant all on dd_shopping.* to 'meiduo'@'%';
    flush privileges;

    说明:

    • 第一句:创建用户账号 dd, 密码 mm (由identified by 指明)
    • 第二句:授权dd_shopping数据库下的所有表(dd_shopping.*)的所有权限(all)给用户dd在以任何ip访问数据库的时候('dd'@'%')
    • 第三句:刷新生效用户权限
     

    配置

    1. Redis

    安装django-redis,并配置   默认有16个库

    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1/0",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        },
        "session": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1/1",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        }
    }
    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    SESSION_CACHE_ALIAS = "session"
    

    2. 日志

    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(os.path.dirname(BASE_DIR), "logs/meiduo.log"),
                'maxBytes': 300 * 1024 * 1024,
                'backupCount': 10,
                'formatter': 'verbose'
            },
        },
        'loggers': {
            'django': {
                'handlers': ['console', 'file'],
                'propagate': True,
            },
        }
    }
    

    3. 异常处理

    新建utils/exceptions.py

    from rest_framework.views import exception_handler as drf_exception_handler
    import logging
    from django.db import DatabaseError
    from redis.exceptions import RedisError
    from rest_framework.response import Response
    from rest_framework import status
    
    
    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):
                # 数据库异常
                logger.error('[%s] %s' % (view, exc))
                response = Response({'message': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
    
        return response
    

    配置文件中添加

    REST_FRAMEWORK = {
        # 异常处理
        'EXCEPTION_HANDLER': 'dd_shopping.utils.exceptions.exception_handler',
    }
  • 相关阅读:
    js 中常用的方法
    js中this的四种调用模式
    JS面向对象的几种写法
    js 中的算法题,那些经常看到的
    web页面的回流,认识与避免
    js中的预加载与懒加载(延迟加载)
    Web安全测试学习笔记-DVWA-存储型XSS
    Web安全测试学习笔记-DVWA-图片上传
    Web安全测试学习笔记-DVWA-盲注(使用sqlmap)
    Web安全测试学习笔记-DVWA-SQL注入-1
  • 原文地址:https://www.cnblogs.com/yalandskx/p/9451861.html
Copyright © 2020-2023  润新知