下載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'