AMcoder - javascript, python, java, html, php, sql

Հիմնական հակադարձ՝ տարբերակված API-ների անվանատարածքով URL-ներով

Ես օգտագործում եմ django-rest-framework-ը NamespaceVersioning-ի հետ: Իմ հիմնական urls.py-ն այսպիսի տեսք ունի.

...
url(r'^api/v1/', include('my_api.api_urls', app_name="api", namespace='v1')),
...

Իսկ my_api.api_urls.py-ում.

urlpatterns = [
    url(r'^some-endpoint/$', api_views.MyView.as_view(), name='some'),
]

Ինչ-որ կերպ ես չեմ կարողանում շրջել այս URL-ները: Ինչու ես չեմ կարող պարզապես դա անել: Ես ստանում եմ NoReverseMatch բացառություն:

reverse('some')

Ես չեմ կարող գլուխս փաթաթել django-ի անվանատարածքի շուրջ, բայց արդյոք այն չպետք է օգտագործի միայն վերջին սահմանված երթուղին: Եթե ​​ես հիմնական url-ից հանեմ անվանատարածքի փաստարկը, ամեն ինչ լավ է աշխատում:

խմբագրել

Նաև չի աշխատում.

reverse('v1:some') 

Ես կարող եմ նաև ավելացնել, որ իմ հիմնական urls ֆայլում ես ներառում եմ բազմաթիվ urls ֆայլեր api/v1/ նախածանցում.

...
url(r'^api/v1/', include('my_api.api_urls', app_name="api", namespace='v1')),
url(r'^api/v1/', include('my_other_api.api_urls', app_name="api", namespace='v1')),
...

Պատասխանները:


1

Ջանգոյում url-ի անունները հակադարձելիս պետք է հետադարձ կատարել namespace:url-name օրինաչափությամբ:

Ձեր հակադարձ զանգը պետք է այսպիսի տեսք ունենա.

reverse('v1:some')

Տես՝ Ինչպես օգտագործել reverse()-ը django-ում

Թարմացում. դուք օգտագործում եք նույն անվանատարածքը բազմաթիվ url գրառումներում: Պահպանեք url անունների տարածքները եզակի:

05.04.2016
  • Փորձե՞լ եք սա՝ django- rest-framework.org/api-guide/versioning/ ?? համոզվեք, որ օգտագործում եք from rest_framework.reverse import reverse-ի հակադարձ գործառույթը 05.04.2016
  • Հաջողություն չկա, կներեք: Կարծում եմ, որ այն պետք է խնդիր լինի իմ կազմաձևման հետ: Կարո՞ղ է դա կապված լինել նույն նախածանցով մի քանի ընդգրկույթների վրա նույն անվանատարածք օգտագործելու հետ: Երբ ես փոխում եմ տվյալ api-ի անվանատարածքը այլ բանով, (օրինակ՝ «v2») և օգտագործում եմ հակադարձ («v2:some»), այն աշխատում է: 05.04.2016
  • Այո, ամենայն հավանականությամբ։ Նույն անվանատարածքով բազմաթիվ url-ներ կարող են խնդիրներ առաջացնել: Փորձում է փոխել անվանատարածքը 05.04.2016
  • Ահ, ուրեմն դա պետք է լինի խնդիրը: Այսպիսով, որպես հիմնական կանոն, օգտագործեք միայն մեկ անգամ և ներառեք ենթակետերը: 05.04.2016
  • Դա շտկեց ձեր խնդիրը: Պետք է թարմացնե՞մ պատասխանը: 05.04.2016
  • Այո, այն շտկեց խնդիրը, շատ շնորհակալություն: Ես հիմա անվանատարածություն եմ/այդ թվում միայն մեկ անգամ: 05.04.2016
  • @Nuschk ինչպե՞ս եք մի քանի url-ներ ներառում տարբեր հավելվածներում մեկ անվանատարածքի տակ: նման url(r'^api/v1/', include(('myapi.urls', 'myotherapi.urls',), namespace='v1'))? Կարո՞ղ եք պատասխանի վրա գրել աշխատանքային ծածկագիրը: 21.07.2017
  • @Ruben. Օ՜, ես վաղուց չէի շփոթում այս թեմայով, այնպես որ ես ամբողջովին թարմ չեմ թեմայում: Ես օգտագործում եմ մեկ հիմնական urls ֆայլ մեկ API տարբերակի համար և ներառում եմ ամեն ինչ այնտեղից: Այսպես՝ url(r'^api/v1/', include('main.api_urls_v1', namespace='v1')). Իսկ api_urls_v1-ում՝ url_patterns = [url(r'app1/', include('app1.api.api_urls')), url(r'app2/', include('app2.api.api_urls_v1'))]: Այս մոտեցման դրական կողմն այն է, որ դուք կարող եք ինքնուրույն լարել տարբերակները յուրաքանչյուր հավելվածի համար: Բացասական կողմն այն է, որ դա մի քիչ խոսուն է: 21.07.2017
  • @Nuschk Լավ, այնպես որ դա հենց իմ դեպքը չէ, ես տարբեր ուղիներ չունեմ յուրաքանչյուր հավելվածի համար: Ամեն դեպքում շնորհակալություն. 24.07.2017
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..