Django -rest_framework接口的初步書寫

我翻了一遍網上的代碼,發(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這個軟件,沒有的可以下載一個。
官網地址:

www.getpostman.com

用戶注冊:
在url上輸入http://127.0.0.1:8000/api/register/。
方法選擇post,然后輸入我們userinfo定義的數據。

postman結果.png

查看數據庫:
數據庫插入兩條數據.png

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

image.png

八、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到數據庫里面的數據了

用戶查詢的檢驗.png

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容