当前位置: 首页 > 知识库问答 >
问题:

POST django rest框架后重定向

都沈浪
2023-03-14

我正在通过 django 表单向我的 Django Rest Framework API 提交一个 POST 请求。

下面是我的表单的一个片段:

<form action="{% url 'entry-list' %}" method="POST" class="form" role="form">
{% csrf_token %}

{{form.as_p}}
<div class = "form-group">
    <button type="submit" class="save btn btn-default btn-block">Save</button>
</div>

< code>views.py:

class entry_ViewSet(viewsets.ModelViewSet):
    queryset = Entry.objects.all()
    serializer_class= EntrySerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly,)
    def perform_create(self, serializer):
        serializer.partial = True
        serializer.save(created_by=self.request.user)

我正在进行一次成功的POST(项目是在数据库中创建的),但是一旦保存,我就会转到url/api/entry/,它显示了我的api w/Markdown。我想让它返回到特定的url。

有没有办法自定义开机自检成功后重定向到的位置?

添加序列化器:

class EntrySerializer(serializers.ModelSerializer):

    created_by = serializers.ReadOnlyField(source='created_by.username')
    class Meta:
        model = Entry
        fields = '__all__'
    def __init__(self, *args, **kwargs):
        super(EntrySerializer, self).__init__(*args, **kwargs)        
        for x in self.fields:
            self.fields[x].required = False     

共有1个答案

邵羽
2023-03-14

视图集。模型视图集有一个返回响应对象的方法创建。响应对象是 Django Response 的子类型。因此,您可以使用 HttpResponseRedirectcreate 方法中更改行为。例如:

class entry_ViewSet(viewsets.ModelViewSet):
    queryset = Entry.objects.all()
    serializer_class= EntrySerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly,)

    def create(self, request, *args, **kwargs):
        response = super(entry_ViewSet, self).create(request, *args, **kwargs)
        # here may be placed additional operations for
        # extracting id of the object and using reverse()
        return HttpResponseRedirect(redirect_to='https://google.com')

    def perform_create(self, serializer):
        serializer.partial = True
        serializer.save(created_by=self.request.user)
 类似资料:
  • 我在一个项目中使用Volley框架,我总是需要自己处理重定向以处理标头。 如何处理重定向现在取决于方法和传输层。我希望使用默认的截取(自动选择传输层),而不更改任何截取代码。 一个有效的解决方案是始终使用OkHttp作为传输层(如Volley的问题和贡献中所述),但我想知道是否有一种方法不需要额外的框架。 因此,我正在寻找一种“干净”的方法来禁用自动重定向处理。 编辑: 我更喜欢使用OkHttp,

  • 如果你正在建设一个纯静态的应用程序(与后端api分离部署),那么你可能甚至不需要编辑config/index.js。但是,如果你想要这个模板与现有的后端框架集成,例如Rails/Django/Laravel,拥有自己的项目结构,您可以编辑config/index.js,直接生成前端资源注入到你的后台项目。 让我们看一下默认的config/index.js: var path = require('

  • 问题内容: 在使用Play Framework调用OAuth2 :: retrieveAccessToken()之后,我正在执行简单的重定向。我将有趣的字符附加到了我从未放过的URL上,因此最终结果如下所示: http://本地主机:9000 /#_ = _ #_ = _来自哪里?这是路由文件中的路由定义: GET / Application.index 这是处理Facebook身份验证的控制器的

  • 我试图使用Axon 4.1+中的在一个2 JVM node K8集群上重播事件。虽然我将它设置为清理事件,但它只从一个节点中提取事件,而另一个节点继续运行,因为它的跟踪事件仍然是活动的。 我如何在所有JVM上同时禁用它,以便它能够正确地重播?然后启用所有这些命令,继续处理命令。 我尝试通过这段代码增加线程,这导致了另一个问题,即现有的令牌在InitialSemgmentsCount中永远不会增加,

  • 我检查了Application Insights,在那里我可以与Azure帐户中的其他用户共享仪表板。在Azure之外有没有分享AI度量的方法。 编辑每个评论:我想在我的仪表板上显示由AI生成的相同图形

  • 本文向大家介绍struts2自定义MVC框架,包括了struts2自定义MVC框架的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了struts2自定义MVC框架的方法,供大家参考,具体内容如下 自定义MVC: (首先了解Model1和Model2的概念) Model1与Model2:   Model1:就是一种纯jsp开发技术,将业务逻辑代码和视图渲染代码杂糅在一起。   Model