首页 > 解决方案 > 用户在 Django Rest 框架中发送发布请求时如何返回 html 页面

问题描述

我想返回一个 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: router = routers.DefaultRouter() router.register('detail',views.DetailView)

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

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

标签: djangodjango-rest-framework

解决方案


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

视图.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}

索引.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 %}

表格.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

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


推荐阅读