1. 程式人生 > >django常用的通用檢視方法

django常用的通用檢視方法

1,列表檢視
class ArticlePostListView(ListView):
    model = ArticlePost
    context_object_name = 'post'
    template_name = 'course/course_list.html'

    # queryset = ArticlePost.objects.filter(user=User.objects.filter(username='admin')) #方法1
    def get_queryset(self): #方法2
        qs = super(ArticlePostListView,self).get_queryset()
        return qs.filter(user=User.objects.filter(username="admin"))

2,建立檢視
class CreateArticlePostView(CreateView):    #繼承該類後不需要get方法
    model = ArticlePost
    fields = ['title','body']   #對應form表單屬性
    template_name = 'course/manage/create_coruse.html'  #模板檔案

    def post(self, request, *args, **kwargs):   #重寫Post方法
        form = ArticlePostForm
        if form.is_valid():
            new_post = form.save(commit=False)
            new_post.user = self.request.user
            new_post.save()
            return redirect("course:namege_course")
        return self.render_to_response({'form':form})   #如果前端不需要request屬性,則可以使用render_to_response方法代替render方法

3,刪除檢視
class DeleteArticlePostView(DeleteView):
    model = ArticlePost
    # template_name = 'course/manage/delete_course_confirm.html'    #原始方法,需要獨立頁面,不推薦
    success_url = reverse_lazy("article:article_list")
    # reverse_lazy:當專案裡的URLConf未載入時用來取代reverse。reverse_lasy是reverse的一層封裝,這樣我就可以用reverse_lazy可以用在任何reverse

    def dispatch(self, request, *args, **kwargs):
        resp = super(DeleteArticlePostView, self).dispatch(*args,**kwargs)
        if self.request.is_ajax():                                                  #針對ajax方法優化處理
            response_data = {"result":"ok"}
            return  HttpResponse(json.dump(response_data,content_type="application/json"))
        else:
            return resp

# url(r'dedete-course/(?P<pk>\d+/$)',DeleteArticlePostView.as_view(),name='delete_course')  #只支援pk和slug關鍵字
# href={% url 'course:delete_course' course.id  %}