Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
Django的通用视图可以减少开发的单调性,它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的视图函数。
from django.views.generic import View
from django.views.generic.base import RedirectView, TemplateView, View
from django.views.generic.dates import (
ArchiveIndexView, DateDetailView, DayArchiveView, MonthArchiveView,
TodayArchiveView, WeekArchiveView, YearArchiveView,
)
from django.views.generic.detail import DetailView
from django.views.generic.edit import (
CreateView, DeleteView, FormView, UpdateView,
)
from django.views.generic.list import ListView
__all__ = [
'View', 'TemplateView', 'RedirectView', 'ArchiveIndexView',
'YearArchiveView', 'MonthArchiveView', 'WeekArchiveView', 'DayArchiveView',
'TodayArchiveView', 'DateDetailView', 'DetailView', 'FormView',
'CreateView', 'UpdateView', 'DeleteView', 'ListView', 'GenericViewError',
]
class GenericViewError(Exception):
"""A problem in a generic view."""
pass
① ListView:显示对象列表
用于展示一个 Model 里面的所有对象,也可以是其子集 (queryset) ,支持分页。
from django.views.generic import ListView
from books.models import Publisher
class PublisherList(ListView):
# 指明要操作的Model(展示 Publisher 的所有对象)
model = Publisher
# 在模板 context 中 model 的变量名,默认是 object_list
context_object_name = 'publisher_list'
# 要渲染的模板,默认是 '<app_name>/<model_name>_list.html'
template_name = 'app/publisher_list.html'
② DetailView:显示一个对象的某个属性详细信息
用于显示某一 Model 中的一个 object 的详细信息。
from django.views.generic import DetailView
from books.models import Author
# 当该页面被访问时,对 Model 做出额外的工作
class AuthorDetailView(DetailView):
queryset = Author.objects.all()
def get_object(self):
# get_object() 默认时返回通过 pk 或 slug 筛选出的对象(该视图需要操作的对象)
# Call the superclass
object = super().get_object()
# Record the last accessed date
# 当有人访问该页面时,更新最后访问时间
object.last_accessed = timezone.now()
object.save()
# Return the object
return object