1. 下载
djangorestframework==3.13.0
drf-yasg2
2. settings_swagger.py
# Application definition
SWAGGER_SETTINGS = {
'USE_SESSION_AUTH': False,
'SECURITY_DEFINITIONS': {
'Token': {
'type': 'apiKey', #
'name': 'Authorization',
'in': 'header'
},
},
}
USE_X_FORWARDED_HOST = True # https时使用
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # https时使用
# env = os.getenv('website_env', 'dev')
# if env == 'dev':
# USE_X_FORWARDED_HOST = True
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'http')
# elif env == 'uat':
# USE_X_FORWARDED_HOST = True
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# elif env == 'prod':
# USE_X_FORWARDED_HOST = True
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# else:
# USE_X_FORWARDED_HOST = True
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'http')
__all__ = [
"SWAGGER_SETTINGS",
"USE_X_FORWARDED_HOST",
"SECURE_PROXY_SSL_HEADER"
]
3. urls.py
from apps.customer.views import CustomerModelViewSet, BizCustomerMsgBoardModelViewSet
from rest_framework import permissions
from rest_framework import routers
from rest_framework_simplejwt.views import TokenVerifyView
from django.contrib import admin
from django.urls import path, include, re_path
from drf_yasg2.views import get_schema_view
from drf_yasg2 import openapi
router = routers.SimpleRouter()
router.register(r'customer', CustomerModelViewSet, basename='customer')
# swagger
schema_view = get_schema_view(
openapi.Info(
title="Service Brain API",
default_version='v1',
description="Welcome to the world",
# terms_of_service="https://www.tweet.org",
# contact=openapi.Contact(email="demo@tweet.org"),
# license=openapi.License(name="Awesome IP"),
),
public=True,
authentication_classes=(),
permission_classes=(),
)
urlpatterns = [
path('login/', Login.as_view(), name='login'),
path('token/refresh/', MyTokenRefreshView.as_view(), name='token_refresh'),
path('token/verify/', TokenVerifyView.as_view(), name='token_verify'),
# swagger
re_path(r'^docs(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-swagger'),
path('docs/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redocs/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
urlpatterns += router.urls
4. views.py
from drf_yasg2.utils import swagger_auto_schema
class BizRuleNotificationModelViewSet(ModelViewSet):
queryset = BizRuleNotificationModel.objects.all()
serializer_class = BizRuleNotificationListModelSerializer
ACTION_ID = SYS_PERMISSION_FIELDS[13]['pk']
ordering = ['id']
search_fields = ['task_name']
@swagger_auto_schema(operation_summary='删除',
operation_description="删除",
tags=['碎片化学习-规则通知'],
deprecated=True,
responses={**SWAGGER_RESPONSE_MESSAGE, 200: 'ok'})
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.task.delete() # 级联删所以不用手动删除instance
return Response(status=status.HTTP_204_NO_CONTENT)
5. nginx配置(https)
server {
listen 443; # 监听端口(前端访问端口)
server_name 192.168.170.211; # IP或者域名(前端访问)
charset utf-8;
client_max_body_size 75M;
ssl_certificate /data_1/var/www/server.crt; # 必须nginx.conf同级
ssl_certificate_key /data_1/var/www/server.key; # 必须nginx.conf同级
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8001; # gunicorn的bind
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 重点
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Referrer $http_referer;
proxy_set_header Referer $http_referer;
}