LOADING

Follow me

Django 学习笔记(十五②)
十一月 24, 2013|IT

Django 学习笔记(十五②)


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的前缀。












Name purpose Two Scoops Example
View 基础视图可以被重用到任何地方 See the section called Implementing a

Simple JSON API.
RedirectView 重定向到其他Url Send users who visit ‘/log-in/’ to ‘/login/’.
TemplaetView 展示Django HTML模版 The ‘/about/’ page of our site.
ListView 列出objects List ice cream flavors.
DetailView 列出一个object Details on an ice cream flavor
FormView 提交一表单 The site’s contact or email form.
CreateView 创建一对象实例 Create a new ice cream flavor
UpdateView 更新一对象实例 Update an existing ice cream flavor.
DelteView 删除一对象实例 Delete an unpleasant ice cream flavor

like Vanilla Steak.
Generic date Views For display of object that occur over a range of time Blogs 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了,汗!


no comments
Share

发表评论