首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

请教 rest api 如何设计+django rest_framework 如何实现?

  •  1
     
  •   chaleaochexist · 7 天前 · 382 次点击
    - Root
      - router1
        - category1
            - interface1
              - prefix1
              - prefix2
            - interface2
              - prefix21
        - category2
      - router2
        - category21
    
    大概是这样一个结构. 其中 category 可忽略.
    
    获取 router 信息
    get `*/api/routers/`
    
    default_router.register(
        "api/routers", RouterViewset, base_name="RouterViewset"
    )
    
    获取 category summary 信息
    get `*/api/routers/category_summary`
    在 RouterViewset 中定义
    
        @detail_route(methods=["get"])
        def category_summary(self, request, router_id):
            pass
    
    获取某个 router 中的 interface 信息
    是这么写吧?
    get `*/api/routers/<router_id>/interfaces`
    这样实现
    
        @detail_route(methods=["get"])
        def interfaces(self, request, router_id):
            pass
    
    还是这么写?
    get `*/api/interfaces/?router-id=<id>`
    
    default_router.register(
        "api/interfaces", InterFaceViewset, base_name="InterFaceViewset"
    )
    
    
    以此类推 prefix 如何设计 api 同时如何用 drf 的 router 和 viewset 实现?
    譬如
    `*/api/routers/<router_id>/interfaces/<interface_id>/prefixes`
    类似这样吗?
    
    default_router.register(
        "routers/(?P<router_id>\d+)/interfaces/", InterFaceViewset, base_name="EmixInterFaceViewset"
    )
    
        @detail_route(methods=["get"])
        def prefixes(self, request, router_id, interface_id):
            pass
    
    上面的 url 岂不是被覆盖了?
     "routers/(?P<router_id>\d+)/interfaces/", InterFaceViewset, base_name="EmixInterFaceViewset"
    和
    get `*/api/routers/`
    
    default_router.register(
        "api/routers", RouterViewset, base_name="RouterViewset"
    )
    
    

    谢谢.

    1 回复  |  直到 2019-12-03 10:34:01 +08:00
        1
    wuwukai007   6 天前
    个人建议还是不要用 viewsets 这种自动注册 url 的,generic 手写吧
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4403 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 02:28 · PVG 10:28 · LAX 18:28 · JFK 21:28
    ♥ Do have faith in what you're doing.