溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Django REST Framework該怎么理解

發(fā)布時(shí)間:2021-12-08 16:22:57 來(lái)源:億速云 閱讀:163 作者:柒染 欄目:編程語(yǔ)言

今天就跟大家聊聊有關(guān)Django REST Framework該怎么理解,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

1.Django REST framework框架介紹

  • Django REST framework框架是一個(gè)功能強(qiáng)大且靈活的工具包,用于構(gòu)建Web API,且Django Rest Framework 是 Django 依賴(lài)擴(kuò)展 Restful Api 的框架,與Django的使用風(fēng)格類(lèi)似,它的官方網(wǎng)站是: https://www.django-rest-framework.org/

2.設(shè)計(jì)API

我們先選擇一個(gè)APP,比如說(shuō)我選擇的是schools APP,如何在設(shè)計(jì)這個(gè)APP中設(shè)計(jì)一個(gè)API接口,且在前端請(qǐng)求的時(shí)候,返回?cái)?shù)據(jù)庫(kù)中所有學(xué)校的詳細(xì)信息呢?

  • 第一步:首先需要在項(xiàng)目的urls.py文件(根路由)中添加二級(jí)路由;

url(r'^school/', include('schools.urls', namespace='schools'))
  • 第二步:在schools APP中的urls.py文件添加路由,指定訪問(wèn)路徑,需要導(dǎo)入AllSchoolsView類(lèi),AllSchoolsView類(lèi)是在view.py文件中編寫(xiě),(記得執(zhí)行makemigration 和 migrate操作)

url(r'^all/$', AllSchoolsView.as_view(), name='all')
  • 第三步:在schools APP中的views.py文件中,編寫(xiě)AllSchoolsView類(lèi);

from django.views.generic.base import View
import json
from django.core.serializers import serialize
from django.http import HttpResponse, JsonResponse
from .models import School
class AllSchoolsView(View):
    def get(self, request):
        schools = School.objects.all()
        # 直接將數(shù)據(jù)庫(kù)中的QuerySet對(duì)象轉(zhuǎn)換為json數(shù)據(jù)格式
        goods_json = serialize('json', schools)
        print(type(goods_json))
        print('serialize: --------{}'.format(goods_json))
        return HttpResponse(content=goods_json, content_type='application/json')
  • 第四步:在schools APP中的models.py文件中,根據(jù)需求創(chuàng)建schools_school表;

from django.db import models
from datetime import datetime
class School(models.Model):
    name = models.CharField(max_length=50, verbose_name='學(xué)校名稱(chēng)')
    desc = models.CharField(max_length=100, verbose_name='學(xué)校描述')
    location = models.CharField(max_length=100, verbose_name='學(xué)校位置')
    create_time = models.DateTimeField(default=datetime.now, verbose_name='添加時(shí)間')
    course_numbers = models.IntegerField(default=0, verbose_name="課程數(shù)")

創(chuàng)建數(shù)據(jù)庫(kù)表前面的文章也講過(guò),這里就不講了,數(shù)據(jù)庫(kù)表創(chuàng)建好了之后我們可以往里面增加數(shù)據(jù),可以使用命令行添加,但是這樣比較麻煩,所以這里我們數(shù)據(jù)庫(kù)管理和設(shè)計(jì)工具Navicat(文章最后介紹),使用這個(gè)工具我們可以手動(dòng)增加修改數(shù)據(jù)庫(kù)表中的數(shù)據(jù),特別方便;
首先需要選擇一個(gè)待使用的數(shù)據(jù)庫(kù),我使用的是MySql,然后創(chuàng)建連接,再填寫(xiě)一下選項(xiàng)就可以了:

Django REST Framework該怎么理解

Django REST Framework該怎么理解

Django REST Framework該怎么理解

  • 第五步:創(chuàng)建數(shù)據(jù)庫(kù)中schools_school表的數(shù)據(jù),可以通過(guò)Navicat來(lái)操作數(shù)據(jù)庫(kù),最后我們的數(shù)據(jù)庫(kù)表示這樣的:

Django REST Framework該怎么理解

  • 第六步:運(yùn)行項(xiàng)目,就能得到我們想要的json數(shù)據(jù)了,訪問(wèn)路徑是http://127.0.0.1:8000/schools/all/;

3.使用Django REST framework定制Restful API

  • 第一步:首先安裝好需要用到的包;

pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support
  • 第二步:然后在項(xiàng)目的settings文件的INSTALLED_APPS中添加rest_framewor;

INSTALLED_APPS = (
    'rest_framework',
)
  • 第三步:在根路由urls.py中加一條路由,用于支持瀏覽器訪問(wèn)api認(rèn)證;

url(r'^api-auth/', include('rest_framework.urls'))
  • 第四步:創(chuàng)建Django的管理員,選擇Tool->Run manage.py Task,然后執(zhí)行createsuperuser,編輯自己的用戶(hù)名、郵箱和密碼就可以了;

  • 第五步:在schools APP中創(chuàng)建serializer.py文件,在這個(gè)文件中導(dǎo)入serializers模塊,然后創(chuàng)建一個(gè)序列化類(lèi)(自己命名),讓這個(gè)類(lèi)繼承serializers模塊下的Serializer類(lèi);

from rest_framework import serializers
class SchoolSerializer(serializers.Serializer):
    name = serializers.CharField()
    course_numbers = serializers.IntegerField()
  • 第六步:在schools APP中的views.py文件中重寫(xiě)AllSchoolsView類(lèi),重啟服務(wù)器就能得到Django REST framework返回的數(shù)據(jù)了;

from .models import School
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializer import SchoolSerializer
class AllSchoolsView(APIView):
    def get(self, request):
        schools = School.objects.all()
        # many表示返回一個(gè)list, 如果不設(shè)置,則返回一個(gè)
        schools_serializer = SchoolSerializer(schools, many=True)
        return Response(schools_serializer.data)

Django REST Framework該怎么理解

4.Navicat

  • Navicat是一套可創(chuàng)建多個(gè)連接的數(shù)據(jù)庫(kù)管理工具,用以方便管理 MySQL、Oracle、 PostgreSQL、SQLite、SQL Server、MariaDB 和/或 MongoDB 等不同類(lèi)型的數(shù)據(jù)庫(kù),并 支持管理某些云數(shù)據(jù)庫(kù),例如阿里云、騰訊云;

  • Navicat 提供了三種平臺(tái)的版本Windows、macOS 、Linux,可以讓用戶(hù)連接到本地或遠(yuǎn) 程服務(wù)器,并提供一些實(shí)用的數(shù)據(jù)庫(kù)工具以協(xié)助用戶(hù)管理數(shù)據(jù),包括 Navicat Cloud 協(xié)同合 作、數(shù)據(jù)建模、數(shù)據(jù)傳輸、數(shù)據(jù)同步、結(jié)構(gòu)同步、導(dǎo)入、導(dǎo)出、備份、還原和自動(dòng)運(yùn)行;

看完上述內(nèi)容,你們對(duì)Django REST Framework該怎么理解有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI