Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python __初始化()缺少1个必需的位置参数:';请求';扩展类时发生父构造函数错误_Python_Python 3.x_Django_Class_Request - Fatal编程技术网

Python __初始化()缺少1个必需的位置参数:';请求';扩展类时发生父构造函数错误

Python __初始化()缺少1个必需的位置参数:';请求';扩展类时发生父构造函数错误,python,python-3.x,django,class,request,Python,Python 3.x,Django,Class,Request,我正在尝试从自定义管理部分的baseView扩展基于类的视图。 以下是仪表板部分的视图 class Dashboard(BaseAdminView): def __init__(self, request): super().__init__(request) def get(self, request): return render(request, 'admin/pages/dashboard.html', {'hello': 'World

我正在尝试从自定义管理部分的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']
我的问题是,当我尝试访问仪表板时,控制台中缺少1个必需的位置参数:“request”错误

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

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

我也看到了

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

添加:
url.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')
]

根据您的问题,在您进入请求方法处理程序之前,您需要执行一些与
请求
对象相关的操作,如
视图
中的
GET/POST
,在
\uuu init\uuu()
方法的幕后,您没有收到任何
请求对象
,如您所见,如果将
*args
**kwargs
添加到init,则视图类中有空

class BaseAdminView(View):
    loggedInUser = None

    def __init__(self, request):
        if (request.session['loggedInAdministrator'] is None):
            return redirect('adminlogin')
        else:
            loggedInUser = request.session['loggedInAdministrator']
不应重写
\uuuu init\uuuu()
。请求对象首先在dispatch()方法中可用,该方法在
\uuu init\uuuu()
之后立即调用,但您也不需要重写该方法。它的主要用途是调用
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)
class Dashboard(BaseAdminView):

    def get(self, request):
        return render(request, 'admin/pages/dashboard.html', {'hello': 'World'})
Dashboard
类似乎是这样的:

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)
class Dashboard(BaseAdminView):

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

你能分享你的
url.py
代码吗?您共享的代码看起来不错。@Hagyn嘿,刚刚从相关应用程序中添加了my urls.py。如何创建类实例?请编辑您的帖子,以便我们可以重新创建您的错误。我只需在“视图”文件夹中创建各种filename.py文件。例如
dashboard.py
是上面提到的dashboard类,而
base.py
是上面提到的BaseAdmin类。然后我将它们从init.py导出为
from.dashboard导入dashboard
。只是标准的东西和发布的
url.py
@在这些情况下,我更喜欢在获取方法之前使用方法或类装饰器,因为它更易使用,我可以选择应用于它的方法。非常感谢。不知道派送方式。干杯