Commit 99a66695 authored by ibuler's avatar ibuler

[Update] 修改api重定向

parent 3260ceaa
...@@ -35,7 +35,16 @@ class CustomSwaggerAutoSchema(SwaggerAutoSchema): ...@@ -35,7 +35,16 @@ class CustomSwaggerAutoSchema(SwaggerAutoSchema):
def get_swagger_view(version='v1'): def get_swagger_view(version='v1'):
from .urls import api_v1_patterns, api_v2_patterns from .urls import api_v1, api_v2
from django.urls import path, include
api_v1_patterns = [
path('api/v1/', include(api_v1))
]
api_v2_patterns = [
path('api/v2/', include(api_v2))
]
if version == "v2": if version == "v2":
patterns = api_v2_patterns patterns = api_v2_patterns
else: else:
......
...@@ -55,19 +55,12 @@ js_i18n_patterns = i18n_patterns( ...@@ -55,19 +55,12 @@ js_i18n_patterns = i18n_patterns(
path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'), path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
) )
api_v1_patterns = [
path('api/v1/', include(api_v1))
]
api_v2_patterns = [
path('api/v2/', include(api_v2))
]
urlpatterns = [ urlpatterns = [
path('', IndexView.as_view(), name='index'), path('', IndexView.as_view(), name='index'),
path('', include(api_v2_patterns)), path('api/v1/', include(api_v1)),
path('', include(api_v1_patterns)), path('api/v2/', include(api_v2)),
re_path('api/(?P<version>\w+)/(?P<app>\w+)/.*', redirect_format_api), re_path('api/(?P<app>\w+)/(?P<version>v\d)/.*', redirect_format_api),
path('api/health/', HealthCheckView.as_view(), name="health"), path('api/health/', HealthCheckView.as_view(), name="health"),
path('luna/', LunaView.as_view(), name='luna-view'), path('luna/', LunaView.as_view(), name='luna-view'),
path('i18n/<str:lang>/', I18NView.as_view(), name='i18n-switch'), path('i18n/<str:lang>/', I18NView.as_view(), name='i18n-switch'),
......
...@@ -2,14 +2,13 @@ import datetime ...@@ -2,14 +2,13 @@ import datetime
import re import re
import time import time
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect, JsonResponse
from django.conf import settings from django.conf import settings
from django.views.generic import TemplateView, View from django.views.generic import TemplateView, View
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.db.models import Count from django.db.models import Count
from django.shortcuts import redirect from django.shortcuts import redirect
from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse from django.http import HttpResponse
...@@ -208,7 +207,7 @@ class I18NView(View): ...@@ -208,7 +207,7 @@ class I18NView(View):
return response return response
api_url_pattern = re.compile(r'^/api/(?P<version>\w+)/(?P<app>\w+)/(?P<extra>.*)$') api_url_pattern = re.compile(r'^/api/(?P<app>\w+)/(?P<version>v\d)/(?P<extra>.*)$')
@csrf_exempt @csrf_exempt
...@@ -216,18 +215,16 @@ def redirect_format_api(request, *args, **kwargs): ...@@ -216,18 +215,16 @@ def redirect_format_api(request, *args, **kwargs):
_path, query = request.path, request.GET.urlencode() _path, query = request.path, request.GET.urlencode()
matched = api_url_pattern.match(_path) matched = api_url_pattern.match(_path)
if matched: if matched:
version, app, extra = matched.groups() kwargs = matched.groupdict()
_path = '/api/{app}/{version}/{extra}?{query}'.format(**{ kwargs["query"] = query
"app": app, "version": version, "extra": extra, _path = '/api/{version}/{app}/{extra}?{query}'.format(**kwargs).rstrip("?")
"query": query
})
return HttpResponseTemporaryRedirect(_path) return HttpResponseTemporaryRedirect(_path)
else: else:
return Response({"msg": "Redirect url failed: {}".format(_path)}, status=404) return JsonResponse({"msg": "Redirect url failed: {}".format(_path)}, status=404)
class HealthCheckView(APIView): class HealthCheckView(APIView):
permission_classes = () permission_classes = ()
def get(self, request): def get(self, request):
return Response({"status": 1, "time": int(time.time())}) return JsonResponse({"status": 1, "time": int(time.time())})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment