CBV:基於類的視圖python
urls.py from django.urls import path from app01.views import StudentsView urlpatterns = [ path('students/ ',StudentsView.as_view()), ] views.py from django.views import View from django.shortcuts import HttpResponse class StudentsView(View): def get(self,request,*args,**kwargs): return HttpResponse('GET 請求') def post(self,request,*args,**kwargs): return HttpResponse('POST 請求')
csrf_exempt
csrf_protect
# 第一種:給方法加 from django.views import View from django.views.decorators.csrf import csrf_exempt, csrf_protect from django.utils.decorators import method_decorator class StudentsView(View): @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super(StudentsView, self).dispatch(request, *args, **kwargs) def get(self, request, *args, **kwargs): print('GET') return HttpResponse('GET請求') def post(self, request, *args, **kwargs): return HttpResponse('POST請求') # 第二種:給類加 @method_decorator(csrf_exempt,name='dispatch') class TeachersView(View): def get(self, request, *args, **kwargs): print('GET') return HttpResponse('GET請求') def post(self, request, *args, **kwargs): return HttpResponse('POST請求')
class StudentsView(View): def dispatch(self, request, *args, **kwargs): # return HttpResponse('dispath') func = getattr(self,request.method.lower()) return func(request, *args, **kwargs) def get(self, request, *args, **kwargs): return HttpResponse('GET請求') def post(self, request, *args, **kwargs): return HttpResponse('POST請求') def delete(self,request,*args,**kwargs): return HttpResponse('DELETE請求') def put(self,request,*args,**kwargs): return HttpResponse('PUT請求')
class MyBaseView(object): def dispatch(self, request, *args, **kwargs): print('before') func = super(MyBaseView, self).dispatch(request, *args, **kwargs) print('after') return func class StudentsView(MyBaseView, View): def get(self, request, *args, **kwargs): print('GET') return HttpResponse('GET請求') def post(self, request, *args, **kwargs): return HttpResponse('POST請求') def delete(self, request, *args, **kwargs): return HttpResponse('DELETE請求') def put(self, request, *args, **kwargs): return HttpResponse('PUT請求')
from django.urls import path from app01.views import OrderView urlpatterns = [ path('order/',OrderView.as_view()), ] class OrderView(View): def get(self, request, *args, **kwargs): return HttpResponse('獲取訂單') def post(self, request, *args, **kwargs): return HttpResponse('建立訂單') def delete(self, request, *args, **kwargs): return HttpResponse('刪除訂單') def put(self, request, *args, **kwargs): return HttpResponse('更新訂單')
認證
```python
from rest_framework.views import APIView
from rest_framework.exceptions import AuthenticationFaileddjango
class MyAuthentication(object): def authenticate(self, request): token = request._request.GET.get('token') # 能夠作用戶名密碼驗證 if not token: raise AuthenticationFailed('認證失敗') return (1, 2) def authenticate_header(self, request): pass class DogView(APIView): authentication_classes = [MyAuthentication] def get(self, request, *args, **kwargs): return HttpResponse('獲取小狗') def post(self, request, *args, **kwargs): return HttpResponse('建立小狗') def delete(self, request, *args, **kwargs): return HttpResponse('刪除小狗') def put(self, request, *args, **kwargs): return HttpResponse('更新小狗')
```api