创建包含变量的网址

时间:2017-06-16 20:13:23

标签: variables url django-rest-framework

所以我对django有一个非常基本的了解。我知道我可以在我的urlpatterns中使用类似下面的字符串创建一个类似于这个example.com/test/2005/03的URL。

url(r'^test/([0-9]{4})/([0-9]{2})/$', views.SuperView.as_view()),

但是如果我想在uri的测试参数之前添加一些内容呢?是否有可能为具有多个位置的企业制作一个这样的网址?

www.example.com/company_name/location_name/test/2005/01

我想学习如何构建一个可以为多家公司工作的灵活服务,我想通过uri的company_name / location_name /部分指定哪个公司和哪个位置访问数据。在请求中,我想获取这些变量并使用它们在视图和模型中对我的数据库执行连接查询。

2 个答案:

答案 0 :(得分:0)

基本上你可以使用路径变量来做到这一点。如果我正确理解您的问题,您只需在控制器中使用一些URL模式即可。一个简单的Spring例子就是

@RequestMapping(value = "/{company}/{location}/employees", method =RequestMethod.GET)
public String test(@PathVariable("company") String company, @PathVariable("location")  String location) {
           //your code
}

答案 1 :(得分:0)

所以这在Django中引起了一些麻烦,我决定制作一个测试api项目。

以下是我的应用中的urls.py文件的内容。

urlpatterns = [
    url(r'^([0-9]{4})/([0-9]{2})/test/$', views.DuperView.as_view()),
    url(r'^test/([0-9]{4})/([0-9]{2})/$', views.SuperView.as_view()),
    url(r'^test/', views.TestView.as_view()),
]

起初我开始乱搞添加端点test /后面的数据。 uri test / 0000/00(第二个)将每个附加组件作为参数传递到apiview中(如下面的views.py代码所示。如果你将uri的组件移动到测试之前的位置/那么端点仍然以相同的方式将相同的信息传递给apiview。所以你可以做/ 0000/00 / test /,那些组件仍然传递给我们的api视图。

这是我的views.py文件内容。

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response

class TestView(APIView):
    def get(self, request, format=None):
        an_apiview = [
            'this',
            'is',
            'a',
            'list',
        ]

        return Response({'http_method': 'GET', 'api_view': an_apiview})

class SuperView(APIView):
    # because our url is test/{year}/{month} in the urls.py file
    # {year} is passed to the view as the year argument
    # {month} is passed to the view as the month argument
    def get(self, request, year, month, format=None):
        an_apiview = [
            'this',
            'is',
            'a',
            'super',
            'list',
            ]

        return Response({'http_method': 'GET', 'api_view': an_apiview})


class DuperView(APIView):
# because our url is {year}/{month}/test/ in the urls.py file
# {year} is passed to the view as the year argument
# {month} is passed to the view as the month argument
    def get(self, request, year, month, format=None):
        an_apiview = [
            'this',
            'is',
            'a',
            'duper',
            'list',
            ]

        return Response({'http_method': 'GET', 'api_view': an_apiview})