Django基础教程(106)Django请求和响应之给URLs添加可选格式化后缀:让你的Django API学会“读心术”:URL后缀格式化の魔法

嘿,屏幕前的你!是不是曾经遇到过这样的场景:你吭哧吭哧写了一个API视图,返回一堆JSON数据给前端小哥。没过两天,产品经理跑过来说:“咱们这个数据,能不能顺便也整个XML格式的,隔壁系统的老古董只认这个?” 或者,测试小妹问:“能不能直接在浏览器里访问一下,让我看看这数据长啥样?”

这时候,你难道要吭哧吭哧再写一个视图,复制粘贴大部分代码,就为了改个响应格式?No, no, no! 这也太不“DRY”(Don't Repeat Yourself)了!我们Django开发者,讲究的就是一个优雅。

今天,就让我为你揭开Django内置的一个“魔法”——通过URL可选格式化后缀,让一个视图,干N个视图的活儿!

第一幕:问题登场——当你的API只想“一心一意”

假设我们正在构建一个博客系统,有一个简单的API用于获取文章列表。通常,我们会这么写:

# views.py
from django.http import JsonResponse
from myapp.models import Article

def article_list_json(request):
    """一个只返回JSON的视图"""
    articles = Article.objects.all()
    data = [{'title': article.title, 'content': article.content} for article in articles]
    return JsonResponse(data, safe=False)

然后,在urls.py里给它安排个路径:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('articles/json/', views.article_list_json, name='article-list-json'),
]

看起来没问题,对吧?但需求来了!现在需要同一个数据接口,既能返回JSON给Web前端,又能返回XML给移动端App,还能在浏览器直接访问时看到漂亮的HTML页面。

“笨”方法是怎么做的? 复制三份视图代码?article_list_json, article_list_xml, article_list_html?OMG!这代码维护起来简直就是一场灾难。任何一个逻辑改动,你都得修改三个地方,生怕漏了一个。

有没有一种方法,能像变色龙一样,根据外界的一点“小提示”,自动切换响应的“皮肤”(格式)呢?

答案是:必须有!而且Django早就替我们想好了!

第二幕:魔法揭秘——format_suffix_patterns,何方神圣?

Django的django.urls模块里,藏着一个名叫format_suffix_patterns的实用工具函数。它的工作方式非常聪明:

  1. 它像一个“侦察兵”,负责检查传入请求的URL末尾,有没有它认识的“暗号”(也就
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值