__init_u3;()在扩展类时缺少1个必需的位置参数:“请求”父构造函数错误

2024-10-01 05:03:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从自定义管理部分的baseView扩展基于类的视图。 以下是仪表板部分的视图

class Dashboard(BaseAdminView):

    def __init__(self, request):
        super().__init__(request)

    def get(self, request):
        return render(request, 'admin/pages/dashboard.html', {'hello': 'World'})

类似地,下面是基本管理视图,我将为几乎所有相关的视图类扩展它

class BaseAdminView(View):
    loggedInUser = None

    def __init__(self, request):
        if (request.session['loggedInAdministrator'] is None):
            return redirect('adminlogin')
        else:
            loggedInUser = request.session['loggedInAdministrator']

我的问题是,当我尝试访问仪表板时,控制台中出现了__init__() missing 1 required positional argument: 'request'错误

{}那么{}是变量的顺序还是我遗漏了什么。我还删除了self但问题仍然是一样的。如果我选择不使用请求变量,那么构造函数可以正常工作,但是使用会话是我唯一的需要,我首先要做的就是这样做

我该如何使这项工作??如何访问父类中的请求

我也看到了

def __init__(self, request):
    super().__init__(request)

仪表板中的这段代码是不必要的,因为即使我删除了它,也会调用基本构造函数。这就是它的工作原理吗?对语言和框架来说是新的

添加:urls.py在相关应用程序中

urlpatterns = [
    path('', views.Dashboard.as_view(), name='adminhome'),
    path('login', views.Login.as_view(), name='adminlogin'),
    path('logout', views.Logout.as_view(), name='adminlogout')
]

Tags: pathnameselfview视图initrequestdef
1条回答
网友
1楼 · 发布于 2024-10-01 05:03:03

根据您的问题,在进入view中的GET/POST等请求方法处理程序之前,您需要实现一些与request对象相关的操作,在幕后,在__init__()方法中,您没有收到任何request object,因为您可以看到,如果您将*args**kwargs添加到init,您的视图类中有空的

您不应该覆盖__init__()。请求对象首先在dispatch()方法中可用,该方法在 __init__()之后立即调用,但您也不需要重写该方法。它的主要用途是调用get()post()或其他相关的方法处理程序。但是,一般来说,也没有必要覆盖这些

如果您确实必须尽早捕获请求,那么分派方法是您的最佳选择

您的BaseAdminView类如下所示:

class BaseAdminView(View):
    loggedInUser = None

    def dispatch(self, request, *args, **kwargs):
        if request.session['loggedInAdministrator'] is None:
            return redirect('adminlogin')
        else:
            self.loggedInUser = request.session['loggedInAdministrator']
        return super().dispatch(request, *args, **kwargs)

Dashboard类似乎是这样的:

class Dashboard(BaseAdminView):

    def get(self, request):
        return render(request, 'admin/pages/dashboard.html', {'hello': 'World'})

相关问题 更多 >