zoukankan      html  css  js  c++  java
  • django-基于类的视图

    self.kwargs的含义????

    继承DetailView类和ListView类的区别????

    1.都可以重写template_name属性,DetailView是给模板传一个object对象,ListView给模板传一个queryset对象(多个)

    2.都可以重写model属性,都可以重写get_queryset方法,get_queryset方法默认是返回model.objects.all()

    3.DetailView有get_object方法,默认是从get_queryset的结果中筛选出pk=xx的,pk来自url的get请求参数(self.kwargs);而ListView没有get_object方法

    自定义的View每次访问都创建对象还是只创建一个对象????

    每访问一次MyView的get方法就创建一个MyView对象

    所以每次访问返回都是“2”

     

     各个View的多重继承关系??

    from django.views import View
    from django.views.generic import TemplateView, ListView, DetailView, FormView....
    另外还有:
    'RedirectView', 'ArchiveIndexView',
    'YearArchiveView', 'MonthArchiveView', 'WeekArchiveView', 'DayArchiveView',
    'TodayArchiveView', 'DateDetailView',
    'CreateView', 'UpdateView', 'DeleteView',

    DetailView:

    TemplateView :

     ListView:

     FormView:

     

    CreateView:

     

     UpdateView:

     

     DeleteView:

     

     ArchiveIndexView:

    YearArchiveView:处理URL中包括'../year/'的归档请求,需要重写get方法,在get方法中调用get_dated_items()方法,列表展示

    MonthArchiveView:处理URL中包括'../year/month'的归档请求,需要重写get方法,在get方法中调用get_dated_items()方法,列表展示

    WeekArchiveView:处理URL中包括'../year/week'的归档请求,需要重写get方法,在get方法中调用get_dated_items()方法,列表展示

    DayArchiveView:处理URL中包括'../year/month/day'的归档请求,需要重写get方法,在get方法中调用get_dated_items()方法,列表展示

    TodayArchiveView:获取当前时间datetime.date.today()的所有归档请求,需要重写get方法,在get方法中调用get_dated_items()方法,列表展示

    DateDetailView:处理URL中包括'../year/month/day'的单个对象详情请求,需要重写get方法,在get方法中调用get_dated_items()方法,展示单个对象

    JsonResponse混合

    from django.http import JsonResponse
    
    class JSONResponseMixin:
        """
        混合类:返回JsonResponse
        """
        def render_to_json_response(self, context, **response_kwargs):
            return JsonResponse(
                self.get_data(context),
                **response_kwargs
            )
    
        def get_data(self, context):
            """
            返回一个将被JSON .dumps()序列化为JSON的对象。
            注意:这太天真了;事实上,你需要
            做更复杂的处理,以确保任意
            对象——比如Django模型实例或queryset
            ——可以序列化为JSON。
            """
            return context                

    用法1:

    from django.views.generic import TemplateView
    
    class JSONView(JSONResponseMixin, TemplateView):
        def render_to_response(self, context, **response_kwargs):
            return self.render_to_json_response(context, **response_kwargs)

    用法2:

    from django.views.generic.detail import SingleObjectTemplateResponseMixin
    
    class HybridDetailView(JSONResponseMixin, SingleObjectTemplateResponseMixin, BaseDetailView):
        def render_to_response(self, context):
            # Look for a 'format=json' GET argument
            if self.request.GET.get('format') == 'json':
                return self.render_to_json_response(context)
            else:
                return super().render_to_response(context)

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    基于类的视图允许你使用不同的类实例方法响应不同 HTTP 请求方法,而不是在单个视图函数里使用有条件分支的代码。

    基于类的视图有一个 as_view() 类方法,

    当一个请求到达的 URL 被关联模式匹配时,这个类方法返回一个函数。

    这个函数创建一个类的实例,调用 setup() 初始化它的属性,然后调用 dispatch() 方法。 

    dispatch 观察请求并决定它是 GET 和 POST,等等。如果它被定义,那么依靠请求来匹配方法,否则会引发 HttpResponseNotAllowed 。

    类属性在很多基于类的始终很常见,这里有两种方法来配置或设置类属性

    1.在子类中覆盖属性和方法

     

     2.在 URLconf 中将配置类属性作为参数来调用 as_view() 。

     装饰器:

    1.在URLconf中装饰

     2.将装饰器应用到类的dispatch()方法,需要先将函数装饰器转换为方法装饰器

     3.装饰类,用name传递要被装饰的方法名:

     4.装饰器叠加,以下两种方式是等价的

     --------------

  • 相关阅读:
    远程连接ORACLE服务的设置方法
    错误:ORA28002: the password will expire within 7 days 解决方法
    SQL Server、Oracle、Mysql查询前n条记录
    oracle登录错误:ORA28000: the account is locked 解决方法
    学习oracle中的PCTFREE和PCTUSED
    错误“ORA12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄”解决方法
    windows计划任务+批处理文件实现oracle数据库的定时备份与恢复
    Address already in use: JVM_Bind(端口冲突)
    ORACLE VARCHAR 排序问题
    从百度空间到CSDN——博客搬家源码
  • 原文地址:https://www.cnblogs.com/staff/p/12454627.html
Copyright © 2011-2022 走看看