开发环境:python3.6django1.11场景一经常从数据库中获取一批数据,然后在前端以列表的形式显示出来,对于示例:获取所有用户,然后显示在用户列表页面。解决方案的常规写法是我们通过Django的ORM查询所有的数据,然后显示出来,代码如下:defuser_list(request):"""返回UserProfile中的所有用户"""users=UserProfile.objects.all()returnrender(request,'talks/users_list.html',context={"user_list":users})可以解决这个问题,但是Django为这种常见的场景提供了一种更加快捷方便的方式,那就是ListView,用法如下:fromdjango.views.genericimportListViewclassUsersView(ListView):model=UserProfiletemplate_name='talks/users_list.html'context_object_name='user_list'这样,我们就完成了上面的功能,而代码很简单。场景二:我想过滤数据,ListView如何实现?代码如下:fromdjango.views.genericimportListViewclassUsersView(ListView):model=UserProfiletemplate_name='talks/users_list.html'context_object_name='user_list'defget_queryset(self):#覆盖get_queryset方法#获取所有is_deletedasFalseusers,并按时间倒序返回数据returnUserProfile.objects.filter(is_deleted=False).order_by('-create_time')如果要过滤更多维度的数据,例如:如果用户属于某部门,只要性别是男的,都可以使用Django提供的Q函数来实现。场景3我想给Template返回多条数据,不仅仅是user_list,可能还有其他数据,比如获取当前登录用户的详细信息,这时候怎么办?,代码如下:fromdjango.views.genericimportListViewclassUsersView(ListView):model=UserProfiletemplate_name='talks/users_list.html'context_object_name='user_list'defget_context_data(self,**kwargs):#Overrideget_context_datamethod#关键是获取原方法的结果context=super().get_context_data(**kwargs)username=self.request.GET.get('user',None)context['user']=UserProfile.对象。get(username=usernamereturncontext这样,返回到Template页面时,context中包含{'user_list':user_list,'user':user}。场景4我想限制接口的请求方法,比如由于只限制GET访问,代码如下:fromdjango.views.genericimportListViewclassUsersView(ListView):model=UserProfiletemplate_name='talks/users_list.html'context_object_name='user_list'http_method_names=['GET']#添加这一行允许请求方法的场景5:我已经将所有数据返回到前端页面。前端页面应该显示在评分页面上。
