gpt4 book ai didi

ruby-on-rails - Django 相当于 rail respond_to

转载 作者:行者123 更新时间:2023-12-04 23:13:01 25 4
gpt4 key购买 nike

在 Rails 中,我可以使用 respond_to 来定义 Controller 如何根据请求格式做出响应。

在routes.rb

 map.connect '/profile/:action.:format', :controller => "profile_controller" 

在 profile_controller.rb 中
def profile
@profile = ...
respond_to do |format|
format.html { }
format.json { }

end
end

目前,在 Django 中,我必须使用两个 url 和两个 Action :一个返回 html,一个返回 json。

网址.py:
urlpatterns = [
url(r'^profile_html', views.profile_html),
url(r'^profile_json', views.profile_json),
]

查看.py
def profile_html (request):

#some logic calculations

return render(request, 'profile.html', {'data': profile})

def profile_json(request):

#some logic calculations

serializer = ProfileSerializer(profile)

return Response(serializer.data)

使用这种方法,逻辑代码变得重复。当然,我可以定义一个方法来进行逻辑计算,但代码很冗长。

无论如何在Django中,我可以将它们组合在一起吗?

最佳答案

是的,您可以例如定义一个参数,指定格式:

def profile(request, format='html'):
#some logic calculations

if format == 'html':
return render(request, 'profile.html', {'data': profile})
elif format == 'json':
serializer = ProfileSerializer(profile)
return Response(serializer.data)

现在我们可以使用特定的格式参数定义 urls.py:
urlpatterns = [
url(r'^profile_(?P<format>\w+)', views.profile),
]

所以现在 Django 会将格式解析为正则表达式 \w+ (您可能需要稍微更改一下),这将作为格式参数传递给 profile(..) View 调用。

请注意,现在用户可以输入任何内容,例如 localhost:8000/profile_blabla 。因此,您可以进一步限制正则表达式。
urlpatterns = [
url(r'^profile_(?P<format>(json|html))', views.profile),
]

所以现在只有 jsonhtml 是有效的格式。你可以用同样的方式定义一个 action 参数(就像你的第一个代码片段似乎建议的那样)。

关于ruby-on-rails - Django 相当于 rail respond_to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51078234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com