REST framework 编程核心思想

web开发的两种模式:

  • 前后端分离模式-----对于Django框架,一般要求遵循REST(表现层状态转化)设计风格,在这个基础上,出现了一个DRF(Django+REST+FRAMEWORK)框架,是对Django的再次封装,这个框架可以帮助我们这些苦逼的程序员减少代码量,主要承担了一些权限认证,序列化与反序列化的操作。
  • 前后端不分离------在此不再论述,本文主要针对前后端分离。

搭建DRF项目工程

  • 准备工作:安装Python和Django,然后用命令 pip install djangorestframework安装框架包。

前后端分离中,后端开发人员的核心任务:序列化与反序列化

  • 新建工程,具体过程见下面代码
在PYcharm中的终端输入命令:
# 新建工程,名字叫demo
django-admin startproject demo
# 创建具体应用book_drf
python manage.py  startapp book_drf
# 将rest_framework注册到setting.py 下的INSTALLED_APPS里
INSTALLED_APPS = [
    ...
   'rest_framework']

+ 在开发REST API接口时,我们在视图中需要做的最核心的事是:

	将数据库数据序列化为前端所需要的格式,并返回;

	将前端发送的数据反序列化为模型类对象,并保存到数据库中。
	所以我们现在用DRF框架实现以下这个功能,感受一下。
	
	实现验证和反序列化的步骤,序列化步骤类似,不再举例:
	1-新建一个serializers.py文件,定义一个序列化的类作为序列化器,里面可以写一些验证的代码和反序列化的代码。
	2-在views.py 文件实例化serializers.py中的类,实例化后可以调用序列化器的方法,说白了就是验证和反序列化操作单独放在一个文件,实例化对象去调用。
	# serializers.py
	from user.models import BookInfo
	from rest_framework import serializers
	from django.http import JsonResponse

	# 新建序列化器,用来验证字段是否符合模型类定义的规则。
	class BookSerilizer(serializers.Serializer):
	# btitle 图书名字
    btitle=serializers.CharField(max_length=20)
    # bpub_date 图书发布时间
    bpub_date=serializers.DateField()
    #bread 图书阅读量
    bread = serializers.IntegerField(label='阅读量',default=0)
    # bcomment 图书阅读量
    bcomment = serializers.IntegerField(label='评论量',default=0)
    # 如果还需要进一步筛选过滤条件,就继续定义函数,validate函数对应views.py 中的post请求,比如我规定如果阅读量<评论量就抛出异常,如果满足才会继续执行下一步代码,这样就可以筛选出符合条件的数据。
    def validate(self, attrs):
        bread = attrs['bread']
        bcomment = attrs['bcomment']
        if bread < bcomment:
            raise serializers.ValidationError('阅读量小于评论量')
        return attrs
     # create函数完成的是views.py中put请求保存数据,比如用户提交过来的图书信息,validated_data这个参数就表示完成验证后的数据,完整验证后就需要保存到数据库。
    def create(self, validated_data):
        return BookInfo.objects.create(**validated_data)
     # update函数用来更新图书数据,对应views.py中的put请求,instance表示一个图书对象。
    def update(self, instance, validated_data):
        instance.btitle=validated_data["btitle"]
        instance.bpub_date=validated_data["bpub_date"]
        instance.bread=validated_data["bread"]
        instance.bcomment=validated_data["bcomment"]
        instance.save()
        return JsonResponse({"mesg":"ok"})
     # 下面是views.py文件代码。
	from user.models import BookInfo
	from django.views import View
	from book_drf.serializer import BookSerilizer
	import json
	from django.http import JsonResponse
	class Bookserilizer(View):
    	def post(self,request):
	        data=request.body.decode()
	        data_dict=json.loads(data)
	        ser=BookSerilizer(data=data_dict)
	        err=ser.is_valid()
	        print(err)
	        print(ser.errors)
	        if ser.errors:
	            return JsonResponse({"mesg":"error"})
	        ser.save()
	        return JsonResponse({"mesg":"ok"})

   	 	def put(self,request):
	        book=BookInfo.objects.get(id=8)
	        data=request.body.decode()
	        data_dict=json.loads(data)
	        ser=BookSerilizer(book,data_dict)
	        ser.is_valid()
	        print(ser.errors)
	        ser.save()
	        return JsonResponse({"mesg":"保存成功"})
	
 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值