日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python中restful接口开发实例_Python RESTful接口开发02

發(fā)布時(shí)間:2023/12/10 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中restful接口开发实例_Python RESTful接口开发02 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是RESTful

RESTful是一種設(shè)計(jì)思想,一種風(fēng)格。

RESTful主要包括 資源 和 對(duì)資源的操作。

資源: 對(duì)實(shí)體的抽象,圖書、音樂(lè)、電影、學(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è)簡(jiǎn)單的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ā),這里沒(méi)有使用數(shù)據(jù)庫(kù),只是用了一個(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',

....

]

注意:這里為了測(cè)試的方便,禁用了csrf,在實(shí)際項(xiàng)目中不要禁用,禁用的話不安全。Django 關(guān)于CSRF的問(wèn)題不屬于本專題,有時(shí)間單獨(dú)介紹CSRF。

完整代碼

說(shuō)明

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的python中restful接口开发实例_Python RESTful接口开发02的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。