我翻了一遍網上的代碼,發(fā)現有很多類似的,但是有些根本跑不通,很亂。
花了挺長時間,自己終于熟悉了接口的rest_framework接口的編寫。
因此,在這里做一些詳解。這些都是我親手實驗成功的。
本人用的是Django2.0
rest framework 用于自動生成符合restful規(guī)則的API,其中主要有
GET /collection: 從服務器取出資源對象的列表(數組)
GET /collection/resource:從服務器取出單個資源的對象
POST /collection:在服務器新建一個資源(傳入數據給服務器)
PUT /collection/resource:在服務器更新資源
DELETE /collection/resource:在服務器刪除資源
一、建立一個Django項目,以及相應的APP
這里該項目名稱為tool,項目APP為api
django-admin startproject tool
cd tool
python manage.py startapp api
二、下載rest_framework以及對rest_framework的配置
終端輸入
pip install djangorestframework
pip install markdown
打開tool/tool/settings.py
配置好rest_framework
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'api',
]
#全局權限控制
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'PAGE_SIZE': 10
}
三、連接數據庫
本人這里用的是Mysql,如果用Django自帶的sqlite就直接略過這部分操作
打開tool/tool/_init_.py
import pymysql
pymysql.install_as_MySQLdb()
然后打開tool/tool/settings.py
對數據庫的字樣進行修改
(這里數據庫名字、用戶名、密碼記得改成自己的數據庫的數據庫、用戶名、密碼)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite_db',
'USER': 'root',
'PASSWORD': 'root1234',
'HOST': 'localhost',
'PORT': '3306',
}
}
四、models的定制
在tool/api/models.py里,編寫一個要用的模型,我這里編寫的是UserInfo,里面有三條字段,分別是用戶名,密碼,郵箱。其中username里面加了一個unique = True,表示這個字段是唯一的,不加也可以。
from django.db import models
class UserInfo(models.Model):
username = models.CharField(max_length = 32,unique = True)
password = models.CharField(max_length = 64)
mail = models.CharField(max_length=32, default=0)
五、URL的定制
這里比較隨意,如果嚴謹一點,應該在tool/api里面新建一個urls.py,然后在tool/tool/urls.py里面include一下。
我這邊就直接在tool/tool/urls.py里面寫了,進入tool/tool/urls.py
from django.contrib import admin
from django.urls import path
from api import views
urlpatterns = [
path('admin/', admin.site.urls),
path('api/auth/', views.AuthView.as_view()),
path('api/register/', views.RegView.as_view()),
]
這里寫了兩個url,其中
api/auth/用于用戶的登錄
api/register/用于用戶的注冊
六、views的編寫
進入tool/api/views.py
這里沒有用serializers,等會兒在下面再寫一條獲取用戶名密碼的數據的view
分別寫了兩個方法,
AuthView用于登錄
RegView用于注冊
用的都是post方法。
from django.http import JsonResponse
from rest_framework.views import APIView
from api import models
class AuthView(APIView):
def post(self, request, *args, **kwargs):
ret = {'code':1000, 'msg':None}
try:
user = request._request.POST.get('username')
pwd = request._request.POST.get('password')
obj = models.UserInfo.objects.filter(username = user, password = pwd).first()
if not obj:
ret['code'] = 1010,
ret['msg'] = "用戶名或密碼錯誤"
ret['msg'] = "用戶登錄成功"
except Exception as e:
pass
return JsonResponse(ret)
class RegView(APIView):
def post(self, request, *args, **kwargs):
ret = {'code': 1001, 'msg': None}
try:
user = request._request.POST.get('username')
pwd = request._request.POST.get('password')
mail = request._request.POST.get('mail')
models.UserInfo(username=user, password=pwd, mail=mail)
models.save()
ret['msg'] = '用戶注冊成功'
except Exception as e:
pass
return JsonResponse(ret)
七、接口的驗證
利用postman這個軟件,沒有的可以下載一個。
官網地址:
用戶注冊:
在url上輸入http://127.0.0.1:8000/api/register/。
方法選擇post,然后輸入我們userinfo定義的數據。

查看數據庫:

用戶登錄:
在url上輸入http://127.0.0.1:8000/api/auth/。
方法選擇post,然后輸入我們用戶名和密碼。

八、serializers的寫法
在tool/api/新建一個serializers.py文件
from rest_framework import serializers
from api import models
class UserSerializer(serializers.ModelSerializer ):
class Meta:
model = models.UserInfo
fields = ['id', 'username', 'password', 'mail']
這里做一下解釋。
model = models.UserInfo這里繼承的是自己定義的模型
fields里面的項數,自己定,比如我如果想要用戶名和密碼
那么只需要寫成 fields = ['username', 'password']
九、用戶查看的view與urls的添加
在tool/tool/urls.py里面添加
path('api/userinfo/', views.UserInfoView.as_view()),
在tool/api/views.py里面添加
from django.shortcuts import HttpResponse
from api import serializers
import json
class UserInfoView(APIView):
#用于用戶信息查找
def get(self, request, *args, **kwargs):
# ret = {'code':1001, 'msg':None}
try:
user = models.UserInfo.objects.all()
ser = serializers.UserSerializer(instance=user,many=True)
ret = json.dumps(ser.data,ensure_ascii=False)
ret['msg'] = '用戶查找成功'
except Exception as e:
pass
return HttpResponse(ret)
十、serializers的檢驗
在url上輸入http://127.0.0.1:8000/api/userinfo/
然后方法選擇GET,就能get到數據庫里面的數據了
