首页 > 解决方案 > 基于函数的视图中的 Ajax

问题描述

我已经阅读了很多关于如何为 ajax 设置基于类的视图的教程。例子:

class JoinFormView(FormView):
    form_class = JoinForm
    template_name  = 'forms/ajax.html'
    success_url = '/form-success/'

    def form_valid(self, form):
        response = super(JoinFormView, self).form_valid(form)
        if self.request.is_ajax():
            print(form.cleaned_data)
            data = {
                'message': "Successfully submitted form data."
            }
            return JsonResponse(data)
        else:
            return response

我想知道如何将 ajax 所需的代码插入到这个基于函数的视图中。所需的代码是否取决于我是否要异步从数据库中提取或写入数据库?

def my_func_view(request):
    template = 'accounts/profile.html'
    form = Form123(request.POST or None)    

    if request.method == 'POST':
        if form.is_valid():
            instance = form.save(commit=True)
            return redirect('/accounts/profile/')

        else:
            messages.error(request, 'There was an error.')
            context = {'form': form,}
            return render(request, template, context)

    else:
        context = {'form': form,}

    return render(request, template, context)

谢谢你的帮助!

标签: djangodjango-forms

解决方案


你也对基于函数的视图做同样的事情..

from django.http import JsonResponse

def my_func_view(request):
    template = 'accounts/profile.html'
    form = Form123(request.POST or None)    

    if request.is_ajax():
        if form.is_valid():
            instance = form.save(commit=True)
            return JsonResponse({'status':'data'})

        else:
            messages.error(request, 'There was an error.')
            return JsonResponse({'status':'data'})

    else:
        context = {'form': form,}

    return render(request, template, context)

推荐阅读