https://django-ninja.rest-framework.com/tutorial/operation_params/#url_name
Operations parameters - Django Ninja
Operations parameters You can group your API operations using the tags argument (list[str]). @api.get("/hello/") def hello(request, name: str): return {"hello": name} @api.post("/orders/", tags=["orders"]) def create_order(request, order: Order): return {"
django-ninja.rest-framework.com
(https://django-ninja.rest-framework.com/tutorial/versioning/ 추가로 버전 명시하는 방법)
urlpatterns = [
path('', views.main, name='main'),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
장고템플릿에서 <a href = "{% url 'main' %}">main으로</a>이런식으로 접근 했다면
(urlpatterns >> name = 'main'>> reverse() )
장고 닌자에서 api = NinjaAPI() 를 받아서
api.add_router('/', < import xxx as main_router>) 이런식으로 추가하는데
# version 1.0.0 >> 중요한 변경 / 중간 변경 / 최소 변경
api = NinjaAPI(version="1.0.0", urls_namespace="test_1")
api.add_router("", main_router)
urlpatterns = [
path("admin/", admin.site.urls),
path("", api.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns에 추가할 자리가 없다.
장고닌자에서는 <a href = "{% url 'main' %}">main으로</a>이런식으로 접근 할 방법이 없나???
하고 찾다가
맨위의 공식 문서에 방법을 찾았다.
이미지를 보면 NinjaAPI(version=1.0.0, urls_namespace="test_1") 이렇게 위의 코드처럼 작성할 수 있다.
만약에 urls_namespace를 적용하지 않는다면 api 버전을 가리킨다 이때 닌자에 스웨거는 기본적으로 version = 1.0.0
을 가리키고있다 (스웨거 버전이 아니고 내가 만든 api의 버전)
그래서 어떻게 하는가?
내가 사용 하려는 (xxxrouter.py) router에
- url_name="login"옵션을 추가하고
urls.py에 있는 NinjaAPI() 안에
- NinjaAPI(urls_namespace="test")
해당 url이 필요한
- HTML 에 <a href = "{% url 'test:login' %}">로그인 페이지로</a> 이렇게 적용하면
작동한다.
from ...xx import account as login_router
# version 1.0.0 >> 중요한 변경 / 중간 변경 / 최소 변경
api = NinjaAPI(version="1.0.0", urls_namespace="test_1")
api.add_router("login/", login_router)
urlpatterns = [
path("admin/", admin.site.urls),
path("", api.urls),
]
##############################################################
# xxx.py 라우터 파일
from django.http import HttpRequest
from django.shortcuts import HttpResponse
from ninja import Router
#schema 사용
from ...xxx import LoginResponse
account = Router()
# login page render router
@account.get("/", url_name='login', response=LoginResponse)
def get_login_page(request: HttpRequest) -> HttpResponse:
pass
로그인 페이지로
추가 옵션이고 뭐고 그냥 당장 적용하고 싶다.
NinjaAPI() 여기에 아무 옵션도 없는 상태일때
바로 적용 하고 싶다면
해당 라우터에만
@test.get('/', url_name='main',xxx....)
url_name를 추가하고
해당 html 페이지에서
<a href="{% url 'api-1.0.0:main' %}">main</a>
이렇게 사용하면 된다.
추가 사용법
NinjaAPI(version = '1.0.2' )
속성을 추가하면 {% url 'api-1.0.2:main' %}
NinjaAPI(urls_namespace='a')
속성을 추가하면 {% url 'a:main' %}(두가지 속성을 다 추가해도 이렇게 작성)
만약에 NinjaAPI(version = '1.0.2', urls_namespace='a')
{% url 'api-1.0.2:main' %} 이렇게 접근하면 만나 볼수 있는 에러.