• 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
     
  • 相关阅读:
    Ubuntu下将python从2.7升级到3.5
    Python:IOError: image file is truncated 的解决办法
    Google Hack
    Python:将utf-8格式的文件转换成gbk格式的文件
    Python:字符编码详解
    IIS下使用appcmd批量搭建网站
    C#:注册机的实现【提供源代码下载】
    C#:实现快捷键自定义设置
    C#:如何解决WebBrowser.DocumentCompleted事件的多次调用
    C#:WebBrowser中伪造referer,为何对流量统计器无效?
  • 原文地址:https://www.cnblogs.com/hua888/p/10570338.html
Copyright © 2020-2023  润新知