Python的後端筆記(四)
Published in
8 min readJan 12, 2023
簡單安裝一下django
其實之前好幾個案子都是用django開發的,不過基礎架構都是3年多前基於3.2 LTS版本的django建立的,這時間說起來有點尷尬,今年4月要發布4.2的LTS版本,所以這篇會用4.1.5來試著建立起來,到時候應該會比3.2升起來簡單,只有差0.5版本應該不會差很多吧?
- 建立新的虛擬環境
這次用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吧
- 在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
- 加入一個新的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