首页 文章

如何在Django 2中的POST方法后重定向到成功

提问于
浏览
0

我想知道如何从FormView类处理 GET OR POST 请求以呈现 GET 的未绑定表单,并将表单POST到 POST 的数据库,然后重定向到成功页面(信息消息) .

用于 GETPOST 方法的模板以及重定向到成功URL后如何包含邮件?

views.py:

from django.shortcuts import render,redirect,render_to_response,get_object_or_404
from django.forms import ModelForm
from django.views import View

from django.views.generic.edit import CreateView
from .forms import MyPlaceForm
from .models import Place
from django.urls.base import reverse_lazy


from django.contrib import messages


#Ceate your class-based views here.
class MapView(View):
    def get(self, request):
        'Display map'
        return render(request,template_name='index.html')

# Handling forms with class-based view
class PlaceFormView(View):
    form_class = MyPlaceForm
    initial = {'key': 'value'}
    template_name = 'name.html'

    # Provide Blank Form if GET request
    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

# Provide a message if POST request
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        success_url=reverse_lazy('success')
        if form.is_valid():
            # <process form cleaned data>

            messages.add_message(request, messages.INFO, 'Hello world.')
            return reverse_lazy(success_url)

        return render(request, self.template_name, {'form': form})

urls.py:

from django.contrib import admin
from django.http import HttpResponse
from django.urls import path
from addismap.views import MapView,PlaceFormView


urlpatterns=[
    path('map/',MapView.as_view()),
    path('place/', PlaceFormView.as_view(), name='post-place'),
    path('place/success/',PlaceFormView.as_view(), name='success')

    ]

1 回答

  • 0

    documentation之后,您可以执行以下操作:

    # views.py    
    if request.method == "POST":
    
        if form.is_valid():
    
            # <process form cleaned data>
            messages.success(request, 'Form updated with success.')
            return redirect('/success-page')
    
        else:       
            messages.error(request, 'Ops! Something went wrong')
            return redirect('/error-page')
    

    在模板页面中,您可以使用for循环代码获取消息:

    {% if messages %}
    {% for message in messages %}
    <div {% if message.tags %} class="alert alert-{{ message.tags }} alert-dismissible fade show" {% endif %}>
        <span>{{ message }}</span>
    </div>
    {% endfor %}
    {% endif %}
    

    Edit1 :确保您已导入了邮件标记并在views.py中重定向

    from django.contrib import messages
    from django.shortcuts import render, redirect
    

相关问题