Python的後端筆記(四)

GaryLin
Gary的程式學習紀錄簿
8 min readJan 12, 2023

簡單安裝一下django

其實之前好幾個案子都是用django開發的,不過基礎架構都是3年多前基於3.2 LTS版本的django建立的,這時間說起來有點尷尬,今年4月要發布4.2的LTS版本,所以這篇會用4.1.5來試著建立起來,到時候應該會比3.2升起來簡單,只有差0.5版本應該不會差很多吧?

  1. 建立新的虛擬環境

這次用python3.9搭配Django4.1.5試試,開一個乾淨的環境,如果裝壞了就整個砍掉重來吧XD

2. 安裝Django及一些相關套件

pip install Django==4.1.5
pip install djangorestframework
pip install django-cors-headers
pip install djangorestframework-simplejwt
pip install django-environ
pip install drf_yasg

3. 建立Django專案

建立一個專案資料夾,然後在裡面輸入指令

django-admin startproject {專案名稱} .

因為一開始的習慣,我會在專案資料夾下建立src資料夾然後再在裡面建立

4. 先簡單啟動下Server,看看能不能正常運作

很正常的啟動

來導入swagger吧

  1. 在settings.py加入設定
INSTALLED_APPS = [
...

'rest_framework',
'drf_yasg',
'corsheaders',
]

cors設定

# CORS setting
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)

CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)

swagger設定

SWAGGER_SETTINGS = {
'SECURITY_DEFINITIONS': {
'api_key': {
'type': 'apiKey',
'in': 'header',
'name': 'Authorization'
}
},
}

設定log存放位置

# Logging
LOGGING_DIR = '/var/www/log'

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'info_console': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
'formatter': 'verbose',
'filename': f'{LOGGING_DIR}/log_info.log',
'when': 'midnight',
'interval': 1,
'backupCount': 365,
},
},
'loggers': {
'django': {
'handlers': [
'info_console',
],
'propagate': True,
},
},
'formatters': {
'verbose': {
'format': '[{levelname}] | {asctime} | {pathname}:{lineno} | {message}',
'style': '{',
},
},
}

2. 調整urls.py

from rest_framework import permissions
from drf_yasg.views import get_schema_view
from django.urls import re_path
from drf_yasg import openapi
import os

# swagger
swagger_disable = os.environ.get('SWAGGER_DISABLE')
if not swagger_disable:
schema_view = get_schema_view(
openapi.Info(
title="TEST BackEnd API",
default_version='v0.1.0',
description="TEST API",
),
url=os.environ.get('DOMAIN'),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns += [
re_path(r'^swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
re_path(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]

3. 重新開啟Server輸入網址看一下吧

http://localhost:{你的IP}/swagger/

完美的出現swagger介面了

接下來我們試著加入一個簡單的API

  1. 加入一個新的app
django-admin startapp {app名稱}

2. 先在view.py裡加入controller

from rest_framework.views import APIView

# swagger
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi

from django.http import JsonResponse

class HealthCheckView(APIView):

@swagger_auto_schema(
operation_summary = 'HealthCheck',
)
def get(self, request):
return JsonResponse({'a':222})

3. 新增urls.py連接到View

from django.urls import path
from rest_framework_simplejwt import views as jwt_views

from .views import (
HealthCheckView,
)

urlpatterns = [
path('check', HealthCheckView.as_view(), name = 'Health Check'),
]

4. 修改project裡的urls.py,映射到app的urls.py設定

urlpatterns += [
path('api/health/', include('health.urls')),

]

5. 把app加到setting.py

INSTALLED_APPS = [
...
# apps
'health',
]

6. 測試看swagger成果

成功建立一個最簡單的api

--

--