Python django中如何使用restful框架
在使用django進(jìn)行前后臺(tái)分離開發(fā)時(shí)通常會(huì)搭配django-rest-framework框架創(chuàng)建RESTful風(fēng)格的接口API??蚣芙榻B及版本要求可參考官方地址:https://www.django-rest-framework.org
本文以創(chuàng)建man包含name、sex字段的API為實(shí)例學(xué)習(xí)django-rest-framework框架的使用。
主要包含下面5個(gè)步驟:
1.創(chuàng)建Django項(xiàng)目
2.創(chuàng)建ORM模型
3.加載Django REST Framework
4.序列化模型
5.創(chuàng)建加載數(shù)據(jù)的view和url
1.創(chuàng)建Django項(xiàng)目創(chuàng)建django_rest
django-admin startproject django_rest
進(jìn)入django_rest,創(chuàng)建虛擬環(huán)境env
virtualenv env
激活虛擬環(huán)境,并安裝django
source ./env/bin/activate
安裝 django
pip install django
創(chuàng)建rest_app
python manage.py startapp rest_app
注冊(cè)app,將app添加到INSTALLED_APPS
#setting.pyINSTALLED_APPS = [ ’django.contrib.admin’, ’django.contrib.auth’, ’django.contrib.contenttypes’, ’django.contrib.sessions’, ’django.contrib.messages’, ’django.contrib.staticfiles’, ’rest_app’]
創(chuàng)建后臺(tái)admin賬戶用于管理
$ python manage.py createsuperuserUsername (leave blank to use ’root’):admin Email address: Password: Password (again): Superuser created successfully.2.創(chuàng)建ORM模型
數(shù)據(jù)庫(kù)我們使用默認(rèn)sqlite3 即可,如需要變更可在setting.py中databases配置。
修改我們/django_rest/models.py添加我們man的模型
#models.pyfrom django.db import models# Create your models here.class Man(models.Model): name = models.CharField(max_length=64) sex = models.CharField(max_length=64) def __str__(self):return self.name
做數(shù)據(jù)庫(kù)遷移
python manage.py makemigrations python manage.py migrate
將Man這個(gè)model注冊(cè)到我們的后臺(tái),以便可以通過(guò)django的后臺(tái)做增刪查改,編寫admin.py如下
#admin.pyfrom django.contrib import adminfrom .models import Man# Register your models here.admin.site.register(Man) # 注冊(cè)Man到后臺(tái)
啟動(dòng)django服務(wù)
python manage.py runserver
訪問(wèn) http://127.0.0.1:8000/admin/可以看到登錄界面,輸入密碼登錄
可以看到我們的rest_app下的模型man對(duì)象mans
我們添加一個(gè)那個(gè)男人lgd.ame
安裝工具包
pip install djangorestframework
注冊(cè)rest_framework
#setting.pyINSTALLED_APPS = [ ’django.contrib.admin’, ’django.contrib.auth’, ’django.contrib.contenttypes’, ’django.contrib.sessions’, ’django.contrib.messages’, ’django.contrib.staticfiles’, ’rest_app’ ’rest_framework’ #注冊(cè)]4.序列化模型
序列化器會(huì)把我們的模型數(shù)據(jù)轉(zhuǎn)化(序列化)為json格式,這樣就能夠被請(qǐng)求了。同樣當(dāng)有josn數(shù)據(jù)提交過(guò)來(lái)的時(shí)候,序列化器會(huì)將json數(shù)據(jù)轉(zhuǎn)換為模型供咋們使用。
我們?cè)趓est_app下創(chuàng)建文件serializer.py
我們要做三件事:
1.導(dǎo)入Man模型
2.導(dǎo)入序REST Framework序列化器
3.創(chuàng)建新的類將模型和序列化器鏈接起來(lái)
from rest_framework import serializersfrom .models import Manclass Manserializer(serializers.HyperlinkedModelSerializer): class Meta:model = Manfields = (’name’,’sex’)5.創(chuàng)建加載數(shù)據(jù)的view和url
我們需要把序列化后的數(shù)據(jù)返回給瀏覽器,所以要做一下步驟:
1.通過(guò)不通的Man查詢數(shù)據(jù)庫(kù)
2.將查詢后的數(shù)據(jù)傳遞給序列化器,通過(guò)序列化器轉(zhuǎn)化為json
我們?cè)趓est_app/views.py編寫我們的視圖,ModelViewSet由rest_framework提供,包含了get、post方法
# views.pyfrom rest_framework import viewsetsfrom .serializers import ManSerializerfrom .models import Manclass ManViewSet(viewsets.ModelViewSet): queryset = Man.objects.all().order_by(’name’) #查詢結(jié)果給queryset serializer_class = ManSerializer #對(duì)結(jié)果進(jìn)序列化
在django_rest目錄下urls.py添加api路由
from django.contrib import adminfrom django.urls import path, includeurlpatterns = [ path(’admin/’, admin.site.urls), path(’’, include(’rest_app.urls’)), ]
在rest_app目錄下創(chuàng)建urls.py添加視圖路由,通過(guò)rest_framework中router確保我們的請(qǐng)求到正確的動(dòng)態(tài)資源。
from django.urls import include, pathfrom rest_framework import routersfrom . import viewsrouter = routers.DefaultRouter()router.register(r’man’, views.ManViewSet) #路由到ManViewSet視圖# Wire up our API using automatic URL routing.# Additionally, we include login URLs for the browsable API.urlpatterns = [ path(’’, include(router.urls)), #使用router路由 path(’api-auth/’, include(’rest_framework.urls’, namespace=’rest_framework’))]
最后我們來(lái)啟動(dòng)服務(wù),訪問(wèn)http://127.0.0.1:8000/ 可以在瀏覽器查看到我們api信息
python manage.py runserver
訪問(wèn)http://127.0.0.1:8000/man/ 來(lái)查看man資源
通過(guò)id來(lái)訪問(wèn)api資源http://127.0.0.1:8000/man/1/
這樣我們一個(gè)基礎(chǔ)restful風(fēng)格的API創(chuàng)建完成了。感覺關(guān)鍵點(diǎn)還是理解ModelViewSet和內(nèi)置router不讀源碼很難知其所以然。
到此這篇關(guān)于Python django中如何使用restful框架的文章就介紹到這了,更多相關(guān)restful框架的使用內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Django中shell命令的使用2. jsp+servlet簡(jiǎn)單實(shí)現(xiàn)上傳文件功能(保存目錄改進(jìn))3. Android WebView通過(guò)動(dòng)態(tài)的修改js去攔截post請(qǐng)求參數(shù)實(shí)例4. 利用ajax+php實(shí)現(xiàn)商品價(jià)格計(jì)算5. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫特效6. Python遠(yuǎn)程linux執(zhí)行命令實(shí)現(xiàn)7. 利用CSS制作3D動(dòng)畫8. asp.net core項(xiàng)目授權(quán)流程詳解9. 阿里前端開發(fā)中的規(guī)范要求10. CSS可以做的幾個(gè)令你嘆為觀止的實(shí)例分享
