drf框架的全稱:diango-rest framework,是一種後端框架。python
接口:鏈接兩個物質的媒介,完成信息交互。而web程序中的接口:做爲前臺頁面與後臺數據庫鏈接的媒介。 git
web接口組成:web
url:長得像放回數據的url連接。如api.baidu.map/search,一訪問後臺返回給你的是一大堆查詢到的數據 結果 。做爲接口最主要的部分。數據庫
請求參數:前臺按照指定的key提供數據給後臺django
響應數據:後臺與數據庫交互後將數據反饋給前臺json
一個規定的請求參數的url訪問後能返回對應的結果的url連接。後端
接口規範:就是爲了採用不一樣的後臺語言,也能使用一樣的接口獲取到一樣的數據。api
如何寫接口:接口規範是規範化書寫接口的,寫接口要寫 url、響應數據。安全
注意:若是將請求參數也歸入考量範圍,那就是在寫 接口文檔restful
1)用api關鍵字來標識接口url。如:api.baidu.com | www.baidu.com/api
2)考慮到接口數據安全性,優先選擇https協議。
3)若是一個接口中有多個不一樣的版本,須要在url中標識體現出來。如:api.baidu.com/v1/... | api.baidu.com/v2/...
4)接口操做的數據源稱之爲資源,在url中通常採用資源複數形式,一個接口能夠歸納爲對資源的多種操做方式。如:api.baidu.com/books | www.baidu.com/api/books(pk),操做單個資源的時候,須要用到主鍵pk。
5)請求方式有多種,用一個url處理如何保證不混亂 ---> 經過請求方式標識操做資源的方式。
/books get 獲取全部
/books post 增長一個(多個)
/books/(pk) delete 刪除一個
/books/(pk) put 總體更新一個
/books/(pk) patch 局部更新一個
6) 資源每每涉及數據的各類操做方式 ---> 篩選、排序、限制。如:api.baidu.com/books/?search=西&ordering=-price&limit=3
1) http請求的響應會有相對應的響應碼,接口是用來返回操做的資源數據,能夠擁有操做數據結果的狀態碼。status: 0(操做資源成功) ;1(操做資源失敗); 2(操做資源成功,但沒匹配結果)
注:資源狀態碼不像http狀態碼,通常都是後臺與前臺或是客戶約定的
2) 資源的狀態碼文字提示。如:status ok '帳號有誤' '密碼有誤' '用戶鎖定'
3) 資源自己。results。
注意:刪除資源成功不作任何數據返回(返回空字符串)
4) 不能直接放回的資源(子資源、圖片、視頻等資源),返回該資源的url連接
1 from django.conf.urls import url, include 2 from django.contrib import admin 3 4 5 urlpatterns = [, 6 url(r'^admin/', admin.site.urls), # 路由分發,分發給api中的路由 7 url(r'^api/', include('api.urls')) 8 ]
1 from django.conf.urls import url 2 from . import views 3 4 urlpatterns = [ 5 url(r'^books/', views.Book.as_view()), # 執行as_view這個函數,再拿到執行結果 6 url(r'^books/(?P<pk>.*)/$', views.Book.as_view()), 7 ]
from django.db import models class Book(models.Model): title = models.CharField(max_length=64) price = models.DecimalField(max_digits=5, decimal_places=2) class Meta: db_table = 'old_boy_book' verbose_name = '書籍' verbose_name_plural = verbose_name def __str__(self): return '《%s》' % self.title
1 from django.contrib import admin 2 from . import models 3 4 admin.site.register(models.Book)
>: python manage.py makemigrations >: python manage.py migrrate >: python manage.py createsuperuser
from django.http import JsonResponse from django.views import View from . import models # 六大基礎接口:獲取一個,獲取全部,增長一個,刪除一個,總體更新一個,局部更新一個 # 十大接口:羣增,羣刪,總體改羣改 局部改羣改 class Book(View): def get(self, request, *args, **kwargs): pk = kwargs.get('pk') # 有名分組 if not pk: # 若是有pk,查單個。若是沒有pk,查全部 # 操做數據庫 book_obj_list = models.Book.objects.all() # 拿到全部的結果 # 序列化過程 book_list = [] for obj in book_obj_list: dic = {} dic['title'] = obj.title dic['price'] = obj.price book_list.append(dic) # 響應數據 return JsonResponse({ 'status': 0, # 資源的狀態碼 'msg': 'ok', 'results': book_list }, json_dumps_params={'ensure_ascii': False})
else: # 單查 book_dic = models.Book.objects.filter(pk=pk).values('title', 'price').first() if book_dic: return JsonResponse({ 'status': 0, 'msg': 'ok', 'results': book_dic }, json_dumps_params={'ensure_ascii': False}) return JsonResponse({ 'status': 2, 'msg': '無結果', }, json_dumps_params={'ensure_ascii': False}) # postman能夠完成不一樣方式的請求:get | post | put ... # postman發送數據包有三種方式:form-data | urlencoding | json # 原生django對urlencoding方式數據兼容最好 def post(self, request, *args, **kwargs): # 前臺經過urlencoding方式提交數據 try: book_obj = models.Book.objects.create(**request.POST.dict()) if book_obj: return JsonResponse({ 'status': 0, 'msg': 'ok', 'results': {'title': book_obj.title, 'price': book_obj.price} }, json_dumps_params={'ensure_ascii': False}) except: return JsonResponse({ 'status': 1, 'msg': '參數有誤', }, json_dumps_params={'ensure_ascii': False}) return JsonResponse({ 'status': 2, 'msg': '新增失敗', }, json_dumps_params={'ensure_ascii': False})
在官網下載安裝https://www.getpostman.com/ ,詳細安裝步驟可見 http://www.onlinedown.net/soft/971602.htm 。
get請求,攜帶參數採用Params。post等請求,不須要pk主鍵, 在Body中提交數據包能夠採用三種方式:form-date、urlencoding、json。全部請求均可以攜帶請求頭
安裝所要輸入的指令 >: pip3 install djangorestframework
from rest_framework.views import APIView from rest_framework.response import Response # 響應數據 from rest_framework.request import Request # 請求數據 from rest_framework.serializers import Serializer # 序列化 from rest_framework.settings import APISettings # from rest_framework.filters import SearchFilter # 查詢過濾器 from rest_framework.pagination import PageNumberPagination # 分頁 from rest_framework.authentication import TokenAuthentication from rest_framework.permissions import IsAuthenticated # 是不是登陸用戶 from rest_framework.throttling import SimpleRateThrottle # 頻率 class Test(APIView): def get(self, request, *args, **kwargs): return Response('drf get ok')
1) 請求走的是APIView的as_view函數
2) 在APIView的as_view調用父類(django原生)的as_view,還禁用了 csrf 認證
3) 在父類的as_view中dispatch方法請求走的又是APIView的dispatch
4) 完成任務方法交給視圖類的請求函數處理,獲得請求的響應結果,返回給前臺