python中restful接口开发实例_Python RESTful接口开发02
什么是RESTful
RESTful是一種設(shè)計(jì)思想,一種風(fēng)格。
RESTful主要包括 資源 和 對(duì)資源的操作。
資源: 對(duì)實(shí)體的抽象,圖書、音樂、電影、學(xué)生等都屬于資源。
對(duì)資源的操作:
========== ===================== ==================================
HTTP 方法 行為 示例
========== ===================== ==================================
GET 獲取資源的信息 http://example.com/api/students
GET 獲取某個(gè)特定資源的信息 http://example.com/api/students/123
POST 創(chuàng)建新資源 http://example.com/api/students
PUT 更新資源 http://example.com/api/students/123
DELETE 刪除資源 http://example.com/api/students/123
========== ====================== ==================================
使用Django開發(fā)一個(gè)簡單的RESTful風(fēng)格接口
要實(shí)現(xiàn)的接口:
========== ===================== ================================================
請(qǐng)求方法 行為 接口地址
========== ===================== ================================================
GET 獲取資源的信息 http://127.0.0.1:8000/todo/api/v1.0/tasks
GET 獲取某個(gè)特定資源的信息 http://127.0.0.1:8000/todo/api/v1.0/tasks/123
POST 創(chuàng)建新資源 http://127.0.0.1:8000/todo/api/v1.0/tasks
PUT 更新資源 http://127.0.0.1:8000/todo/api/v1.0/tasks/123
DELETE 刪除資源 http://127.0.0.1:8000/todo/api/v1.0/tasks/123
========== ====================== ================================================
操作步驟:
創(chuàng)建項(xiàng)目(假設(shè),你已經(jīng)熟練掌握如何創(chuàng)建項(xiàng)目),項(xiàng)目目錄結(jié)構(gòu)如下: D:/writing/django_restuful -- 項(xiàng)目所在目錄
│ manage.py -- Django項(xiàng)目的管理文件
│
├─.idea --使用的是Pycharm創(chuàng)建,.idea是PyCharm的項(xiàng)目配置文件
│ │ django_restful.iml
│ │ misc.xml
│ │ modules.xml
│ │ workspace.xml
│ │
│ └─inspectionProfiles
│ profiles_settings.xml
│
├─api --創(chuàng)建的一個(gè)app
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └─migrations --每個(gè)app都有一個(gè)migrations包
│ __init__.py
│
├─django_restful --每個(gè)項(xiàng)目都有一個(gè)和項(xiàng)目名一致的包,包含配置文件、wsgi、跟路由urls
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
│ │ __init__.py
│ │
│ └─__pycache__
│ settings.cpython-37.pyc
│ __init__.cpython-37.pyc
編寫api/views.py # coding:utf8
from django.views import View
from django.http import JsonResponse
import json
# 為了專注于演示接口的開發(fā),這里沒有使用數(shù)據(jù)庫,只是用了一個(gè)list作為存儲(chǔ)容器
tasks = [
{
'id': 1,
'title': u'Buy groceries',
'done': False
},
{
'id': 2,
'title': u'Learn Python',
'done': False
}
]
class TodoList(View):
def get(self, request):
"""獲取所有task"""
return JsonResponse(tasks, safe=False)
def post(self, request):
"""添加一個(gè)task"""
data = json.loads(request.body)
try:
task = {
"id": tasks[-1]['id'] + 1,
'title': data['title'],
'done': False
}
tasks.append(task)
except Exception as err:
return JsonResponse({{"errcode": 4001, "errmsg": "任務(wù)添加失敗"}})
else:
return JsonResponse(task, safe=False)
class Todo(View):
def get(self, request, task_id):
"""獲得某個(gè)task"""
task_id = int(task_id)
task = list(filter(lambda t: t['id'] == task_id, tasks))
if not task:
return JsonResponse({"code": 400})
return JsonResponse({'task': task[0]})
def delete(self, request, task_id):
"""刪除某個(gè)task"""
task_id = int(task_id)
task = list(filter(lambda t: t['id'] == task_id, tasks))
if task:
tasks.remove(task)
return JsonResponse({'result': True})
def put(self, request, task_id):
"""修改某個(gè)task"""
task_id = int(task_id)
data = json.loads(request.body)
task = list(filter(lambda t: t['id'] == task_id, tasks))
if len(task) == 0:
return JsonResponse({"code": 400})
if not data:
return JsonResponse({"code": 400})
if data.get('title') is None:
return JsonResponse({"code": 400})
if data.get('done') and type(data['done']) is not bool:
return JsonResponse({"code": 400})
task[0]['title'] = data.get('title', task[0]['title'])
task[0]['done'] = data.get('done', task[0]['done'])
return JsonResponse({'task': task[0]})
編寫api/urls.py from api import views
from django.urls import re_path
urlpatterns = [
re_path('^tasks/$', views.TodoList.as_view(), name='todolist'),
re_path('^tasks/(?P\d+)/$', views.Todo.as_view(), name='todo'),
]
編寫django_restful/urls.py from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('todo/api/v1.0/', include('api.urls')),
]
編寫django_restful/settings.py MIDDLEWARE = [
...
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
....
]
注意:這里為了測試的方便,禁用了csrf,在實(shí)際項(xiàng)目中不要禁用,禁用的話不安全。Django 關(guān)于CSRF的問題不屬于本專題,有時(shí)間單獨(dú)介紹CSRF。
完整代碼
說明
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python中restful接口开发实例_Python RESTful接口开发02的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯真题(python)+B组真题+解
- 下一篇: Ubuntu18.04 安装 Matla