一、restframework的安装
方式一:pip3 install djangorestframework
方式二:pycharm图形化界面安装
方式三:pycharm命令行下安装(装在当前工程所用的解释器下)
二、基于Django实现的API(不带restframework)
FBV
1 from django.shortcuts import render,HttpResponse 2 3 # Create your views here. 4 import json 5 6 def users(request): 7 response = {'code':1000,'data':None} #code用来表示状态,比如1000代表成功,1001代表 8 response['data'] = [ 9 {'name':'haiyan','age':22}, 10 {'name':'haidong','age':10}, 11 {'name':'haixiyu','age':11}, 12 ] 13 return HttpResponse(json.dumps(response)) #返回多条数据 14 15 def user(request,pk): 16 if request.method =='GET': 17 return HttpResponse(json.dumps({'name':'haiyan','age':11})) #返回一条数据 18 elif request.method =='POST': 19 return HttpResponse(json.dumps({'code':1111})) #返回一条数据 20 elif request.method =='PUT': 21 pass 22 elif request.method =='DELETE': 23 pass 24 25 views
CBV
from django.views import View class UsersView(View): def get(self,request): response = {'code':1000,'data':None} response['data'] = [ {'name': 'haiyan', 'age': 22}, {'name': 'haidong', 'age': 10}, {'name': 'haixiyu', 'age': 11}, ] return HttpResponse(json.dumps(response),stutas=200) class UserView(View): def get(self,request,pk): return HttpResponse(json.dumps({'name':'haiyan','age':11})) #返回一条数据 def post(self,request,pk): return HttpResponse(json.dumps({'code':1111})) #返回一条数据 def put(self,request,pk): pass def delete(self,request,pk): pass views
三、restframework里封装的APIView分析
基于django实现的API许多功能都需要我们自己开发,这时候djangorestframework就给我们提供了方便,直接基于它来返回数据,总之原理都是一样的,就是给一个接口也就是url,让前端的人去请求这个url去获取数据,在页面上显示出来。这样也就达到了前后端分离的效果。
as_view方法
1 @classmethod 2 def as_view(cls, **initkwargs): 3 """ 4 Store the original class on the view function. 5 6 This allows us to discover information about the view when we do URL 7 reverse lookups. Used for breadcrumb generation. 8 """ 9 if isinstance(getattr(cls, 'queryset', None), models.query.QuerySet): 10 def force_evaluation(): 11 raise RuntimeError( 12 'Do not evaluate the `.queryset` attribute directly, ' 13 'as the result will be cached and reused between requests. ' 14 'Use `.all()` or call `.get_queryset()` instead.' 15 ) 16 cls.queryset._fetch_all = force_evaluation 17 18 view = super(APIView, cls).as_view(**initkwargs) 19 view.cls = cls 20 view.initkwargs = initkwargs 21 22 # Note: session based authentication is explicitly CSRF validated, 23 # all other authentication is CSRF exempt. 24 return csrf_exempt(view) 25 26 as_view方法