做一個Django項目(1.1、立項)

  1. 創建項目
    1. 碼雲創建倉庫
    2. 添加ssh
      1. 生成ssh公鑰 ssh-keygen -t rsa -C "郵箱"
      2. 拷貝到碼雲
    3. 下載項目 git clone 下載地址
    4. 使用命令創建項目
      # django-admin startproject 工程名稱
      django-admin startproject md

       

  2. 修改配置文件位置
    1. 更改配置文件位置
      1. 在項目目錄下創建sttings文件並在sttings下創建dev.py作爲配置文件
      2. 複製原始sttings.py內容到dev.py
      3. 更改manage.py 文件
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "md.settings.dev")
  3. 添加前端文件
  4. 更改配置
    1. 爲了將所有模塊統一存放在apps目錄下添加導包路徑
      # 添加導包路徑
      import sys
      sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
    2. 使用rest_framework
      1. pip install  djangorestframework
      2. 註冊:
        # INSTALLED_APPS 中添加 
        
        INSTALLED_APPS = [
            ...
            'rest_framework',
        ]
    3.  更改數據庫配置使用Mysql和Redis
      1. 導包
        pip install PyMySQL
        pip install django-redis
        pip install redis

         

      2. md/md/__init__.py文件中添加 
        import pymysql
        
        pymysql.install_as_MySQLdb()
      3. 更改數據庫鏈接 
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'HOST': '127.0.0.1',  # 數據庫主機
                'PORT': 3306,  # 數據庫端口
                'USER': 'md',  # 數據庫用戶名
                'PASSWORD': 'md',  # 數據庫用戶密碼
                'NAME': 'md'  # 數據庫名字
            }
        }
        
      4. 更改緩存配置使用Redis
        1.  配置
          # 安裝django-redis
          
          CACHES = {
              "default": {
                  "BACKEND": "django_redis.cache.RedisCache",
                  "LOCATION": "redis://10.211.55.5:6379/0",
                  "OPTIONS": {
                      "CLIENT_CLASS": "django_redis.client.DefaultClient",
                  }
              },
              "session": {
                  "BACKEND": "django_redis.cache.RedisCache",
                  "LOCATION": "redis://10.211.55.5:6379/1",
                  "OPTIONS": {
                      "CLIENT_CLASS": "django_redis.client.DefaultClient",
                  }
              }
          }
          SESSION_ENGINE = "django.contrib.sessions.backends.cache"
          SESSION_CACHE_ALIAS = "session"
  5. 更改語言和時區
    LANGUAGE_CODE = 'zh-hans'
    
    TIME_ZONE = 'Asia/Shanghai'
  6. 配置日誌
    1. 在項目統計目錄下添加logs目錄用於存放日誌
    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在debug模式下才輸出日誌
                  '()': 'django.utils.log.RequireDebugTrue',
              },
          },
          'handlers': {  # 日誌處理方法
              'console': {  # 向終端中輸出日誌
                  'level': 'INFO',
                  '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': {  # 定義了一個名爲django的日誌器
                  'handlers': ['console', 'file'],  # 可以同時向終端與文件中輸出日誌
                  'propagate': True,  # 是否繼續傳遞日誌信息
                  'level': 'INFO',  # 日誌器接收的最低日誌級別
              },
          }
      }
       
  7. 異常
    1. 修改Django REST framework的默認異常處理方法,補充處理數據庫異常和Redis異常。

      新建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,用來記錄日誌
      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
    2.  添加配置
      REST_FRAMEWORK = {
          # 異常處理
          'EXCEPTION_HANDLER': 'md.utils.exceptions.exception_handler',
      }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章