栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django中drf的操作记录

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django中drf的操作记录

温顾练习的保存

""" drf的四种开发方式,以及 分页、限流、认证、排序、权限等等  以下部分字段不一定存在,只是都练习到写上"""


# 一、函数式编程
@api_view(["GET", "POST"])
def test_list(request):
    """
    获取数据
    """
    if request.method == "GET":
        query_set = Student.objects.all()
        s = StudetSerializer(query_set, many=True)
        return JsonResponse({"datas": s.data, "status": status.HTTP_200_OK})
    elif request.method == "POST":
        s = StudetSerializer(data=request.data, partial=True)    #  partial 非必传部分更新,定义5个,传3个,只更新3个
        if s.is_valid():
            s.save(teacher="12321")  # 前端不传的字段,查到后可通过这种去传入
            return JsonResponse({"datas": s.data, "status": status.HTTP_200_OK})
        return JsonResponse({"datas": s.errors, "status": status.HTTP_400_BAD_REQUEST})

    elif request.method == "PUT":
        student = Student.objects.get(id=1)
        s = StudetSerializer(instance=student, data=request.data)
        if s.is_valid:
            s.save()



# 二、类编程

class TestList(APIView):

    def get(self, request):
        # 无新知识,跟上面一致
        pass

    def post(self, request):
        # 无新知识,跟上面一致
        pass


# 三、通用视图类
class StudentsViewsetss(generics.ListCreateAPIView):
    # generics.CreateAPIView   新建 post
    # generics.DestroyAPIView  删除 delete
    # generics.UpdateAPIView   更新  put
    # generics.RetrieveUpdateAPIView   获取、更新、删除操作的VIEW
    # queryset、serializer_class等的名称是固定的,哪些不满足,看看源码可以重写方法
    queryset = Student.objects.all()
    serializer_class = StudetSerializer

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)  # raise_exception是否抛出异常,一般都是true
        print(serializer.is_valid(raise_exception=True))
        # 以下为逻辑段
        if "flag" in request.data:
            self.perform_create(serializer)
            return Response("保存成功", status=status.HTTP_201_CREATED)
        else:
            return Response("保存失败", status=status.HTTP_400_BAD_REQUEST)


# 四、drf的视图集viewset
class TestViewSet(viewsets.ModelViewSet):
    queryset = Student.objects.filter(id=1)
    serializer_class = StudetSerializer

    def perform_create(self, serializer):
        serializer.save(teacher="123")


    """
    一、 此种写法比较麻烦
    get:请求方式
    list: ModelViewSet->ListModelMixin->list方法
    
    重要!!!!路由写法, url(r'viewsets/$', TestViewSet.as_view({
                                                                "get": "list",
                                                                "post": "create",
                                                                "put":  "update",
                                                                "delete": "destroy"
                                                                }), name="viewsets-list"),
    二、 routers (用这种)                                         
     router.register(r'students', TestViewSet, basename="test")
    """







# method_decorator的作用是为函数视图装饰器补充第一个self参数,以适配类视图方法, method_decorator 是将函数装饰器转换成方法装饰器。
@method_decorator(csrf_exempt, name="dispatch")  # post, 一种取消csrf
class LogView(APIView):

    @csrf_exempt      # 二种取消csrf
    def get(self, request):
        # django内置密码加密
        pwd = request.GET.get("pwd")
        # 加密算法,默认pbkdf2_sha256,hasher参数指定算法
        make = make_password(pwd)
        log.info("输出加密密码:{}".format(make))

        if check_password(pwd, make):
            log.info("校验成功")
        return JsonResponse(data={})





class ModelsView(APIView):

    def get(self, request):
        # student = Student.objects.create(name="123", sex="女", number="456123")
        # techer = Teacher.objects.create(techer_name="www")
        sql = Student.objects.filter(name="123").query  # 返回原始sql

        '''
        update_or_create: 更新或新建
        defaults: 新建参数
        **kwargs: 匹配字段
        '''
        # Teacher.objects.update_or_create(defaults={},techer_name="www")

        return JsonResponse(data={})

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号