2014-11-24 30 views
2

這裏是Two Scoops of Django: Best Practices For Django 1.6報價:凡把REST API在Django

在過去,我們把所有的API視圖代碼到一個專門的Django應用程序 調用的API或apiv1,與定製邏輯中的一些REST視圖, 序列化器等等。理論上這是一個很好的方法,但在 的實踐中,這意味着我們對某個特定應用程序的邏輯不止在一個位置上。

我們目前的方法是依靠URL配置。當建立一個 項目範圍API我們寫的REST的看法在views.py模塊,電線 它們放入一個所謂的URLconf像core/api.pycore/apiv1.py,包括從項目的根的urls.py 模塊。這意味着,我們可能會有諸如以下 代碼:

# core/api.py 

""" Called from the project root's urls.py URLConf thus: 
url(r" ˆ api/", include("core.api"), namespace="api"), 
""" 

from django.conf.urls.defaults import patterns, url 

from flavors import views as flavor_views 
from users import views as user_views 

urlpatterns = patterns("", 
    # {% url "api:flavors" %} 
    url(
     regex=r" ˆ flavors/ $ ", 
     view=flavor_views.FlavorCreateReadView.as_view(), 
     name="flavors" 
     ), 

    # {% url "api:flavors" flavor.slug %} 
    url(
     regex=r" ˆ flavors/(?P<slug>[-\w]+)/ $ ", 
     view=flavor_views.FlavorReadUpdateDeleteView.as_view(), 
     name="flavors" 
     ), 

    # {% url "api:users" %} 
    url(
     regex=r" ˆ users/ $ ", 
     view=user_views.UserCreateReadView.as_view(), 
     name="users" 
     ), 

    # {% url "api:users" user.slug %} 
    url(
     regex=r" ˆ users/(?P<slug>[-\w]+)/ $ ", 
     view=user_views.UserReadUpdateDeleteView.as_view(), 
     name="users" 
     ), 
) 

但我不明白的地方放core/api.py。這是一個單獨的Django應用程序,名爲coreapi.py應該坐哪裏?

+0

這意味着創建上面的文件爲'core/api.py'(以及一個空的'core/__ init __。py'),然後添加'url(r「api /」,include(「core。 api「),namespace =」api「)''urls.py'根文件 – Anentropic 2014-11-24 18:57:44

+0

您不必將其稱爲'core/api.py',這只是作者 – Anentropic 2014-11-24 18:58:20

+0

@Antropic的建議,非常感謝。只需添加它作爲答案,我可以接受它。另外,我們在views.py模塊中編寫REST視圖是什麼意思?我能舉一個例子嗎? – norbertpy 2014-11-24 19:00:51

回答

2

這意味着創建你的core/api.py(連同空core/__init__.py文件),然後將文件中的行url(r" ˆ api/", include("core.api"), namespace="api")添加到您的項目的根urls.py文件。

你不必調用它core/api.py,這僅僅是從作者

是什麼,我們寫在views.py模塊的REST觀點意味着一個建議?

這意味着你做了什麼,每個項目中的Django的應用程序,如flavorsusers他們將有一個views.py(或views/*.py)在他們那裏你把代碼同時爲API和非API視圖。 (這只是一個理智的命名約定,僅此而已...... Django依賴於urlpatterns來告訴它如何連接url路徑以查看代碼)

從頭開始構建這樣的東西是一種很好的方式,可以學習Django的。如果你正在做一個嚴肅的REST API項目,請看Django REST framework