Django/drf的CBV---面向资源开发--及相应 (指定一个类里面默认有get 和 post等请求方法,你去实现)--apiview

https://www.bilibili.com/video/BV1z5411D7BQ?p=3&vd_source=caabcbd2a759a67e2a3de8acbaaf08ea

 

 

 

 

 

get、post 那些方法都是固定的,只要请求使用对应的请求方式就会触发

 

 

 

用cbv就是面向资源开发,比如下面的接口都是面向students去开发接口,根据请求方法确定动作,uri是没有动词的

 

换成rf的APIView 效果一样的

记得要在setting文件加上 'rest_framework'

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'OneApp',
    'rest_framework'   ---这个
] 

具体

urls

from api import views      //自己的视图层

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
urlpatterns = [
    path(r'getsql/', views.BookView.as_view()),

]

 

views

from django.http import HttpResponse
from rest_framework.views import APIView

class BookView(APIView):
    def get(self,request):
        return HttpResponse("123")

 

 

 Response响应

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status


class Test(APIView):
    def get(self,request):
        return Response(
            data=123, # 返回的信息
            status=status.HTTP_204_NO_CONTENT,  # 代表成功
            headers={"token": "xxxx"},
        )

 

常用响应码

HTTP_200_OK = 200
HTTP_301_MOVED_PERMANENTLY = 301
HTTP_400_BAD_REQUEST = 400
HTTP_401_UNAUTHORIZED = 401
HTTP_500_INTERNAL_SERVER_ERROR = 500

 

用drf的他会返回页面or接口,具体怎么设置见下方链接

参考: http://www.manongjc.com/detail/20-unwpxkvhounfvxi.html

 

例子

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status  #保存了所有HTTP响应状态对应的常量

class BookView(APIView):
    def post(self,request):
        '''获取请求体数据'''
        print(request.data)  #直接可以接收前端传过来json 或者表单数据  {"name":123}
        print(request.data.get("name"))
        '''获取查询参数'''
        print(request.query_params)    #/?aa=111
        print(request.query_params.get("aa"))
        return Response({'status': "1000"},status=status.HTTP_201_CREATED,headers={"token":"11111"});

 

 

get获取url上面的参数的2种方法

方法一:
    
view.py
from rest_framework.views import APIView
class BookView2(APIView):
    def get(self, request,**kwargs):
        obj = kwargs.get('user_id')
        return Response(obj)
    
    

url.py
url('^book/(?P<user_id>.*)', views.BookView2.as_view()),



方法二:

view.py
from rest_framework.views import APIView
class BookView2(APIView):
    def get(self,request,aa):
        print(aa) ##获取uri上面的
        print(request.query_params) ##获取url后面拼接的参数
        return Response(123)
    
url.py
url('^book/(\d+)/$', views.BookView2.as_view()),

请求 http://127.0.0.1:8000/book/1/?aa=2

 

posted @ 2022-09-27 01:21  凯宾斯基  阅读(42)  评论(0)    收藏  举报