Django 笔记之 View 视图

视图是Django最重要的模块之一,本文以每个类为一小节,以自己的理解简略介绍的重要API。

通用视图

View

方法

1.dispatch
2. http_method_not_allowed
3. options

属性

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

搞清楚后面这些http方法的用途?

类方法

as_view()

dispatch(request, *args, **kwargs)就是一个分发方法,将不同的http方法请求分配给对应的方法,GET->get,POST->post

http_method_not_allowed(request, *args, **kwargs) 如果方法不被支持,就调用此方法,默认返回可以的方法列表

options(request, *args, **kwargs)返回可以的方法列表

TemplateView

父类
  • TemplateResponseMixin
  • ContextMixin
  • View
方法

get_context_data()
使用方法:
调用父类方法;往context 里添加新内容;返回 context

def get_context_data(self, **kwargs):
    context =super().get_context_data(**kwargs)
    context['latest_articles'] = Article.objects.all()[:5]
    return context

也可以给 as_view() 提供 extra_context 关键字参数

RedirectView

父类
  • View
方法

get_redirect_url()


属性
  • url 目标地址
  • pattern_name url 中的 name
  • permanent True status code 301;False status code 302
  • query_string 是否将GET查询字符串传递给新位置。 True则将查询字符串附加到URL。 False,则丢弃查询字符串。 默认为False。

query_string 不理解?
就是把从 原始url中捕获的参数,追加到新的url上。例如:article/1/ 转到 detail/1/; url = ‘detail’; query_string=True;

展示视图

DetailView

父类
  • SingleObjectTemplateResponseMixin
  • TemplateResponseMixin
  • BaseDetailView
  • SingleObjectMixin
  • View
方法
  1. dispatch()
  2. http_method_not_allowed()
  3. get_template_names()
  4. get_slug_field()
  5. get_queryset()
  6. get_object()
  7. get_context_object_name()
  8. get_context_data()
  9. get()
  10. render_to_response()

ListView

父类
  • MultipleObjectTemplateResponseMixin
  • TemplateResponseMixin
  • BaseListView
  • MultipleObjectMixin
  • View
方法
  1. dispatch()
  2. http_method_not_allowed()
  3. get_template_names()
  4. get_slug_field()
  5. get_queryset()
  6. get_object()
  7. get_context_object_name()
  8. get_context_data()
  9. get()
  10. render_to_response()

编辑视图

FormView

父类
  • TemplateResponseMixin
  • BaseFormView
  • FormMixin
  • ProcessFormView
  • View
方法
  1. dispatch()
  2. http_method_not_allowed()
  3. get_template_names()
  4. get_slug_field()
  5. get_queryset()
  6. get_object()
  7. get_context_object_name()
  8. get_context_data()
  9. get()
  10. render_to_response()
属性

template_name
form_class
success_url

CreateView

用来创建一个对象的视图,表单有误则显示错误,否则保存对象。

父类
  • SingleObjectTemplateResponseMixin
  • TemplateResponseMixin
  • BaseCreateView
  • ModelFormMixin
  • FormMixin
  • SingleObjectMixin
  • ProcessFormView
  • View
方法
  1. dispatch()
  2. http_method_not_allowed()
  3. get_template_names()
  4. get_slug_field()
  5. get_queryset()
  6. get_object()
  7. get_context_object_name()
  8. get_context_data()
  9. get()
  10. render_to_response()
属性

template_name_suffix 模板名称后缀
object

UpdateView

用来创建一个对象的视图,表单有误则显示错误,否则保存对象。

父类
  • SingleObjectTemplateResponseMixin
  • TemplateResponseMixin
  • BaseUpdateView
  • ModelFormMixin
  • FormMixin
  • SingleObjectMixin
  • ProcessFormView
  • View
方法
  1. dispatch()
  2. http_method_not_allowed()
  3. get_template_names()
  4. get_slug_field()
  5. get_queryset()
  6. get_object()
  7. get_context_object_name()
  8. get_context_data()
  9. get()
  10. render_to_response()
属性

template_name_suffix 模板名称后缀
object
fields 指名要更新的域

DeleteView

用来确定删除一个对象的视图,并且删除对象。仅当POST方法时删除,如果是GET,返回一个包含POST按钮的URL。

父类
  • SingleObjectTemplateResponseMixin
  • TemplateResponseMixin
  • BaseDeleteView
  • DeletionMixin
  • BaseDetailMixin
  • SingleObjectMixin
  • ProcessFormView
  • View
方法
  1. dispatch()
  2. http_method_not_allowed()
  3. get_template_names()
  4. get_slug_field()
  5. get_queryset()
  6. get_object()
  7. get_context_object_name()
  8. get_context_data()
  9. get()
  10. render_to_response()
属性

template_name_suffix 模板名称后缀
success_url 成功后跳转的地址

日期视图

ArchiveIndexView

父类
  • MultipleObjectTemplateResponseMixin
  • TemplateResponseMixin
  • BaseArchiveIndexView
  • BaseDateListView
  • MultipleObjectMixin
  • DateMixin
  • View
属性

默认 object_name 为 lastest
默认 后缀 为 _archive
date_list 默认按 year
date_field 指定模型的日期字符串

YearArchiveView

父类
  • MultipleObjectTemplateResponseMixin
  • TemplateResponseMixin
  • BaseYearArchiveView
  • BaseDateListView
  • MultipleObjectMixin
  • YearMixin
  • DateMixin
  • View
属性

make_object_list 是否提供对象列表给context;默认False

get_make_object_list() 决定是否提供 object list 给context,make_object_list

allow_future 允许未来时间
allow_empty 允许为空
默认 object_name 为 lastest
默认 后缀 为 _archive
date_list 默认按 year
date_field 指定模型的日期字符串

Context 内容
  • date_list 一个包含所有有对象的月份的查询集
  • year 当前查询年份
  • next_year 下一年第一天
  • previous_year 前一年第一天

MonthArchiveView WeekArchiveView DayArchiveView TodayArchiveView 类似

DateDetailView 和日期绑定的对象视图,只显示该日这个对象的细节。


Mixin 混合基类

ContextMixin

上下文混合基

属性

extra_context 给 as_view 提供额外 context
TemplateView.as_view(extra_context={'title': 'Custom Title'})

方法

get_context_data(**kwargs) 处理 context 再返回

TemplateResponseMixin

模板响应混合基

属性

template_name 模板名
template_engine 模板引擎,没用过
response_class 默认是 TemplateResponse
content_type 响应类型 默认是 None 由 DEFAULT_CONTENT_TYPE 决定

方法

render_to_response(context, **response_kwargs) 返回一个 self.response_class 实例

get_template_names() 返回一个模板名列表,第一个被找到的会被使用

SingleObjectMixin

单例对象混合基

属性

model 对象的模型类
queryset 查询集 和 model 用一个就行
slug_field 模型中 slug-field 名字,默认slug一般不用;'s-l-u-g’像这种域就是slug
slug_url_kwarg url 中 slug对象的关键字,默认slug即可;
pk_url_kwarg 中 pk的关键字,默认pk即可
context_object_name 指定用在 context 里的对象名
query_pk_and_slug

query_pk_and_slug 属性可以帮助缓解不安全的直接对象引用攻击。 当应用程序允许通过顺序主键访问各个对象时,攻击者可以强制猜测所有URL; 从而获得应用程序中所有对象的列表。 如果不希望有权访问单个对象的用户获取此列表,则将 query_pk_and_slug 设置为True将有助于防止猜测URL,因为每个URL都需要两个正确的非顺序参数。 简单地使用独特的slug可能会保持相同的目的,但是这种方案允许您拥有非独特的slug.

方法

get_object(queryset=None)
没有queryset,则用此方法 以pk_url_kwarg 查询对象;如果没有 pk_url_kwarg ,则用 slug_url_kwarg 参数查 slug_field. 如果有 query_pk_and_slug=True 则同时按这两个参数找。

get_queryset() 重写此方法自定义查询集
get_context_object_name(obj) 获取上下文里对象的名字,默认是把模型名小写。Article -> article
get_context_data(**kwargs) 重写此方法自定义上下文
默认 object 和 context_object_name 两个对象。
get_slug_field() 默认返回 slug_field

SingleObjectTemplateResponseMixin

单例模板响应混合

属性和方法

template_name_field 模型里的模板名称域
template_name_suffix 模板名称后缀
get_template_names() 返回模板名列表,按下面顺序:

  • template_name
  • template_name_field
  • <app_label>/<model_name><template_name_suffix>.html

MultipleObjectTemplateResponseMixin

多例模板响应混合基
同上

MultipleObjectMixin

多对象混合基,用来展示一个对象的列表

如何使用页数:
paginate_by
path('objects/page<int:page>/', PaginatedView.as_view()),
传入 page 参数
/objects/?page=3
page 可以用 last做参数
/objects/?page=last

属性和方法
  • allow_empty 允许为空
  • model
  • queryset 是可变对象,使用时注意使用 all() 或者 get_queryset()使用副本
  • ordering 等效于 order_by()
  • paginate_by 一个整数,一页多少个
  • paginate_orphans 分页孤儿,一个整数,防止最后一页数目太少
  • page_kwarg 分页关键字 默认是 page
  • paginator_class 分页器类 默认 django.core.paginator.Paginator
  • context_object_name
  • get_queryset()
  • get_ordering()
  • get_paginate_by(queryset) 默认返回 paginate_by
  • get_paginator(queryset, per_page, orphans=0, allow_empty_first_page=True) 默认返回 paginator_class
  • get_paginate_orphans()
  • get_allow_empty()
  • get_context_object_name(object_list) 默认 Article -> article_list
  • get_context_data(**kwargs)
  • paginate_queryset(queryset, page_size) 返回一个四元组(paginator, page, object_list, is_paginated)

Editing mixins 编辑混合基

  • django.views.generic.edit.FormMixin
  • django.views.generic.edit.ModelFormMixin
  • django.views.generic.edit.ProcessFormView
  • django.views.generic.edit.DeletionMixin

FormMixin

表单混合基

父级

ContextMixin

属性
  • initial 一个包含初始化数据的字典
  • form_class 需要实例化的类 instantiate
  • success_url 表单处理成功重定向的地址
  • prefix 生成表单的前缀
方法
  • get_initial()
  • get_form_class()
  • get_form(form_class=None)实例化一个 form_class 类的表单,使用 get_form_kwargs() 的参数。如果没有 form_class 则使用 get_form_class()
  • get_form_kwargs()获取表格初始化需要的数据
  • get_prefix()
  • get_success_url()
  • form_valid(form) 重定向到 get_success_url()
  • form_invalid(form) 响应上下文包含该form
  • get_context_data(**kwargs) 调用 get_form(),在上下文里加一个 {'form':form}

ModelFormMixin

父类

FormMixin
ingleObjectMixin

同上

ProcessFormView

提供基本的 GET POST 工作流

父类

View

属性方法
  • get(request, *args, **kwargs)
  • post(request, *args, **kwargs)
  • put(*args, **kwargs)

DeletionMixin

提供基本的 delete 工作流

属性方法
  • success_url
  • get_success_url()

Date-based mixins 日期混合基

YearMixin

属性方法
  • year_format 默认 ‘%Y’
  • year str
  • get_year_format() 默认 year_format
  • get_year()
  • get_next_year(date)
  • get_previous_year(date)

MonthMixin

  • month_format 默认 ‘%b’

DayMixin

  • day_format 默认 ‘%d’

WeekMixin

  • week_format 默认 ‘%U’周日开始;‘%W’周一开始

DateMixin

所有时间相关行为的公共基

属性和方法
  • date_field 指定模型中的日期域
  • allow_future 允许未来日期
  • get_date_field()
  • get_allow_future()

BaseDateListView

父类
  • DateMixin
  • MultipleObjectMixin
属性方法
  • allow_empty 默认 Fasle
  • date_list_period 必须是 year month day 三者之一
  • get_dated_items 返回一个三元组(date_list,object_list,extra_context)
  • get_dated_queryset(**lookup) 返回查询集
  • get_date_list_period()
  • get_date_list(queryset, date_type=None, ordering=’ASC’) 返回具体哪些日期有条目
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值