Django实战(15):Django实现RESTful web service

Django REST框架与JavaScript异步请求实战指南 JSON作为现代Web开发中前后端交互的标准数据格式,其高效传输与处理是构建RESTful API的核心。Django REST framework通过序列化器将复杂模型数据转换为JSON格式,配合前端Promise机制处理异步请求,实现高效数据交互。Promise作为JavaScript异步编程的核心,通过pending、fulfilled、rejected三种状态管理异步流程,而箭头函数则解决了this绑定问题。在实际工程中,这种技术组合广泛应用于内容管理系统、电商平台等需要高效数据交互的场景。通过Dj 阅读详情

原文地址:http://blog.youkuaiyun.com/thinkinside/article/details/7236807,欢迎转载,请保留链接!

曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style)。所以我们的选择变得很简单:前端ajax访问后端的RESTful web service对资源进行操作。
Django中有一些可选的REST framework,比如django-piston,django-tasypie。 但是我和google(呵呵,不好意思)推荐这个:Django REST framework。因为这个框架的几个特点:
1. 名字好!直入主题
2. 因为名字好,所以google搜索(Django REST/ Django RESTful)排名第一
3. 当然,前面两个理由都是开玩笑的。最重要的理由是该框架对于resource,serializer,renderer/parser, view 和 response的定义很清晰,又很符合Django的MTV模式(比如,它的view就是包装了Django的View实现的)。在Django中使用该框架可以说是顺乎自然。
4. 对于认证和授权有很好的支持。
5. 内置了一系列的Mixin,可以随意组装。


下面用Django REST framework来实现购物车(Cart)的RESTful web service。
第一步:安装
官方文档说可以用pip或easy_install 安装,但是经过实测使用easy_install安装的不是最新版,会损失一些特性。所以建议用源代码的方式安装:
从http://pypi.python.org/pypi/djangorestframework/0.3.2 下载v0.3.2,解压后$sudo python setup.py install

第二步:配置
在depot/settings.py的INSTALLED_APPS中加入:
     'djangorestframework',

第三步:使用
Django REST framework有很多种“用法”,最常见的用法是:
1. 定义资源。资源将python对象(比如model对象)进行隔离、组装,生成需要序列化(serialize)的数据。除了基本的Resource类型外,框架还提供了FormResource和ModelResource,以便于对Form或Model的处理。Resource有助于View中的处理,当然你也可以不使用Resource,而在View中去指定要序列化的数据。
2. 创建视图。视图是对django View的封装,并定义序列化、反系列化等方法,同时通过Mixin的支持来实现get,post,put,delete等操作。框架内置了ModelView,与ModelResource配合使用非常简单方便。
3. 定义url,将正则表达式匹配的View类的as_view方法,该方法会返回django的view函数。

在我们的例子中,要处理的不是购物车本身,而是购物车中的line_item,属于model类,所以使用ModelResource和ModelView是最方便的。具体实现:
创建depotapp/resources.py

from django.core.urlresolvers import reverse
from djangorestframework.views import View
from djangorestframework.resources import ModelResource
from models import *

class LineItemResource(ModelResource):
    model = LineItem
    fields = ('product', 'unit_price', 'quantity')
    def product(self, instance):
        return instance.product.title
其中重新定义关联的对象。比如LineItem关联到了Product,但我们在resource中将product属性重新定义为product.title


然后使用ModelView定义url:在depot/depotapp/urls.py的urlpatterns中增加url映射,当然首选要引入相关的模块:

depot/depotapp/urls.py

from django.conf.urls.defaults import *
from models import *
from views import *
from djangorestframework.views import ListOrCreateModelView, InstanceModelView
from resources import *
urlpatterns = patterns('',
    (r'product/create/$', create_product),
    (r'product/list/$', list_product ),
    (r'product/edit/(?P<id>[^/]+)/$', edit_product),
    (r'product/view/(?P<id>[^/]+)/$', view_product),
    (r'store/$', store_view),
    (r'cart/view/', view_cart),
    (r'cart/clean/', clean_cart),
    (r'cart/add/(?P<id>[^/]+)/$',, add_to_cart),
    (r'API/cart/items', ListOrCreateModelView.as_view(resource=LineItemResource)),
)
此时访问 http://localhost:8000/depotapp/API/cart/items/ 就可以看到生成的RESTful API了:



如图所示,可以渲染(render)成json,html, xhtml,txt,xml等格式,当然你也可以增加自己的渲染,比如YAML

对于一般的情况来说,这样做就已经足够了。但是我们这里由于LineItem不是从数据库中获取的,而是从session中的cart对象中获取,所以还需要进行一些改造。
框架提供的ListOrCreateModelView继承了ModelView,同时混合了ListModelMixin和CreateModelMixin。而ListModelMixin定义了get方法,该方法使用model.objects.all()即从数据库中获取数据,所以我们应该修改一下View的行为,让其从session中获取数据,不妨在depotapp/views.py中自定义一个View类:

from djangorestframework.views import View

class RESTforCart(View):
    def get(self, request, *args, **kwargs):
        return request.session['cart'].items
然后将url改为:(r'API/cart/items', RESTforCart.as_view(resource=LineItemResource)),


这时再访问http://localhost:8000/depotapp/API/cart/items/,就可以显示购物车中的item了。默认的是html 渲染,你可以通过http://localhost:8000/depotapp/API/cart/items/?format=json 访问json渲染:

[{"product": "\u7a81\u7136\u5c31\u8d70\u5230\u4e86\u897f\u85cf", "unit_price": "12", "quantity": 2}, {"product": "\u9ec4\u74dc\u7684\u9ec4 \u897f\u74dc\u7684\u897f", "unit_price": "12", "quantity": 38}]


用Django REST framework实现RESTful web service,可以说即简单,又灵活。




Django REST Framework核心功能与实战应用指南 RESTful API是现代Web开发的核心技术,它通过标准化的HTTP方法实现资源操作。Django REST Framework(DRF)作为Python生态中最成熟的API框架,基于Django ORM提供了强大的序列化器(Serializer)和视图集(ViewSets)机制,能够将开发效率提升数倍。其核心价值在于开箱即用的认证系统、权限控制、分页和过滤功能,特别适合中大型Web应用开发。通过ModelSerializer可以快速实现Django模型与JSON数据的双向转换,而ViewSets则自动 阅读详情

相关推荐

Nuxt 3 + Django 4 构建通用应用:SSR/SSG/水合一体化实践

通用应用(Universal Application)是一种支持服务端渲染(SSR)、静态站点生成(SSG)与客户端水合(Hydration)三态统一的现代Web架构范式。其核心原理在于将展示逻辑与业务逻辑严格分层,由前端框架(如Nuxt)负责视图呈现与首屏性能优化,后端框架(如Django)专注数据安全、权限校验与事务一致性。该模式显著提升SEO友好度、首屏加载速度与高并发稳定性,广泛适用于电商、内容平台与企业级管理后台等场景。本文基于Nuxt 3.12与Django 4.2生产级组合,详解跨域通信、数据

weixin_30312563的博客 312

机器学习WebService搭建(四)------django入门

相比于python其他的Web框架,django的功能是最完整的,包涵服务发布,路由映射,模板编程,数据处理一整套功能。因此django模块之间耦合紧密,不容易进行拓展,但是django的orm用着非常舒服!这给开发带来了很大的便捷性。 demo步骤 进入开发的python虚拟环境 使用activate命令。 安装django pip install django。查看安装是否成功 conda ...

Ramiro Luo的博客 1745

《Python Web项目集锦》-专栏介绍和目录

本专栏专注于Python Web项目,涉及内容包含FastAPI、Django、Flask等,所有项目代码完整且可直接运行。不管是零基础还是有经验的开发,相信都能从本专栏获益。有任何问题欢迎私聊博主,专栏持续更新中...

数据知道的博客 5209

python django及脚本化开发webserve接口(spyne)

想用django写个webserver接口,网上各种搜,整理下本次的记录 看到很多实用souplib的包,我用的python3.7,导包一直有问题,然后看到网上有人说souplib只支持python2,并且在2011年后不再更新,最后换个包spyne,之前有个文章是写调用webserver的封装,此次就简单写下调用。 views.py import logging from django.views.decorators.csrf import csrf_exempt from spyne imp

a961634066的博客 1909

django-service-objects:Django的服务对象

django服务对象 Django的服务对象 什么? 这是一个小型库,提供了Service基类以从中派生您的服务对象。 什么是服务对象? 您可以在了解更多关于为什么和如何的,但是在大多数情况下,它封装了您的业务逻辑,将其与视图和模型方法分离。 将业务逻辑放入服务对象中。 安装指南 从pypi安装: pip install django-service-objects 将service_objects添加到您的INSTALLED_APPS : # settings.py INSTALLED_APPS = ( ... ' service_objects ', ..

巨某量引擎后台登录实战笔记 | Playwright自动化框架

自动化框架、Playwright、滑块、巨某量引擎、抖某音系

什么都会一点。 2076

<学习笔记>从零开始自学Python-之-web应用框架Django( 十四)上线部署(阿里云+Nginx+uwsgi+MySQL)

Python Django项目完整的上线部署流程,采用Nginx+uwsgi+MySQL的配置方案

qq_41597915的博客 2613

用C++从零复刻Wordle:手把手教你实现命令行猜词游戏(含完整源码解析)

本文详细介绍了如何使用C++从零开始实现一个命令行版本的Wordle猜词游戏,包含完整的源码解析和核心模块设计。通过游戏逻辑控制器、单词库管理器等模块的构建,开发者可以学习C++实战技巧和性能优化方法,适合提升编程能力和游戏开发兴趣。

weixin_26763955的博客 333

5. django设计模式,模板层详解

模板其实就是html,核心就是那视图传过来的数据根据规则动态生成网页 验证效果

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 1291

MTK Linux DRM分析(八)- KMS drm_crtc.c

CRTC 在 Linux DRM 子系统中是显示控制的核心,负责时序生成、模式设置和管线的调度。理解其工作原理和 API 对于进行底层图形开发、调试显示问题或 simply understanding how your graphics stack works 都至关重要。

iTom1900 1348

Prism 入门02,区域介绍

什么是区域(Region)?区域,在Prism 框架中,区域是模块化的核心的功能之一,其主要作用是降低应用程序和模块之间的耦合度。使用方式:在应用程序的界面中,划分出某块区域,并为这个区域定义一个唯一的区域名称。那么通过这个区域名称,应用程序就可以找到指定的区域。并为这个区域动态放置一些容器或控件,从而呈现在界面中。

build2024 1125

Django REST Framework实战指南:从零构建企业级RESTful API

Python-100-Days项目为开发者提供了从基础到高级的RESTful接口开发完整指南。本文将深入探讨如何使用Django REST Framework(DRF)构建规范、高效、安全的API服务,涵盖架构设计、序列化、认证授权、性能优化等关键环节,帮助中高级开发者快速掌握企业级API开发的核心技能。 ## 核心关键词与长尾关键词 **核心关键词**:Django REST Framewo

gitblog_00297的博客 1109

Python白色飘雪(完整代码)

Python绘制白色飘雪动画的完整代码。

AIGC 3万+

实战指南:从零构建高性能RESTful API服务的最佳实践

在现代Web开发领域,API开发已成为前后端分离架构的核心支柱。随着微服务架构的兴起,设计规范、高效、安全的RESTful接口是每个后端开发者必须掌握的核心技能。本文将基于Python-100-Days项目中的实践经验,为你提供一套完整的Web服务构建方案,涵盖从基础概念到高级优化的全流程。 ## 一、为什么需要前后端分离架构? 传统单体应用将前端页面和后端逻辑耦合在一起,导致开发效率低下、维

gitblog_00558的博客 322

从 OPEN CURSOR 到 SELECT INTO TABLE:把 ABAP 数据读取的底层机制与性能差异讲透

ABAP数据库访问性能优化关键点 摘要:ABAP程序性能的核心在于数据读取方式的选择。本文分析了三种常见数据库访问方式的技术原理:显式游标(CURSOR)、SELECT-ENDSELECT循环和SELECT INTO TABLE。重点揭示了数据从数据库到应用服务器的传输机制,包括OPEN/REOPEN与FETCH操作、Array Fetch批量传输原理以及SAP游标缓存机制。通过VBAK表的性能测试数据对比,证明了不同场景下最优访问方式的选择依据:大数据量时显式游标性能优势明显,而SELECT INTO T

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 168

全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数据信号方面,常见的格式有RGB888、RGB666、RGB565。为什么有什么多选择,主要还是取决于soc pin脚的多少来定。当然,pin脚越多,显示的颜色就越精准,还原度就越高。 举例来说,假设

嵌入式-老费,一个分享专业嵌入式知识的blog 2792

Django REST Framework实战:构建高性能API的架构设计与最佳实践

Django REST Framework(DRF)作为Python生态中最强大的REST API开发框架,为现代Web应用提供了完整的API构建解决方案。本文将通过架构设计、性能优化和实战案例,深入解析如何基于DRF构建企业级RESTful API服务,涵盖从基础概念到高级特性的全流程开发。 ## 核心概念解析:RESTful架构的"邮局模型" RESTful架构可以类比为一个现代化的邮局系

gitblog_00498的博客 340

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Python RESTful API设计原则与最佳实践

RESTful API是现代Web开发中系统间通信的核心技术,基于HTTP协议实现资源的状态转移。其设计原则包括统一接口、无状态性和资源标识等核心特性,通过标准化的HTTP方法(GET/POST/PUT/DELETE)和状态码实现语义化交互。在Python技术栈中,Django REST framework、Flask和FastAPI等框架为API开发提供了强大支持。良好的API设计能显著提升开发效率,特别是在微服务架构和前后端分离场景下,规范的接口设计可以减少30%以上的协作成本。本文通过电商平台案例,详

weixin_34396103的博客 329

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: Django实战(14):让页面联动起来
下一篇: 企业架构(Enterprise Architect,EA)是什么
ThinkInside
博客等级 码龄19年 281粉丝 93原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值