如何编写多个URL的基于单个类的视图?

时间:2018-11-06 06:25:59

标签: python django

我有网址 reporting?id = 1 reporting?students = bachelor 。对于这两个网址,我在urls.py中使用相同的基本网址“报告”。

urls.py

from .views import Reporting

urlpatterns = [
    path('', AnalyticsData.as_view()),
    path('reporting', Reporting.as_view()),
    path('index', index.as_view())
]

我该如何使用相同的类视图执行不同的get方法,以便对于第一个URL,执行按id获取学生的方法,对于第二个URL,执行获取学士学位学生的方法。现在,我以以下方式编写代码

views.py

class Reporting(APIView):

    def get(self, request):

        id = self.request.GET.get("id")
        student_type = self.request.GET.get("students")

        if id:
            *logic*
        if student_type=="bachelor":
            *logic*

但是我不知道这是否是正确的方法。同样,如果有多个参数,则条件将很多。还有其他方法可用吗?

1 个答案:

答案 0 :(得分:0)

在基于类的视图中,我将有一个变量,该变量告诉调用该变量时该怎么做。这样的事情。这个var变量获取从urls.py调用时传递的任何值,因此您可以利用它来发挥自己的优势。

class Reporting(APIView):

    var = "" # HERE

    def get(self, request):

        id = self.request.GET.get("id")
        student_type = self.request.GET.get("students")

        if id:
            *logic*
        if student_type=="bachelor":
            *logic*

然后在我的urls.py中,我将使用该参数调用该类并相应地处理逻辑。

from .views import Reporting

urlpatterns = [
    path('reporting', Reporting.as_view(var="yourvalue")), #HERE
]

然后根据var变量处理逻辑。 因此,现在如果您希望您的类在另一种情况下的行为有所不同,则可以相应地更改var变量,并且该行为也将发生变化。您只需要更改网址中的值即可。

urlpatterns = [
    path('reporting', Reporting.as_view(var="yourvalue")), #HERE
    path('new_reporting', Reporting.as_view(var="your_new_value"))
]

因此,根据您的情况,您可以将此var传递给视图,然后可以使用if else处理get函数。 别忘了self btw

if self.var == "id":
    # Logic for id
elif self.var == "students":
    # Logic for students