django-rest_framework api框架学习day1
今天开始了django-rest-framework的学习
***
其实api写起来的话要比前后端一起写要简单很多,因为你不需要关心前端怎么写,主要心思放在后端上面即可,前端的话随便找个模板,然后用vue语法嵌套上去就好了,一样可以做到很好看,实现了前后端的分离,非常的nice,开始学习之路了!加油奥利给
***
首先需要安装rest-framework
***
pip install framework
***
接着在setting-installed-apps中注册
***
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘testAPI.apps.TestapiConfig’,
‘rest_framework’,
‘ajax’,
]
***
注册完成之后路由上的写法也有些不同,
URL中
***
from django.urls import path
from . import views
from .views import Order
app_name=’testAPI’
urlpatterns=[
path(”,Order.as_view()),
]
***
引入,然后以前的视图函数变成了类Order.as_view()
***
接着就是视图中的各种请求了,例如post,get,delete,put,等等等等。。。
***
最主要的两个包
****
用于api类的继承
from django.views import View
用于json格式数据的输出,
from django.http import JsonResponse
****
下面来看具体的写法
***
class Order(View):
dispatch这个方法是所有的请求进来就先交个他处理,可以自己定义,不过不建议自己定义,还是遵从规则好点,因为各种类型的请求都是经过他的处理然后才返回数据的
def dispatch(self, request, *args, **kwargs):
return HttpResponse(‘我是被执行的’)
@csrf_exempt
def get(self,request,*args,**kwargs):
set={
‘code’:100,
‘meg’:’获取成功’
}
return JsonResponse(set)
def post(self,request,*args,**kwargs):
set={
‘code’:100,
‘meg’:’增加成功’
}
return JsonResponse(set)
def put(self,request,*args,**kwargs):
set={
‘code’:100,
‘meg’:’修改成功’
}
return JsonResponse(set)
def delete(self,request,*args,**kwargs):
set={
‘code’:100,
‘meg’:’删除成功’
}
return JsonResponse(set)
***
上面是几种常见的增删改查请求方式,(符合标准的
)
***
另外,在写api的过程中你还会遇到post需要csrf认证,那么api怎么去除认证呢?
首先需要导入两个包,一个method_decorator,还有一个是csrf_exempt
***
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
***
免去csrf验证用法,有两种方式,
***
1. @method_decorator(csrf_exempt,name=’dispatch’)
class Order(View):
直接加在你的类前面。
2. @method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(Order,self).dispatch(self, request, *args, **kwargs)
直接在sidpatch前面加入免除csrf验证即可免去csrf验证
***
今天是4月2号继续学习restfulapi接口
***
今天内容是数据的返回,直接上代码吧
***
def get(self,request,*args,**kwargs):
# 通过kwargs拿到api接口传递进来的数据
pk=kwargs.get(‘pk’)
print(kwargs.get(‘pk’))
if not pk:
# 如果pk为空就查询全部
book_list = []
all = models.Bookinfo.objects.all()
for li in all:
dic = {}
dic[‘title’] = li.title
dic[‘content’] = li.content
book_list.append(dic)
# 对json数据进行编码转换
return JsonResponse({‘status’: 100, ‘msg’: ‘ok’,’result’:book_list},json_dumps_params={‘ensure_ascii’:False})
else:
# 如果pk一个就查询一个,
这里有个查询技巧,就是values直接把查询的值转化成字典,然后取出,必须要这步,不然就会报错了
a = models.Bookinfo.objects.filter(pk=pk).values(‘title’,’content’).first()
print(a)
json_dumps_params={‘ensure_ascii’:False}在浏览器上输出正常字符
return JsonResponse({‘status’:100,’msg’:’ok’,’result’:a},json_dumps_params={‘ensure_ascii’:False})
***
postman工具,提交方式有是那种,form-data,urlencoding,和json格式提交数据
原生django对urlencoding会进行解析兼容较好,其余的都不会进行解析
***
##下面是rest_framework框架
***
from rest_framework.serializers import Serializer 序列化器
from rest_framework.views import APIView # 继承自View的api接口
from rest_framework.response import Response # 返回Response
***
csrf问题,如果是继承自APIview中的话是默认局部禁用掉csrf验证的,所以,补助是csrf验证也是可以的,但是如果有继承自View的话就会默认开启csrf验证,这样的话View如果没有通过csrf验证就会抛出错误
***
传送数据到外部称之为序列化,外部传送数据进来称反序列化