Django 基于类的通用视图和身份验证

     2023-02-24     64

关键词:

【中文标题】Django 基于类的通用视图和身份验证【英文标题】:Django Class-Based Generic Views and Authentication 【发布时间】:2011-10-01 13:08:00 【问题描述】:

我对 Django 很陌生(从 1.3 开始)。在构建应用程序时,我从第一天开始就使用新的基于类的通用视图,使用内置类的组合并在需要添加到上下文的地方对它们进行子类化。

现在我的问题是,我需要返回我的视图,并且只有登录用户才能访问它们。我找到的所有文档都显示了如何使用旧的功能通用视图执行此操作,而不是基于类的视图。

这是一个示例类:

class ListDetailView(DetailView):
    context_object_name = "list"

    def get_queryset(self):
        list = get_object_or_404(List, id__iexact=self.kwargs['pk'])
        return List.objects.all()

    def get_context_data(self, **kwargs):
        context = super(ListDetailView, self).get_context_data(**kwargs)
        context['subscriber_list'] = Subscriber.objects.filter(lists=self.kwargs['pk'])
        return context

如何向 django 的新的基于类的视图添加身份验证?

【问题讨论】:

How to use permission_required decorators on django class-based views 的可能重复项 【参考方案1】:

还有一个身份验证混合选项,您可以从中派生视图类。所以使用this mixin from brack3t.com:

class LoginRequiredMixin(object):

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(LoginRequiredMixin, self).dispatch(*args, **kwargs)

然后您可以像这样创建新的“需要身份验证”视图:

from django.views.generic import DetailView

class MyDetailView(LoginRequiredMixin, DetailView):
    ....

无需其他添加。感觉很像不重复自己。

【讨论】:

不错!我更喜欢这种方法。【参考方案2】:

decorating class-based views 上的文档中有一个部分 - 如果您只想使用旧的 login_required 等,那就是要走的路。

【讨论】:

我喜欢使用同一个链接中描述的调度方法,只是为了保持 urlconf 更干净。另一种方法是使用 dispatch 方法子类化 DetailView 并调用它 RestrictedDetailView 然后在其他地方子类化 RestrictedDetailView 请注意,上面的链接已更改。立即查看docs.djangoproject.com/en/dev/topics/class-based-views/intro/…【参考方案3】:

我正在描述一种装饰任何 ListView 的方法:

class MyListView(ListView):
    decorator = lambda x: x

    @method_decorator(decorator)
    def dispatch(self, request, *args, **kwargs):
       return super(MyListView, self).dispatch(request, *args, **kwargs)

在编写了这样一个基于类的视图之后, 您可以直接将任何基于函数的装饰器插入到 url 中。

url(r'^myurl/$', MyListView.as_view(decorator=login_required))

【讨论】:

基于 Django 类的通用视图和 ModelForms

】基于Django类的通用视图和ModelForms【英文标题】:DjangoClass-BasedGenericViewsandModelForms【发布时间】:2011-10-0419:01:29【问题描述】:与Django中有关通用视图的许多文档一样,我找不到明确描述如何将新的基于类的通用视图与Django表... 查看详情

基于 Django 类的视图和通用视图详细信息使用

】基于Django类的视图和通用视图详细信息使用【英文标题】:DjangoClassbasedviewandgenericviewdetailsusage【发布时间】:2013-12-1301:47:41【问题描述】:我正在编写一个用于库存管理的django应用程序。我希望django处理如下所示的网址"foo:800... 查看详情

基于类的视图django中的JWT验证

】基于类的视图django中的JWT验证【英文标题】:JWTvalidationinclassbasedviewdjango【发布时间】:2020-08-2511:26:53【问题描述】:我已经使用Django-graphql-jwt库在django中实现了jwt身份验证,现在我想只允许使用JWT令牌的请求在我的端点(/graph... 查看详情

用于创建和更新的基于 Django 类的视图

】用于创建和更新的基于Django类的视图【英文标题】:DjangoClassBasedViewforbothCreateandUpdate【发布时间】:2013-06-1601:49:27【问题描述】:假设我想创建一个基于类的视图,它既更新又创建一个对象。从previousquestion我发现我可以做以... 查看详情

从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?

】从Django中基于类的通用视图自定义表单变量的首选方法是啥?【英文标题】:Whatistheperferredwaytocustomizetheformvariablefromaclass-basedGenericViewinDjango?从Django中基于类的通用视图自定义表单变量的首选方法是什么?【发布时间】:2012-04... 查看详情

Django - 基于类的通用视图 - “没有要重定向到的 URL”

】Django-基于类的通用视图-“没有要重定向到的URL”【英文标题】:Django-ClassBasedGenericView-"NoURLtoredirectto"【发布时间】:2011-09-1002:52:04【问题描述】:我正在使用通用的CreateView,例如:#urls.pyfromdjango.conf.urls.defaultsimport*fro... 查看详情

如何根据 Django 中当前基于类的通用视图模型向模板加载器添加路径

】如何根据Django中当前基于类的通用视图模型向模板加载器添加路径【英文标题】:HowtoaddapathtotheTemplateLoaderdependingofthecurrentclassbasedgenericview\'smodelinDjango【发布时间】:2012-04-1309:48:49【问题描述】:我在基于类的通用视图的模板... 查看详情

从 Django 中基于类的通用视图将 request.user 对象发送到 ModelForm

】从Django中基于类的通用视图将request.user对象发送到ModelForm【英文标题】:Sendingrequest.userobjecttoModelFormfromclassbasedgenericviewinDjango【发布时间】:2011-08-1322:55:50【问题描述】:因此,我的目标是能够在我的ModelForm中过滤ModelChoiceFiel... 查看详情

在基于类的通用视图 CreateView 中访问 request.user 以便在 Django 中设置 FK 字段

】在基于类的通用视图CreateView中访问request.user以便在Django中设置FK字段【英文标题】:Accessingrequest.userinclassbasedgenericviewCreateViewinordertosetFKfieldinDjango【发布时间】:2011-08-1217:53:36【问题描述】:所以我有一个模型,其中包括:cla... 查看详情

基于通用日期的类视图中的 Django TemplateSyntaxErrors

】基于通用日期的类视图中的DjangoTemplateSyntaxErrors【英文标题】:DjangoTemplateSyntaxErrorsingenericdatebasedClassviews【发布时间】:2013-04-0218:52:01【问题描述】:我正在尝试更新旧的Django项目(最后在Django1.4工作)以使用基于类的通用视... 查看详情

带有来自模型的自定义验证消息的 Django 1.5 基于类的视图

】带有来自模型的自定义验证消息的Django1.5基于类的视图【英文标题】:Django1.5ClassBasedViewswithcustomvalidationmessagesfromthemodel【发布时间】:2013-03-0721:45:58【问题描述】:我正在我的django应用程序中编写一个相当简单的CRUD用于项目... 查看详情

htmx 和 django 基于类的视图

】htmx和django基于类的视图【英文标题】:htmxanddjangoClassBasedViews【发布时间】:2022-01-0715:16:57【问题描述】:我试图将倒计时教程从here转换为基于类的视图,但我不知道缺少什么。views.pyclassTimeDifferenceView(TemplateView):delta=datetime(20... 查看详情

Django:将过滤(和排序)添加到基于(通用)类的ListView的最佳方法?

】Django:将过滤(和排序)添加到基于(通用)类的ListView的最佳方法?【英文标题】:Django:bestwaytoaddfiltering(andsorting)to(generic)classbasedListView?【发布时间】:2012-08-0222:03:30【问题描述】:假设我有一个这样的模型:classCar(models.Mo... 查看详情

django后端开发学习笔记djangorestframework基于类的视图(代码片段)

学习参考:【1】DjangoRESTFramework教程(3):基于类的视图APIView,GenericAPIView和视图集目录1.使用基础APIView类2.使用Mixins类和GenericAPI类混配3.使用通用视图generics.*类,比如generics.ListCreateAPIView4.使用视图集ViewSet和ModelViewSet5.总结对比DRF... 查看详情

Django登录身份验证不起作用

】Django登录身份验证不起作用【英文标题】:Djangologinauthenticationnotworking【发布时间】:2013-11-0322:20:36【问题描述】:我正在尝试使用Django提供的通用登录视图。我想要在同一页面上的注册和登录表单。这是我的urls.pyfromdjango.conf... 查看详情

使用查询参数在基于类的视图 Django 中过滤对象?

】使用查询参数在基于类的视图Django中过滤对象?【英文标题】:FilteringObjectsinClassbasedviewDjangousingQueryparameters?【发布时间】:2015-11-0418:43:11【问题描述】:我正在使用基于类的通用视图Listview来列出所有对象。我的意见.py:class... 查看详情

基于 Django 类的视图:发布表单数据返回 302 Found 状态码

】基于Django类的视图:发布表单数据返回302Found状态码【英文标题】:Djangoclassbasedviews:Postingformdatareturns302Foundstatuscode【发布时间】:2018-08-1011:29:55【问题描述】:我正在使用django的基于通用类的视图CreateView将图像上传到一本书... 查看详情

通用视图中的 request.user 和 django 中的纯函数

】通用视图中的request.user和django中的纯函数【英文标题】:request.useringenericviewandinpurefunctionindjango【发布时间】:2021-05-1411:21:15【问题描述】:我使用django-rest-framework-simplejwt进行身份验证。这是我的settings.py文件settings.pyfile最初... 查看详情