django 自带viewshtml
在django.views.generic中 分如下几个模块django
base: api
RedirectView, TemplateView, View
dates:post
detail:url
DetailView
edit:rest
CreateView, DeleteView, FormView, UpdateView,
list:orm
ListView
我的用的比较多的就是View ,其余的都是继承于Viewhtm
例子以下 能够包含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 viewsget
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组合而得的其余视图类