django views 以及restframe work views和viewsets

 

django 自带views

在django.views.generic中 分以下几个模块

base: 

    RedirectView, TemplateView, View

dates:

detail:

    DetailView

edit:

    CreateView, DeleteView, FormView, UpdateView,

list:

    ListView

个人用的比较多的就是View ,其他的都是继承于View

例子如下 可以包含get 和post

class LoginView(View):
    template_name = 'accounts/simple_form.html'
    def get(self, request, form=None):
        data = {}
        if not form:
            form = forms.LoginForm()
        data['form'] = form
        data['title'] = 'Login'
        data['btn_name'] = 'Login'
        return render(request, self.template_name, data)
    def post(self, request, form=None):
        data = {}
        form = forms.LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    # Redirect to a success page.
                    url = request.GET.get('next', None)
                    if not url:
                        url = reverse('main:admin_index')
                    return redirect(url)
                else:
                    # Return a 'disabled account' error message
                    return self.get(request, form)
            else:
                # Return an 'invalid login' error message.
                msg = 'Invalid login, user does not exist'
                messages.add_message(request, messages.ERROR, msg)
                return self.get(request, form)

        else:
            return self.get(request, form)

rest framework views

views:

    APIView

generics:

    GenericAPIView, CreateAPIView  ........

其中APIView: 和django 的View 差不多

class PostView(views.APIView):
    def get(self, request):
        query = Post.objects.all().count()
        context = {'query':query}
        return Response(context)

GenericAPIView:  

该类有serializer 和queryset 等属性

class PostsView(GenericAPIView):

    queryset = Post.objects.all()
    serializer_class = PostSerializer
    def get(self, request):
        queryset = self.get_queryset()
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

    def post(self, request):
        queryset = self.get_queryset()
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

ListAPIView: 由mixins和GenericAPIView组成

class Post3View(ListAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

 

rest framework viewsets

ViewSet: 继承APIView
GenericViewSet: 继承GenericAPIView
### 3-2-1
class GroupViewSet21(viewsets.GenericViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

    def list(self, request):
        queryset = self.get_queryset()
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

### 3-2-2
class GroupViewSet22(viewsets.GenericViewSet, mixins.ListModelMixin,):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
ReadOnlyModelViewSet ......: 由mixins和GenericViewSet拼装而得  起结构和上例3-2-2 类似

rest framework中的views 和viewsets的区别在于:

viewsets 可以自动被注册 我们不需要关注url, 业务的进一步封装

比如 UserList和UserDetail 这种业务上相类似的 统一封装到UserViewSets中

 

rest framework 主要用于api的构建

个人用的比较多的是 GenericViewSet, GenericAPIView 已经和mixins组合而得的其他视图类

 

转载于:https://my.oschina.net/u/1000190/blog/683811

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值