Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django小技巧15: 使用基于类视图的Mixins

Django小技巧15: 使用基于类视图的Mixins

作者头像
用户1416054
发布于 2018-12-06 03:20:57
发布于 2018-12-06 03:20:57
1.1K00
代码可运行
举报
文章被收录于专栏:JackeyGao的博客JackeyGao的博客
运行总次数:0
代码可运行

Django小技巧15: 使用基于类视图的Mixins

Posted November 05, 2018

翻译整理自: simpleisbetterthancomplex.com

今天讲述三点关于 Mixins 使用的一些规范:

  • Django 提供的View 保持在继承的最右边.
  • Mixins 在基本视图的左侧
  • Mixins 应该继承Python的内置对象类型(object).

下面举例说明规则

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class FormMessageMixin(object):
    @property
    def form_valid_message(self):
        return NotImplemented

    form_invalid_message = 'Please correct the errors below.'

    def form_valid(self, form):
        messages.success(self.request, self.form_valid_message)
        return super(FormMessageMixin, self).form_valid(form)

    def form_invalid(self, form):
        messages.error(self.request, self.form_invalid_message)
        return super(FormMessageMixin, self).form_invalid(form)


class DocumentCreateView(FormMessageMixin, CreateView):
    model = Document
    fields = ('name', 'file')
    success_url = reverse_lazy('documents')
    form_valid_message = 'The document was successfully created!'

依类似的方式, 你可以在UpdateView中, 重用相同的FormMessageMixin, 并覆盖默认的form_invalid_message方法.

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DocumentUpdateView(FormMessageMixin, UpdateView):
    model = Document
    fields = ('name', )
    success_url = reverse_lazy('documents')
    form_valid_message = 'The document was successfully updated!'
    form_invalid_message = 'There are some errors in the form below.'

Django 1.9开始, 内置的LoginRequiredMixin和UserPassesTestMixin. 如果你要在视图中使用它们, 它们始终位于最左侧:

Python

Mixins在左,View在后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DocumentUpdateView(LoginRequiredMixin, FormMessageMixin, UpdateView):
    model = Document
    fields = ('name', )
    success_url = reverse_lazy('documents')
    form_valid_message = 'The document was successfully updated!'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django小技巧09: 创建修改密码视图
就此而言, 使用函数式视图更容易实现。 因为PasswordChangeForm不从ModelForm继承。并且其构造函数使用user参数.
用户1416054
2018/11/29
1.4K0
Django小技巧09: 创建修改密码视图
Django模板中使用消息message框架
在web应用程序中,通常需要在处理表单或其他类型的用户输入之后向用户显示一次性通知消息(也称为“flash message”)。
菲宇
2019/06/13
3K0
Django模板中使用消息message框架
django 1.8 官方文档翻译: 3-4-3 使用基于类的视图处理表单
你自己实现这些功能经常导致许多重复的样本代码(参见在视图中使用表单)。为了避免这点,Django 提供一系列的通用的基于类的视图用于表单的处理。
ApacheCN_飞龙
2022/11/27
2K0
Django内置的通用类视图及实例
表示对象列表的一个页面. 执行这个视图的时候,self.object_list将包含视图正在操作的对象列表(通常是一个查询集,但不是必须). 属性:
菲宇
2019/06/13
3.1K0
Django内置的通用类视图及实例
Django小技巧14: messages 框架
让用户知道应用程序发生了什么, 是个极好的用户体验。让应用程序和用户之间能够有个很好的『交流』是个不错的选择。
用户1416054
2018/12/06
9880
Django2.0中文(通用视图)
1、通用视图 urls.py: from django.views.generic import TemplateView path(r'about/',TemplateView.as_view(template_name="about.html")), 2、通用视图 about.html xx/templates/about.html
用户5760343
2022/05/14
7650
Django内置的通用类视图CBV及示例
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菲宇
2019/10/22
3.4K0
Django内置的通用类视图CBV及示例
基于django的视频点播网站开发-step6-个人中心功能
从本讲起,我们开始个人中心功能的开发。个人中心里面包括个人资料、修改密码、订阅设置、意见反馈这四部分。通过这部分的开发,我们将会接触到更多django的用法。
西门吹雪1997
2019/02/26
1.2K0
python-Django-URL 路由(二)
下面是一个简单的Django应用程序的示例,它使用URL路由来处理客户端请求。这个示例应用程序提供了一个简单的博客系统,允许用户浏览博客文章、创建新文章和编辑现有文章。
玖叁叁
2023/04/23
8770
利用Django通用类视图(class
最近在学习Django,官方文档介绍地十分详细。但是“大而全”就难免会有些不够速成,和我们这个浮躁的互联网时代格格不入,所以我就整理了这个文档。就像coolshell说的,一泡屎的时间就可以看完。
py3study
2020/01/03
1.6K0
Django实战篇-论坛回帖视图
使用 Django 的模型,都是 django.db.models.Model 类的子类。
小团子
2019/07/18
5750
Django实战篇-论坛回帖视图
Django实战-信息资讯-登录验证
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2019/07/18
7100
Django实战-信息资讯-登录验证
Django messages 消息(下)
有几个快捷方法提供标准的方式来新增消息并带有常见的标签(这些标签通常表示消息的 HTML 类型)
小团子
2019/07/18
9191
Django messages 消息(下)
【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)
文章目录 一、候选人登录注册 二、创建建立模型 三、用户在线投递简历 1)创建视图与模板 2) 优化表单细节 让简历进入到面试流程 一、候选人登录注册 方法一:使用django-registraion-reduex (不建议), 相关配置 方法二:allauth 集成(建议) ✨【Django | allauth】登录_注册_邮箱验证_密码邮箱重置✨ ✨【Django | allauth】useprofile 用户模型扩展✨ ✨【Django | allauth】重写allauth重置密码方
计算机魔术师
2022/08/19
9430
【Django | 开发】面试招聘信息网站(用户登录注册&投在线递简历)
基于django的视频点播网站开发-step9-后台视频管理功能
从本讲开始,我们开始视频管理功能的开发,视频管理包括视频上传、视频列表、视频编辑、视频删除。另外还有视频分类的功能,会一同讲解。这一讲非常重要,因为你将学习到一些之前没有学过的技术,比如大文件上传技术。
西门吹雪1997
2019/03/04
1.7K0
django中ModelForm多表单组合的解决方案
django是Python语言快速实现web服务的大杀器,其开发效率可以非常的高!但因为秉承了语言的灵活性,django框架又太灵活,以至于想实现任何功能都有种“条条大路通罗马”的感觉。这么多种选择放在一起,如何分出高下?我想此时的场景下就两个标准:
陶辉
2019/06/21
3.5K0
Django DeleteView without confirmation template, but with CSRF attack
Django的Class based view十分好用,也很灵活。其中DeleteView( https://docs.djangoproject.com/en/1.10/ref/class-based-views/generic-editing/#django.views.generic.edit.DeleteView )有点特别蛋疼的,他理想的流程是这样:点击删除 -> 跳转到确认页面 -> 点击确认删除 -> 删除对象 -> 跳转到success_url。
phith0n
2020/10/15
1K0
diango之基于内置视图CBS编程
Class-based views是Django为解决建站过程中的常见的呈现模式而建立的。具有如下几个原则:
菲宇
2019/06/13
7320
基于django的视频点播网站开发-step11-后台用户管理功能
这是一个普通的视图类,通过get()和post()来完成用户添加的功能,get里面负责页面的展示,post里面负责逻辑处理。在get中,初始化form为UserAddForm,因为添加的用户是有类别的,所以我们在UserAddForm中应用了is_staff字段来表示管理员。在post中,我们通过user.set_password(password)来设置新密码。user.save()来保存记录到数据库。保存成功后会跳转到myadmin/user_add_success.html页面。
西门吹雪1997
2019/03/04
8700
Django 2.1.7 使用内置messages显示通知消息
在Web应用程序中,有时候需要在处理表单或其他类型的用户输入后向用户显示一次性通知消息(也称为“flash消息”),例如:用户注册成功、订单提交完成等信息。
Devops海洋的渔夫
2019/08/22
1.7K0
推荐阅读
相关推荐
Django小技巧09: 创建修改密码视图
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验