一、Base views

View

class django.views.generic.base.View

主要的基于类的基本视图。所有其他基于类的视图都从这个基类继承而来。它不是一个通用的视图,因此也可以从django.views导入

  • 方法流程图

dispatch()

http_method_not_allowed()

options()

  • 示例(views.py)
from django.http import HttpResponse
from django.views import View
class Base_View(View):
def get(self, request, *args, **kwargs):
return HttpResponse('Hello, World!')
  • 示例(urls.py)
from django.conf.urls import url
from myapp.views import MyView
urlpatterns = [
url(r'^view/$', Base_View.as_view(), name='base_view'),
]
  • 属性:http_method_names

该属性为可以接受的http请求的类型的列表:默认为 ['get','post','put','patch','delete','head','options','trace']

  • 方法:as_view(cls,**initkwargs):

    返回接受请求并返回响应的可调用视图

response = Base_View.as_view()(request)

  dispatchtp_meth(request,*args,**kwargs):

    通过用户的请求方式,getattr对应的方法来处理,没有相应的方法或该方法不在http_method_names中交由http_method_not_allowed方法处理,返回错误信息。

  http_method_not_allowed(request,*args,**kwargs):

    返回请求错误的提示信息,通过http.HttpResponseNotAllowed方法

  options(request,*args,**kwargs):

    处理对OPTIONS HTTP动词请求的响应。返回Allow包含视图允许的HTTP方法名称列表的响应。

TemplateView

  class django.views.generic.base.TemplateView

  呈现指定的模板,也会传入上下文和URLconf传递的任何关键字参数。

  • 该视图继承了以下视图的属性和方法:

    django.views.generic.bash.TemplateResponseMixin

    django.views.generic.bash.ContextMixin

    django.views.generic.bash.View

  • 方法流程图

    dispatch()

    http_method_not_allowed()

    get_context_data()

  • 示例(views.py)
class Tem_View(TemplateView):
# 在URLconf中配置的参数会覆盖在类中的关键字配置,所有这里的指定模板名称可有可无
template_name = "helei/tem_vies.html"
  • 示例(urls.py)
from django.conf.urls import url
from helei import views
urlpatterns = [
# 这两种配置的差别你懂得
# url(r'^tem/', views.Tem_View.as_view(template_name = "helei/tem_vies.html"),name='tem'),
url(r'^tem/', views.Tem_View.as_view(),name='tem'),
]
  • 其他说明:get_context_data()

    可以重写该方法来给前端传递上下文来进行模板的渲染,实例如下:

#####  views.py
class Tem_View(TemplateView):
template_name = "helei/tem_vies.html"
def get_context_data(self, **kwargs):
context = super(Tem_View,self).get_context_data(**kwargs)
context['pro_info_obj'] = models.Porject_Info.objects.all()
return context ##### helei/tern_views.html
{% for project in pro_info_obj %}
<ul>
<li>{{ project.project_name }}</li>
<li>{{ project.project_path }}</li>
<li>{{ project.project_port }}</li>
</ul>
{% endfor %}

Django2.0在as_view()中可以指定extra_context来在上下文中添加一个字典,链接

  实例:from django.views.generic import TemplateView

      TemplateView.as_view(extra_context={'title':'Custom Title'})

RedirectView

  class django.views.generic.base.RedirectView

  重定向到给定的URL,它将根据URL中获取的参数进行插值。URL中的任何‘%’字符串都必须写成‘$$’以便python 将其转换为输出中的单个百分号

  如果给定的URL是None,Django将返回HttpResponseGone(401)

  • 该视图继承了以下视图的属性和方法

    django.views.generic.base.View

  • 方法流程图

    dispatch()

    http_method_not_allowed()

    get_redirect_url()

  • 示例(views.py)
from django.views.generic.base import RedirectView
from django.shortcuts import get_object_or_404
from helei import models class Tem_Redirect_View(RedirectView):
permanent = False
query_string = True
pattern_name = 'tem_detail' # 这个名称的模板后边会提到,在detail view时。
def get_redirect_url(self, *args, **kwargs):
print args,kwargs
article = get_object_or_404(models.Porject_Info, pk=kwargs['pk'])
# article.update_counter()
return super(Tem_Redirect_View, self).get_redirect_url(*args, **kwargs)
  • 示例(urls.py)
from django.conf.urls import url
from django.contrib import admin
from helei import views
urlpatterns = [
url(r'^tem/', views.Tem_View.as_view(template_name = "helei/tem_vies.html"),name='tem'),
url(r'^tem_redirect/(?P<slug>\w+)', views.Tem_Redirect_View.as_view(),name='tem_redirect'),
url(r'^tem_list/', views.Tem_List_View.as_view(),name='tem_list'),
url(r'^tem_detail/(?P<slug>\w+)', views.Tem_Detail_View.as_view(),name='tem_detail'),
]
# 后两个urlconfif后期会用到
  • 属性

    url   作为字符串重定向到的URL,如果最后返回的url为None,这会返回410错误。

    pattern_name    要重定向到的模板名称,通过from django.urls import reverse 方法对名称进行解析得到URL。

    permanent    重定向是否为永久性的,唯一区别是返回的状态码,如果为True,那么状态码为301,如果为False,则返回的状态码为302,默认为False。

    query_string    是否将GET查询字符串传递到新的位置,True查询字符串被追加到URL。False则被丢弃,默认为False。

  • 方法

    get_redirect_url(*args,**kwargs)    构造重定向的目标URL

class Tem_Redirect_View(RedirectView):
permanent = False
query_string = True
pattern_name = 'tem_detail'
def get_redirect_url(self, *args, **kwargs):
print args,kwargs
article = get_object_or_404(models.Porject_Info, pk=kwargs['pk'])
# article.update_counter() # 这个存在疑问
return super(Tem_Redirect_View, self).get_redirect_url(*args, **kwargs)

二、Generic display views

  通用视图函数使用在显示数据时。

ListView

  Class django.views.generic.list.ListView

  当视图执行时,self.object_list将包含一个对象列表,返回一个上下文供前端模板使用

  • 该视图继承了一下视图的方法和属性

    django.views.generic.list.MultipleObjectTemplateResponseMixin

    django.views.generic.base.TemplateResponseMixin

    django.views.generic.list.BaseListView

    django.views.generic.list.MultipleObjectMixin

    django.views.generic.base.View

  • 方法流程图

    dispatch()

    http_method_not_allowed()

    get_template_names()

    get_queryset()

    get_context_object_name()

    get_context_data()

    get()

    render_to_response()

  • 示例(views.py)
class Tem_List_View(ListView):
paginate_by = 1 # 分页每页显示的数据条数,page=n 进行翻页
# page_kwarg = 'fanye' # 默认翻页为page,可以指定
model = models.Porject_Info # 返回那个库的数据
# context_object_name = 'host_info' # 上下文字段,默认为
ordering = 'project_port' # 根据该字段进行排序
template_name_suffix = 'list' # 指定模板的后缀,默认就是list
# template_engine = "" # 指定模板引擎 没看懂
# template_name = '////' # 指定模板,默认会根据models、models的appname和template_name_suffix生成模板路径和名称,前端返回的上下文为object_list和template_name
  • 示例(urls.py)
from django.conf.urls import url
from django.contrib import admin
from helei import views
urlpatterns = [
url(r'^tem_list/', views.Tem_List_View.as_view(),name='tem_list'),
]
  • 示例(project_info_list.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>Porject List</h2>
<ul>
{% for project in object_list %}
<li>{{ project.project_name }}</li>
{% endfor %}
</ul>
</body>
</html>

DetailView

  Class django.views.generic.detail.DetailView

  当这个函数执行时,self.object将包含视图正在操作的对象。

  • 该视图继承了以下视图的方法和属性

  django.views.generic.detail.SingObjectTemplateResponseMixin

  django.views.generic.base.TemplateResponseMinix

django.views.generic.detail.BaseDetailView

django.views.generic.detail.SingleObjectMixin

django.views.generic.base.View

  • 方法流程图

  dispath()

  http_method_not_allowed()

  get_template_names()

  get_slug_field()

  get_queryset()

  get_object()

  get_context_object_name()

  get_context_data()

  get()

  render_to_response()

  • 示例(views.py)
class Tem_Detail_View(DetailView):
model = models.Porject_Info
slug_field = "project_port"
slug_url_kwarg = "project_port" # 这个字段和前端传递的字段相同
context_object_name = "project_obj" # 自定上下文字段,和object共存。
  • 示例(urls.py)
from django.conf.urls import url
from django.contrib import admin
from helei import views
urlpatterns = [
url(r'^tem_detail/(?P<project_port>\w+)', views.Tem_Detail_View.as_view(),name='tem_detail'),
]
  • 示例(porject_info_detail.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<li>{{ project_obj.project_name }}</li>
<li>{{ project_obj.project_path }}</li>
<li>{{ project_obj.project_port }}</li>
<li>{{ project_obj.Domain_name }}</li>
</body>
</html>

最新文章

  1. SQL 分组去重
  2. SharePoint 2013 &quot;通知我&quot;功能简介
  3. observer观察者模式
  4. Tomcat 调优总结
  5. POJ2389: 大数字乘法算法
  6. SolrCloud 5.2.1 installation and configuration
  7. pyqt QTableWidget例子学习(重点)
  8. WebView的基本使用
  9. Windows 7的系统还原,你用了吗?
  10. jQuery MiniUI
  11. Java 中的 String 类常用方法
  12. RHive
  13. TP3.2.3 接入支付宝
  14. awk匹配某一段内容,打印第一段
  15. js数组去重常用方法
  16. python安装过程中的一些问题
  17. Hello2 分析
  18. ubuntu-12.04.4-alternate-i386安装
  19. Linux简单使用
  20. (原创)一个简洁通用的调用DLL函数的帮助类

热门文章

  1. python基础学习篇章一
  2. Python之旅_计算机基础入门
  3. java异常常见面试问题
  4. vue组件详解(二)——使用props传递数据
  5. LSTM主要思想和网络结构
  6. Python之socketserver模块和验证客户端链接的合法性
  7. RxJava系列6(从微观角度解读RxJava源码)
  8. Python入门之PyCharm的快捷键与常用设置和扩展(Mac系统)
  9. python开发:python基本数据类型
  10. HDU1028【母函数】