【发布时间】:2015-12-17 01:24:38
【问题描述】:
在 Django-rest-framework 中,我有一个简单的 CBV
class LocationList(APIView):
"""
List all locations (id and name)
"""
def get(self, request, format=None):
# Make connection to SQL server db
dbargs = dict(
DRIVER='{FreeTDS}',
SERVER=django_settings.DB_HOST,
PORT=django_settings.DB_PORT,
DATABASE=django_settings.DB_NAME,
UID=django_settings.DB_USER,
PWD=django_settings.DB_PWD,
)
cnxn = pyodbc.connect(**dbargs)
# Query db
curs = cnxn.cursor()
select_locations_cmd = 'SELECT list_id, cast(list_name as text) FROM location_lists;'
curs = curs.execute(select_locations_cmd)
# Serialize
sdata = [dict(list_id=lid, list_name=lname) for lid, lname in curs.fetchall()]
# Close cnxn
cnxn.close()
return Response(sdata)
正如您所见,它所做的只是查询外部数据库,手动序列化结果并将其返回到 django-rest-framework Response 对象中。
在我的urls.py 我有
router = routers.DefaultRouter()
router.register(r'someothermodel', SomeOtherModelViewSet)
urlpatterns = [url(r'^', include(router.urls)),
url(r'^locationlists/$', LocationList.as_view(), name="weather-location-lists"),
]
这工作正常,但我担心的是,当我访问根 API url 时,它只显示someothermodel 的端点,它是通过路由器注册并使用标准 ViewSet。它根本没有列出 locationlists 端点。 我可以在浏览器中访问 /locationlists 端点(或者向它发出 GET 请求而不会出现问题),但它没有被编入索引。
如何在根目录索引它?所以它出现在旁边
Api Root
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"someothertask": "http://127.0.0.1:8000/someothertask/",
}
【问题讨论】: