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組合而得的其餘視圖類