Django的通用视图

Django的ListView

经常有从数据库中获取一批数据,然后在前端以列表的形式展现,比如:获取到所有的用户,然后在用户列表页面展示。

from django.views.generic import ListView
from django.contrib.auth.mixins import LoginRequiredMixin


class Order_ListView(LoginRequiredMixin, ListView):
    login_url = config['login_url']
    redirect_field_name = config['redirect_to']

    model = Order
    paginate_by = 200
    context_object_name = 'result'
    ordering = 'id'
    page_kwarg = 'page'
    template_name = 'order.html'

	def get(self, *args, **kwargs):
        # 获取数据之前可以做一些其他的操作
        return super().get(*args, **kwargs)

	@property
    def page_number(self):
    	# 分页
        page_kwarg = self.page_kwarg
        page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1
        return page
        
    def get_context_data(self, *, object_list=None, **kwargs):
        content = super(Facede_dys_Order_ListView, self).get_context_data(**kwargs)
        # 需要携带其他数据的在这里写业务
        return content
    
    def get_queryset(self): # 重写get_queryset方法
    	return Order.objects.filter(is_deleted=False).order_by('-create_time')

Django的DetailView

from django.views.generic import DetailView
from django.contrib.auth.mixins import LoginRequiredMixin

class Order_DetailView(LoginRequiredMixin, DetailView):
    login_url = config['login_url']
    redirect_field_name = config['redirect_to']

    model = Manufacture
    template_name = 'detail.html'
    pk_url_kwarg = 'id'
    context_object_name = 'result'
    query_pk_and_slug = False

    def get(self, *args, **kwargs):
        return super().get(*args, **kwargs)

    def get_context_data(self, **kwargs):
        content = super(Order_DetailView, self).get_context_data(**kwargs)
        return content

    def post(self, *args, **kwargs):
        create_data = {k: v for k, v in self.request.POST.items() if k if v}
        order.objects.filter(id=create_data['id']).update(status=1)
        return JsonResponse({'code': 200, 'message': '添加完成!'})

Django的CreateView

from django.views.generic import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin

class Order_CreateView(LoginRequiredMixin, CreateView):
    login_url = config['login_url']
    redirect_field_name = config['redirect_to']

    model = order
    fields = '__all__'
    template_name = 'order_create.html'

    def get(self, *args, **kwargs):
        return super().get(*args, **kwargs)

    def get_context_data(self, *, object_list=None, **kwargs):
        content = super(Order_CreateView, self).get_context_data(**kwargs)
        return content

    def post(self, *args, **kwargs):
        create_data = {k: v for k, v in self.request.POST.items() if k if v}
        Manufacture.objects.create(**create_data)
        return JsonResponse({'code': 200, 'message': 'OK!'})

Django的UpdateView

from django.views.generic import UpdateView
from django.contrib.auth.mixins import LoginRequiredMixin

class Order_UpdateView(LoginRequiredMixin, UpdateView):
    login_url = config['login_url']
    redirect_field_name = config['redirect_to']

    model = Order
    template_name = 'order_update.html'
    context_object_name = 'result'
    pk_url_kwarg = 'id'
    fields = '__all__'

    def get(self, *args, **kwargs):
        return super().get(*args, **kwargs)

    def get_context_data(self, **kwargs):
        content = super(Order_UpdateView, self).get_context_data(**kwargs)
        return content

    def post(self, *args, **kwargs):
        update_date = {k: v for k, v in self.request.POST.items() if k if v}
        Manufacture.objects.filter(id=id, auth_id=auth_id).update(**update_date)
        return JsonResponse({'code': 200, 'message': '修改成功!'})

Django的DeteleView

from django.views.generic import DeteleView
from django.contrib.auth.mixins import LoginRequiredMixin

class Order_DeleteView(LoginRequiredMixin, DeleteView):
    login_url = config['login_url']
    redirect_field_name = config['redirect_to']

    model = order
    template_name = 'order_delete.html'
    pk_url_kwarg = 'id'
    context_object_name = 'result'
    success_url = '/index/order/'

    def get(self, *args, **kwargs):
        auth_info = check.auths(self.request)
        if auth_info['code'] != 200:
            return redirect(to=auth_info['urls'])
        self.auths_info = auth_info
        return super().get(*args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(Order_DeleteView, self).get_context_data(**kwargs)
        context['ready_name'] = self.auths_info['ready_name']
        context['url_id'] = self.auths_info['url_id']
        context['id'] = self.kwargs[self.pk_url_kwarg]
        return context

    def form_valid(self, form):
        Manufacture.objects.filter(
            id=self.kwargs[self.pk_url_kwarg],
            auth_id=form.data['auth_id'],
        ).delete()
        return JsonResponse({'code': 200, 'message': '删除成功!', 'urls': self.success_url})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值