我有网址 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*
但是我不知道这是否是正确的方法。同样,如果有多个参数,则条件将很多。还有其他方法可用吗?
答案 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