Django 学习笔记(十五②)
来源:互联网 发布:手机通讯软件作用 编辑:程序博客网 时间:2024/05/16 06:06
Two scoops of Django 1.5第八章混合类,原先说实在的真是没接触过mixin(混合类),现在就翻译这一部分吧
mixins(混合类)
在程序设计中,混合类提供的功能是可继承的,但它本身不能被实例化。在编程语言使用多重继承,
混合类是实现聚类一种手段。
当使用混合类合成自己的视图类,我们推荐Kenneth Love提出的继承规则。这些规则遵循Python的方法规则,
尽可能用最简单的定义方式,方法解析是从左到右(也就是说继承类是混合类在左边,普通类在右边):
注:所说的方位都是继续的类的设置方位
Django基础视图类总是放在右边
混合类在基础视图的左边
混合类继承于Python内建object类型
下面给出实例:
from django.views.generic import TemplateView
class FreshFruitMixin(object):
def get_context_data(self, **kwargs):
context = super(FreshFruitMixin,self).get_context_data(**kwargs)
context["has_fresh_fruit"] = True
r return context
class FruityFlavorView(FreshFruitMixin, TemplateView):
template_name = "fruity_flavor.html"
在上面相当silly的列子中,这FruityFlavorView 类是从 FreshFruitMixin 和 TemplateView继承而来的。因为TemplateView
是基础视图类所提供,它被放在最右,我们把FreshFruitMixin放在最左。我们知道这一方式我们的方法与性能都将执行顺畅。
Which Django CBV Should Be Used For What Task?
对与确定在哪里使用哪一视图对于开发者来说是很有挑战性的。有一些观点是显而易的,比如那些执行操作,创建、读取、更新或删除数据
的操作,但是其他的操作就比较难以确定。
此处有一便捷图表其列出其名称,以及每一Django CVBs的目的。所以列出的视图都被假设为Django.views.generic的前缀。
NamepurposeTwo Scoops ExampleView 基础视图可以被重用到任何地方See the section called Implementing aSimple JSON API.RedirectView重定向到其他UrlSend users who visit ‘/log-in/’ to ‘/login/’.TemplaetView展示Django HTML模版The ‘/about/’ page of our site.ListView列出objectsList ice cream flavors.DetailView列出一个objectDetails on an ice cream flavorFormView提交一表单The site's contact or email form.CreateView创建一对象实例Create a new ice cream flavorUpdateView更新一对象实例Update an existing ice cream flavor.DelteView删除一对象实例Delete an unpleasant ice cream flavor
like Vanilla Steak.Generic date ViewsFor display of object that occur over a range of timeBlogs are a common reason to use
them. For Two Scoops, we could create a
nice, public history of when flavors were
added to the database.
Generals Tips For Django CBVs
这一部分涵盖对于大多数Django CBVs开发 有用的建议
Constranging Django CBV Access to Aunthentication Users
虽然Django CBV文档提供了一个django.contrib.auth.decorators.login_required CBVs应用的例子,这使用起来很不方便。幸运的是,django-braces提供了一个现成的实现方式,您可以随时使用。例如:
# flavors/views.py
from django.views.generic import DetailView
from braces import LoginRequiredMixin
from .models import Flavor
class FlavorDetailView(LoginRequiredMixin, DetailView):
model = Flavor
TIP:不要忘记CBV 混合类的要求!
记住:
LoginRequiredMixin 必须在左边
基础视图类必须在右边
如果忘记或者改变规则,那么将引起不可预估的结果
依据表单在视图中定制逻辑操作
当您需要在一个视图中执行一个自定义操作时CBV工作流发送form_valid()方法请求。返回django.http.HttpResponseRedirect。
from django.views.generic import CreateView
from braces.views import LoginRequiredMixin
from .models import Flavor
class FlavorCreateView(LoginRequiredMixin, CreateView):
model = Flavor
def form_valid(self, form):
# Do custom logic here
return super(FlavorCreateForm, self).form_valid(form)
为无效表单在视图中定义操作
当你需要为无效表单在视图中执行自定义操作,form_invalid()方法是从Django CBV工作流发出request。这一方法返回django.http.HttpResponse
from django.views.generic import CreateView
from braces.views import LoginRequiredMixin
from .models import Flavor
class FlavorCreateView(LoginRequiredMixin, CreateView):
model = Flavor
def form_invalid(self, form):
# Do custom logic here
return super(FlavorCreateForm, self).form_invalid(form)
这一章总算翻译出来了,我了个艹,居然3:16了,汗!
- Django 学习笔记(十五②)
- Django 学习笔记(十五①)
- 学习笔记(十五)
- c++学习笔记十五
- Java学习笔记十五
- c++学习笔记十五
- Django学习笔记-初识Django
- java学习笔记(十五)
- Linux学习笔记(十五)
- 学习笔记(二十五)
- c语言学习笔记十五
- Java学习笔记(十五)
- Java学习笔记(十五)
- LinuxCast学习笔记十五:user_basic
- Nginx学习笔记(十五):ngx_setproctitle()
- Java学习笔记(十五)
- python 学习笔记(十五)
- Android学习笔记(十五)
- CCNP路由实验之三 动态路由之RIP
- hdu 4115 Eliminate the Conflict
- 享元模式lua实现
- 我達達的手槍,是美麗的顏射
- 进程终止 linux
- Django 学习笔记(十五②)
- Hadoop的datanode无法启动
- SRM 597div2 1K
- hdu Holiday's Accommodation dfs
- CSS 类选择器知识点
- ubuntu chmod 和 chown 命令用法
- 【程序员:你不是真正的快乐】
- 半夜冒冷汗
- AutoHotkey的应用及与鼠标的配合