我无法添加指向 views.py 中方法的工作人员 URL。在下面的 urls.py 配置中,我创建了一个 DefaultRouter,并注册了 6 个 URL。前 5 个工作正常(它们是基于类的 View ),但是最后一个 URL(workers,这是基于方法的 View )不起作用。此 URL 与 url.conf 中列出的任何 URL 都不匹配。我收到错误消息“使用 maidFactory.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:”。 . . . . . .当前的 URL,workers/,与其中任何一个都不匹配。
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
router.register(r'slots', views.SlotViewSet)
router.register(r'city', views.CityViewSet)
router.register(r'location',views.LocationViewSet,base_name='locationMy')
router.register(r'workers',views.WorkerViewSet,base_name='getWorkersBySlotAndLocation')
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
url(r'^', include(router.urls)),
#url(r'^', include('maidFactory.api.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^auth/', include('rest_framework_social_oauth2.urls')),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))]
我的基于方法的 View 如下:
def WorkerViewSet(request):
cursor = connection.cursor()
#cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
cursor.execute("select p.wid,p.fname, a.description from workerProfile as p, workerAccount as a where a.isactive=1 and a.wid=p.wid")
row = cursor.fetchone()
return HttpResponse(row)
最佳答案
您的 WorkerViewSet
不是实际的 DRF ViewSet但是基于 Django 函数的 View 返回 Django HttpResponse。
您应该将其转换为适当的 DRF View 集,然后使用该 View 集注册您的路由器。
另一种选择是将此作为 url 添加到您的 urls 文件的 urlpatterns
中,它应该可以完美运行。
urlpatterns = [
url(r'^my/url/path/$', my_views.WorkerViewSet), # This will work
....
]
关于django - 无法在 Django 路由器中添加 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32325190/