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

NamepurposeTwo Scoops Example
View 基础视图可以被重用到任何地方See the section called Implementing a
Simple 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 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 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时,使用PyCharm作为开发工具可以提高效率。PyCharm是一款功能强大的Python集成开发环境,它提供了丰富的功能和工具,可以帮助开发者更好地编写和调试Django应用程序。 在学习Django的过程中,可以使用PyCharm创建Django项目,并使用其内置的Django支持功能来简化开发过程。PyCharm可以自动识别Django项目的结构,并提供代码补全、语法检查、调试等功能,帮助开发者更快地编写和调试代码。 此外,PyCharm还提供了集成的版本控制系统,如Git,可以方便地管理和追踪代码的变化。它还支持自动化测试和部署,可以帮助开发者更好地进行项目管理和发布。 总之,使用PyCharm作为开发工具可以提高Django学习的效率和便利性。它的强大功能和友好的用户界面使得开发者可以更专注于代码的编写和项目的开发。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *3* [PyCharm平台下初学Django框架](https://blog.csdn.net/howard2005/article/details/93491364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pycharm平台下的Django教程](https://blog.csdn.net/Sunshine_ZCC/article/details/73918408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值