Django REST framework【學習內容】

快速入門

我們將創建一個簡單的允許管理員用戶查看和編輯系統中的用戶和組的API。

項目設置

創建一個名為?tutorial?的新django項目,然后啟動一個名為?quickstart?的新app。

# 創建項目目錄
mkdir tutorial
cd tutorial# 創建一個virtualenv來隔離我們本地的包依賴關系
virtualenv env
source env/bin/activate  # 在Windows下使用 `env\Scripts\activate`# 在創建的虛擬環境中安裝 Django 和 Django REST framework
pip install django
pip install djangorestframework# 創建一個新項目和一個單個應用
django-admin.py startproject tutorial .  # 注意結尾的'.'符號
cd tutorial
django-admin.py startapp quickstart
cd ..

現在第一次同步你的數據庫:

python manage.py migrate

我們還要創建一個名為?admin?的初始用戶,密碼為?password123。我們稍后將在該示例中驗證該用戶。

python manage.py createsuperuser

等你建立好一個數據庫和初始用戶,并準備好開始。打開應用程序的目錄,我們就要開始編碼了...

Serializers

首先我們要定義一些序列化程序。我們創建一個名為?tutorial/quickstart/serializers.py的文件,來用作我們的數據表示。

from django.contrib.auth.models import User, Group
from rest_framework import serializersclass UserSerializer(serializers.HyperlinkedModelSerializer):class Meta:model = Userfields = ('url', 'username', 'email', 'groups')class GroupSerializer(serializers.HyperlinkedModelSerializer):class Meta:model = Groupfields = ('url', 'name')

請注意,在這個例子中我們用到了超鏈接關系,使用?HyperlinkedModelSerializer。你還可以使用主鍵和各種其他關系,但超鏈接是好的RESTful設計。

Views

好了,我們接下來再寫一些視圖。打開?tutorial/quickstart/views.py?文件開始寫代碼了。

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializerclass UserViewSet(viewsets.ModelViewSet):"""允許用戶查看或編輯的API路徑。"""queryset = User.objects.all().order_by('-date_joined')serializer_class = UserSerializerclass GroupViewSet(viewsets.ModelViewSet):"""允許組查看或編輯的API路徑。"""queryset = Group.objects.all()serializer_class = GroupSerializer

不再寫多個視圖,我們將所有常見行為分組寫到叫?ViewSets?的類中。

如果我們需要,我們可以輕松地將這些細節分解為單個視圖,但是使用viewsets可以使視圖邏輯組織良好,并且非常簡潔。

URLs

好的,現在我們在tutorial/urls.py中開始寫連接API的URLs。

from django.conf.urls import url, include
from rest_framework import routers
from tutorial.quickstart import viewsrouter = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)# 使用自動URL路由連接我們的API。
# 另外,我們還包括支持瀏覽器瀏覽API的登錄URL。
urlpatterns = [url(r'^', include(router.urls)),url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

因為我們使用的是viewsets而不是views,所以我們可以通過簡單地使用路由器類注冊視圖來自動生成API的URL conf。

再次,如果我們需要對API URL進行更多的控制,我們可以簡單地將其拉出來使用常規基于類的視圖,并明確地編寫URL conf。

最后,我們將包括用于支持瀏覽器瀏覽的API的默認登錄和注銷視圖。這是可選的,但如果您的API需要身份驗證,并且你想要使用支持瀏覽器瀏覽的API,那么它們很有用。

Settings

我們也想設置一些全局設置。我們想打開分頁,我們希望我們的API只能由管理員使用。設置模塊都在?tutorial/settings.py中。

INSTALLED_APPS = (...'rest_framework',
)REST_FRAMEWORK = {'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAdminUser',],'PAGE_SIZE': 10
}

好了,我們完成了。


測試我們的API

我們現在可以測試我們構建的API。我們從命令行啟動服務器。

python manage.py runserver

我們現在可以從命令行訪問我們的API,使用諸如?curl?...

bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
{"count": 2,"next": null,"previous": null,"results": [{"email": "admin@example.com","groups": [],"url": "http://127.0.0.1:8000/users/1/","username": "admin"},{"email": "tom@example.com","groups": [                ],"url": "http://127.0.0.1:8000/users/2/","username": "tom"}]
}

或者使用?httpie,命令行工具...

bash: http -a admin:password123 http://127.0.0.1:8000/users/HTTP/1.1 200 OK
...
{"count": 2,"next": null,"previous": null,"results": [{"email": "admin@example.com","groups": [],"url": "http://localhost:8000/users/1/","username": "paul"},{"email": "tom@example.com","groups": [                ],"url": "http://127.0.0.1:8000/users/2/","username": "tom"}]
}

或直接通過瀏覽器,轉到URL?http://127.0.0.1:8000/users/...

?

如果您正在使用瀏覽器,請確保使用右上角進行登錄。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456259.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DotNetCore跨平臺~發布腳本PowerShell的設計

回到目錄 這幾天對PS情有獨忠,被它的強大功能所希引,它可以快速部署,快速發布,將一些連帶的動作一次的完成,挺方便,類似于早期的bat文件,也像linux平臺的bash腳本,但功能上&#xff…

解決: 'Cannot call `.is_valid()` as no `data=` keyword argument was ' AssertionError: Cannot call `

#注冊 def add_person(request):p_name request.POST.get("p_name")p_password request.POST.get("p_password")person_data {"p_name": p_name,"p_password": p_password,}print(person_data)serializer PersonSerializer(person…

軟件與程序

一、Java的起源 最初是為家用電器設計的,因為其特點適合于internet, 于是通過internet成為一種計算語言,一個平臺,一個網絡計算的架構。 二、Java平臺分類 ①JavaSE適用于普通PC及筆記本電腦,為其他JAVA程序的開發和運…

Django使用n內置模塊發送HTML格式的郵件

def send(request):# subject "小伙子很帥"# message "不禁夸啊"# send_mail(subject,message,"18332191389163.com",["18332191389163.com"])# return HttpResponse("ok")from django.core.mail import EmailMultiAltern…

EDM營銷之如何使郵件列表更加有效

營銷轉化往往是營銷人員專攻的必修課,大數據時代,只有真實有效的活躍用戶數據,才能進一步促進轉化。但仍然有想走捷徑的企業會選擇通過購買來獲取用戶數據,不僅數據質量不高,還會降低自身信譽等級。本次Focussend從購買…

spring用的很開心的標簽(隨時增加)

1Scheduled定時任務標簽,cron用表達式,或者其他幾種方式,方便不能說。使用再方法智商,不能設置范圍域。 2PropertySource定義在整個class文件上,整個class中可以直接用表達式獲取properties的內容。 3Value 定義在變量…

Flask-DebugToolbar的配置

該擴展為 Flask 應用程序添加了一個包含有用的調試信息的工具欄。 安裝 簡單地使用 pip 來安裝: $ pip install flask-debugtoolbar用法 設置調試工具欄是簡單的: from flask import Flask from flask_debugtoolbar import DebugToolbarExtensionapp Flask(__name__)# the…

微信第三方登錄

微信第三方登錄: 公眾平臺以access_token為接口調用憑據,來調用接口,所有接口的調用需要先獲取access_token; 網頁授權獲取用戶基本信息:通過該接口,可以獲取用戶的基本信息(獲取用戶的OpenID是…

MVC 中Simditor上傳本地圖片

1.引用樣式和js文件 <link href"~/Content/scripts/plugins/simditor/css/simditor.css" rel"stylesheet" /><script src"~/Content/scripts/plugins/simditor/js/simditor.js"></script> 2.初始化Simditor var editor null;…

在pycharm中自定義模板代碼,快速輸出固定代碼塊

pycharm中有時會經常輸出固定一段代碼,為避免每次重復輸入,可以自定義一段模板代碼,請看以下圖教程: 1. 點擊 file 里面的 setting 2. 在搜索框輸入live,就會顯示出Live Templates, 點擊后邊的加號, 點擊 Live Template 3. 選擇設置的語言, 點擊下圖的Define, 設置要設置…

優質手機APP開發公司的特點

最近自媒體平臺封號特嚴重&#xff0c;獲得上億投資的大號都被封了&#xff0c;或許做自己的APP會是一個好選擇。想在眾多的app中脫穎而出、希望手機APP獲得成功&#xff0c;則必須聘請專業手機APP開發公司。您必須明智地選擇公司&#xff0c;因為您的業務的成敗取決于您的選擇…

Django中的認證與權限 源碼剖析

rest_framework/request.py中部分認證和權限代碼 def _authenticate(self):"""Attempt to authenticate the request using each authentication instancein turn."""for authenticator in self.authenticators:try:user_auth_tuple authentica…

IQueryable和IEnumerable區別

IQueryable 和IEnumerable總結 1&#xff0c;IEnumerable<T> result (from t in context.Table order by t.Id select c).AsEnumerable().Take(3) 如果返回的是IEnumerable<T>類型的是預先把數據都加載在內存中在取出前三條數據 2&#xff0c;IQueryable<T&g…

xz壓縮和解壓縮

xz和gzip&#xff0c; bzip2用法是一樣的。默認系統是沒有安裝這個壓縮工具的&#xff0c;安裝命令為&#xff1a;yum install -y xz語法&#xff1a;xz [-dz] filename-d&#xff1a;解壓縮-z&#xff1a;壓縮壓縮時&#xff0c;可以加“-z”也可以不加&#xff0c;都可以壓縮…

celery 學習筆記定時任務和異步任務

1、Celery加入異步和定時任務 Celery除了可以異步執行任務之外&#xff0c;還可以定時執行任務。在實例代碼的基礎上寫個測試方法&#xff1a; import datetime import timefrom celery import shared_task from celery.schedules import crontab from celery.task import pe…

FBV(function base views) 顧名思義基于函數的視圖類 CBV(class base views)基于類的視圖類

一. 概念 FBV&#xff08;function base views&#xff09; 顧名思義基于函數的視圖類 CBV&#xff08;class base views&#xff09;基于類的視圖類 至于區別呢? 我覺得只是寫法上的不一樣, 實現的結果都是一樣的, 我比較喜歡用CBV模式, 因為在Django中內部幫我做了請求方式…

rpm查詢

rpm -q 的用法&#xff1a;1、 rpm -qa 可以查看所有已經安裝過的rpm包2、rpm -qf 文件名絕對路徑&#xff0c;可以查看該文件由哪個包安裝的3、 rpm -ql 包名&#xff0c;可以查看該包安裝哪些文件4、 rpm -qi 包名&#xff0c;可以查看該包的詳細信息查詢一個包是否安裝命令&…

IntelliJ idea學習資源

工作需要, 最近得從Eclipse轉戰到Idea, 找了些不錯的學習資料: 1, 從eclipse上遷移過來的用戶說明: https://www.jetbrains.com/help/idea/2016.3/eclipse.html 2, 極客學院的idea使用入門教程: http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/project-compositi…

linux下的安裝:openssl

openssl簡介 openssl是一個功能豐富且自包含的開源安全工具箱。它提供的主要功能有&#xff1a;SSL協議實現(包括SSLv2、SSLv3和TLSv1)、大量軟算法(對稱/非對稱/摘要)、大數運算、非對稱算法密鑰生成、ASN.1編解碼庫、證書請求(PKCS10)編解碼、數字證書編解碼、CRL編解碼、OC…

使用WinIO庫實現保護模式下的IO和內存讀寫

問題已解決&#xff1a; 原因是函數的調用方式與WinIO中不一致&#xff0c;使用的時候漏掉了__stdcall。 函數原定義為&#xff1a; 在實際的GPIO讀寫中遇到以下問題&#xff1a; SetPortVal可正常寫入&#xff0c;但是GetPortVal無法讀取&#xff0c;程序崩潰&#xff0c;問題…