zoukankan      html  css  js  c++  java
  • python的Web框架,类视图

    类视图

    范式

    1 from django.views import View
    2 
    3 # 继承View
    4 class IndexView(View):
    5     def get(self, request):
    6         #写法和函数视图一样
    7         pass

    在urls中调用的时候,和函数视图配置是不一样的。

    # as_view() 类视图是需要运行
    path('index/',views.IndexView.as_view(), name='index')

    通用视图

    简单应用
    view中的定义
    
    
    1 from django.views.generic import ListView
    2 
    3 class StudentListView(ListView):
    4     # 指定使用的页面
    5     template_name = 'teacher/student_list.html'
    6     
    7     # 获取模型数据
    8     model = Students
    9     
    
    html 中应用
    # 此处的students_list,为view中定义的name,如果不定义则为object_list
    {% for student in students_list %}
        <p>{{ student }}</p>
        
    {% endfor %}
    模块使用
     1 class StudentListView(ListView):
     2     # 指定使用的页面
     3     template_name = 'teacher/student_list.html'
     4     
     5     # 获取模型数据
     6     model = Students
     7     
     8     # 对html中的获取的名字进行修改
     9     context_object_name = 'students_list'
    10     
    11     # 每页显示的数据
    12     paginate_by = 3
    13     
    14     # 页面名称
    15     section = '学生列表'
    16     
    17     # 搜索字段
    18     # search = self.request.GET.get('search','').strip()
    19     
    20        
    21     # 通过这个方法,改变传递在前面的模板对象列表。
    22     def get_queryset(self):
    23         search = self.request.GET.get('search','').strip()
    24         per_page = self.request.GET.get('per_page', 5)
    25         self.paginate_by = int(per_page)
    26     
    27         if search:
    28             if search.isdigit():
    29                 sts = self.model.objects.filter(Q(qq=search)|Q(phone=search),is_deleted=False).order_by('-e_time')
    30             else:
    31                 sts = self.model.objects.filter(name_contains=search,is_deleted=False).order_by('-e_time')
    32         else:
    33             ses = self.models.objects.filter(is_delete=False).order_by('-e_time')
    34         return sts
    35             
    36             
    37             
    38     # 上下文管理,context内容传给html
    39     def get_context_data(self, **kwargs):
    40         context = super().get_context(**kwargs)  # 继承父类
    41         context['section'] = self.section
    42         context['search'] = self.request.GET.get('search','').strip() # 获取的搜索内容
    43         context['page'] = int(self.request.GET.get('page', 1)) # 获取的当前页码
    44         context['per_page'] = self.paginate_by  
    45         
    46         #继承的ListView自动帮我们做了分页,会根据self.paginate_by,page,per_page的参数来进行分页,和之前写的当前页的数据(sts=paginator.get_page(page))是一个意思。
    47         context['students'] = context['page_obj']
    48         return context
    pege_obj html中的使用
    {{ page_obj }}
    
    在网页端显示的方式是一个对象:
    <Page 1 of 6>

    DetailView

    from django.views.generic import DetailView
    
    class StudentDetailView(DetailView):
        template_name = 'teacher/detail'
        model = Students
    # urls.py中 应用
    
    path('detail/<int:pk>',view.StudentDetailView.as_view(),name='detail')

    html 中应用

    {{ object.name }}
    {{ object.sex }}
    {{ object.studentsdetail.college }}

    类视图的权限装饰

    在urls.py文件中使用

    from django.contrib.auth.decorators import login_required
    
    path('student/',login_required(views.StudentListView.as_view()),name='stuent')
    # 一般使用在项目根urls中

    view中使用的权限类装饰

     1 方法一:定义函数
     2 
     3 from django.utils.decorators import method_decorator
     4 
     5 class StudentListView(ListView):
     6     pass
     7     当前的通用类视图没有显式指示一个get、post
     8     
     9     # 分发get,post
    10     @method_decorator(login_required)
    11     def dispatch(self, request, *args, **kwargs):
    12         return super().dispatch(*args, **kwargs)
    13         
    14     def get_queryset(self):
    15 
    16     def get_context_data(self.**kwargs):
    1 方法二:装饰类
    2 
    3 @method)decorator(login_required, name='dispatch')
    4 class StudentListView(ListView):
    5     pass
     
  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/hua888/p/10570338.html
Copyright © 2011-2022 走看看