Django 开发环境配置

后台 Django项目环境搭建

环境

mkvirtualenv BaseLineApi
pip install django
pip install djangorestframework
pip install PymySQL

创建项目

开发:用pycharm打开项目,并选择提前备好的虚拟环境

django-admin startproject BaseLineApi

重构项目目录

新建项目后, 目录结构如下

│  manage.py
│
└─BaseLineApi
        asgi.py
        settings.py
        urls.py
        wsgi.py
        __init__.py

  • 根目录新建logs目录,和内层目录BaseLineApi同级
  • 根目录新建scripts目录,和内层目录BaseLineApi同级,里面存放本地的测试文件
  • 内层目录BaseLineApi新建apps包(python packages类型)
  • 内层目录BaseLineApi新建libs包 (python packages类型), 和apps包同级, 这个包存放第三方模块
  • 内层目录BaseLineApi新建settings包(python packages类型), 和apps包同级
  • 内层目录BaseLineApi新建media目录, 和apps包同级
  • 在settings包里新建2个python文件, 分别对应生产和开发使用的配置文件(dev.py|prod.py
  • 内层目录BaseLineApi新建utils包(python packages类型), 和apps包同级, 这个包存放自定义的模块

重构后的目录机构如下

C:.
│  manage.py
│
├─.idea
│  │  .gitignore
│  │  BaseLineApi.iml
│  │  misc.xml
│  │  modules.xml
│  │  workspace.xml
│  │
│  └─inspectionProfiles
│          profiles_settings.xml
│          Project_Default.xml
│
├─BaseLineApi
│  │  asgi.py
│  │  db.sqlite3
│  │  settings_bak.py
│  │  urls.py
│  │  wsgi.py
│  │  __init__.py
│  │
│  ├─apps
│  │      __init__.py
│  │
│  ├─libs
│  │      __init__.py
│  │
│  ├─media
│  ├─settings
│  │  │  dev.py
│  │  │  prod.py
│  │  │  __init__.py
│  │  │
│  │  └─__pycache__
│  │          dev.cpython-36.pyc
│  │          __init__.cpython-36.pyc
│  │
│  ├─utils
│  │  │  APIResponse.py
│  │  │  exception.py
│  │  │  logging.py
│  │  │  __init__.py
│  │  │
│  │  └─__pycache__
│  │          logging.cpython-36.pyc
│  │          __init__.cpython-36.pyc
│  │
│  └─__pycache__
│          urls.cpython-36.pyc
│          wsgi.cpython-36.pyc
│          __init__.cpython-36.pyc
│
├─logs
│      baseline.log
│
└─scripts
        t_dg1.py

配置开发环境

settings.py 的内容拷贝到dev.pyprod.py

这时候启动django, 会出现如下报错

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.


查看到manager.py 入口文件指向的settings 文件无法找到, 换成对应的配置文件

1610700268378


比如将文件换成 dev.py,django可以启动成功


相应的asgi.py, wsgi.py 也需要改成正确的路径


配置环境变量DJANGO_SETTINGS_MODULE


在配置文件dev.py中配置内层目录BaseLineApi

from pathlib import Path
import sys


# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
sys.path.insert(0, BASE_DIR)


LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

Django 测试

scripts\t_dg1.py

import os
import django

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'BaseLineApi.settings.dev')
django.setup()

# 测试配置文件
from django.conf import settings
print(settings)  # <Settings "BaseLineApi.settings.dev">
print(settings.BASE_DIR)  # C:\Users\chenjiawei\Desktop\BaseLineApi\BaseLineApi

# 环境变量
import sys
print(sys.path)

注册rest_framework

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
]

配置日志

dev.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': {
            # 实际开发建议使用WARNING或ERROR
            'level': 'WARNING',
            'class': 'logging.handlers.RotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR
            'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/baseline.log"),
            # 日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose' ,
            # 编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True,  # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

配置logger:utils/logging.py

import logging
logger = logging.getLogger('django')

测试日志

scripts\t_dg1.py

# 测试djngo的logger
from utils.logging import logger
logger.info('测试info')
logger.error('测试error')

二次封装Response类:

utils/response.py

from rest_framework.response import Response
class APIResponse(Response):
    def __init__(self, data_status, msg, results=None, headers=None, status=None, **kwargs):
        data = {
            'status': data_status,
            'msg': msg,
        }
        if results:
            data['results'] = results
        data.update(kwargs)
        super().__init__(data=data, headers=headers, status=status)

异常处理

utils/exception.py

from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework import status
from rest_framework.response import Response
from .logging import logger
def exception_handler(exc, context):
    response = drf_exception_handler(exc, context)
    if response is None:
        view = context['view']
        logger.error('%s:%s' % (view, exc))
        response = Response({'detail': '服务器内部错误'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
    return response

配置drf异常处理句柄

settings/dev.py

# drf配置
REST_FRAMEWORK = {
    # 异常句柄配置
    'EXCEPTION_HANDLER': 'utils.exception.exception_handler'
}

媒体目录

settings/dev.py

# 1.访问上传文件的url地址前缀
MEDIA_URL = "/media/"

# 2.项目中存储上传文件的根目录
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

# 媒体目录创建
# 3.在BaseLineApi/BaseLineApi中创建media目录(谁是项目根目录就在那个文件夹下创建)

路由配置

# 配置路由
from django.urls import re_path
from django.views.static import serve
from django.conf import settings
urlpatterns = [
    re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}),
]
posted @ 2021-01-15 19:35  cjw1219  阅读(338)  评论(0编辑  收藏  举报