当用户在Django Rest框架中发送发布请求时如何返回html页面

时间:2019-06-23 07:36:04

标签: django django-rest-framework

我想返回一个HTML页面,其中包含用户在Django restframework中发布的值

我创建的模型是

class DetailView(viewsets.ModelViewSet):
    queryset= Detail.objects.all()
    serializer_class = DetailSerializer

@action(methods=['GET'],detail=False)  
def get(self,request):
    first_name= request.POST.get("first_name")
    last_name = request.POST.get("last_name")
    return redirect ('index.html/')

url:      路由器= routers.DefaultRouter()      router.register('detail',views.DetailView)

index.html:      {{first_name}}
     {{last_name}}

我想自动返回一个HTML页面,其中包含他们发布的值

2 个答案:

答案 0 :(得分:0)

我认为必须在post方法中定义而不是get方法。我假设您要发布表单提供的数据。在我看来,这是一种适用的方法:

views.py

class DetailView(viewsets.ModelViewSet):
    form_class = PersonalDataForm # defined in forms.py
    view_template = 'index.html'

def post(self, request, *args, **kwargs):
    form = self.form_class(request.POST)
    if form.is_valid():
        personal_data = {}
        first_name = form.cleaned_data['first_name']
        personal_data['first_name'] = first_name
        last_name = form.cleaned_data['last_name']
        personal_data['last_name'] = last_name            

        return render(request, self.view_template, {'form': form, 'personal_data': personal_data}

index.html

<form action="" method="POST">
    {% csrf_token %}
    {{ form.first_name }}
    {{ form.last_name }}
    <button type="submit" id="submit-button">save</button>
</form>

{{ personal_data.first_name }}
{{ personal_data.last_name }}

如果用户发送GET请求,则可能要隐藏表单。您可以通过将wohle格式包装到if子句(例如{%if valid_data_submitted%} ... ... {%endif%}

)中来实现。

forms.py

class PersonalDataForm(forms.ModelForm):
    first_name = forms.CharField()
    last_name = forms.CharField()

    def save(self, commit=True):
        self.instance.first_name = first_name
        self.instance.last_name = last_name
        return super(PersonalDataForm, self).save(commit)

    class Meta:
        model: models.Detail

那可能是第一种方法。为了进一步说明,我需要知道用户将如何发布数据。

答案 1 :(得分:0)

我认为您应该只更改视图中的renderer_classes属性,将其设置为TemplateHTMLRenderer

document link