創建一個Django項目的基本操作


1-配置好環境

  下載IDE,如:pycharm,

  數據庫、其他中間件等  

     

2-創建虛擬環境

  需要制定虛擬環境,環境中安裝好Django的版本,可pip install 安裝好

  如果在pycharm中可以直接拖進去當前目錄即可安裝依賴包,可直接settings創建虛擬環境

  命令:mkvirtualenv django_py3  -p python3 

3-創建工程

  進入某文件或者創建某文件目錄下,django-admin.py startproject 工程名

4-創建子應用

  子應用最好裝在一個apps目錄下,這樣比較方便寫接口代碼

  注意將apps設定為導包路徑

    python manage.py startapp 子應用名字

  (這個地方要注意尋找到manage.py的文件路徑,通常我的是../../manage.py)

5-運行工程

  python manage.py runserver ip:端口

  或: python manage.py runserver

    
下面為配置文件的配置項

6-注冊安裝子應用

  'rest_framework', # DRF 第三方包寫在中間,自己的包寫最下面

  'users.apps.UsersConfig'

  用到第三方包的話也要注冊第三方應用 注冊與配置文件中

7-工程配置

  1、修改配置文件,創建settings目錄,存放dev開發模式,prod線上模式,兩個配置分別存放。

  將settings.py文件的配置cv過來,修改manag.py的默認配置

    os.environ.setdefault("DJANGO_SETTINGS_工程名", "同名工程名.settings.dev")

8-修改導包路徑

我們將配置文件改為放在settings子目錄下,所以 配置文件中的BASE_DIR指向的變為了存放工程的文件夾/工程名字/工程同名目錄

使用sys.path添加<BASE_DIR>/apps目錄,即可添加apps應用的導包路徑。

# 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'))

9-數據庫

於配置文件修改

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.mysql',
       'HOST': '*.*.*.*',  # 數據庫主機
       'PORT': 3306,  # 數據庫端口
       'USER': 'gaap',  # 數據庫用戶名
       'PASSWORD': 'gaap',  # 數據庫用戶密碼
       'NAME': 'gaap'  # 數據庫名字
  }
}

注意:

記得在存放工程的文件夾/工程名/__init__.py文件中添加

import pymysql

pymysql.install_as_MySQLdb()

 

10-安裝djang-redis並配置

 CACHES = {

    "default": {
       "BACKEND": "django_redis.cache.RedisCache",
       "LOCATION": "redis://*.*.*.*:6379/0",
       "OPTIONS": {
           "CLIENT_CLASS": "django_redis.client.DefaultClient",
      }
  },
   "session": {
       "BACKEND": "django_redis.cache.RedisCache",
       "LOCATION": "redis://*.*.*.*:6379/1",#ip地址:端口/redis的庫名之一
       "OPTIONS": {
           "CLIENT_CLASS": "django_redis.client.DefaultClient",
      }
  }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

  除了名為default的redis配置外,還補充了名為session的redis配置,分別使用兩個不同的redis庫。

  同時修改了Django的Session機制使用redis保存,且使用名為'session'的redis配置。

  此處修改Django的Session機制存儲主要是為了給Admin站點使用。

11-語言

  LANGUAGE_CODE = 'zh-hans'

  TIME_ZONE = 'Asia/Shanghai'

12-日志

LOGGING = {
   'version': 1,
   'disable_existing_loggers': False,  # 是否禁用已經存在的日志器
   'formatters': {  # 日志信息顯示的格式
       'verbose': {
           'format': '%(levelname)s %(asctime)s %(gaap)s %(lineno)d %(message)s'
      },
       'simple': {
           'format': '%(levelname)s %(gaap)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/gaap.log"),  # 日志文件的位置
           'maxBytes': 300 * 1024 * 1024,
           'backupCount': 10,
           'formatter': 'verbose'
      },
  },
   'loggers': {  # 日志器
       'django': {  # 定義了一個名為django的日志器
           'handlers': ['console', 'file'],  # 可以同時向終端與文件中輸出日志
           'propagate': True,  # 是否繼續傳遞日志信息
           'level': 'INFO',  # 日志器接收的最低日志級別
      },
  }
}

13-異常處理

修改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
  需要配置
如果我們新建utils文件中自定義異常處理了,那么我需要在配置文件中添加配置:
  
  REST_FRAMEWORK = {
      # 異常處理   'EXCEPTION_HANDLER': '工程名.utils.exceptions.exception_handler',   }#主要是指定好路徑
 

14-追加apps為導包路徑

創建一個apps包,來寫程序應用。但是需要source root添加到導包路徑中,才可以導包。而導包路徑默認的是Django的路徑。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file))) ( 上一級/上一級/當前文件)

當前工程的根目錄,Django會依此來定位工程內的相關文件,我們也可以使用該參數來構造文件路徑。

1.提示 上⾯AUTH_USER_GAAP = 'users.User'的⽅式的導包路徑,默認是不會被識別的,需要追加導包路徑

2.查看默認的導包路徑

import sys

print(sys.path)

3.追加導包路徑 sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

 

15-自定義用戶模型

Django提供了django.contrib.auth.models.AbstractUser用戶抽象模型類允許我們繼承,擴展字段來使用Django認證系統的用戶模型類。

在 工程名/工程同名目錄/apps中創建Django應用users,並在配置文件中注冊users應用。

在創建好的應用models.py中定義用戶的用戶模型類。

  • class User(AbstractUser): """用戶模型類""" mobile = models.CharField(max_length=11, unique=True, verbose_name='手機號')

  • class Meta: db_table = 'tb_users' verbose_name = '用戶' verbose_name_plural = verbose_name

我們自定義的用戶模型類還不能直接被Django的認證系統所識別,需要在配置文件中告知Django認證系統使用我們自定義的模型類。

在配置文件中進行設置

settings的dev.py更改配置l(底層要求必須按這個格式寫應用名.模型名的格式)

AUTH_USER_GAAP = 'users.User'

AUTH_USER_GAAP參數的設置以點.來分隔,表示應用名.模型類名。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM