簡體   English   中英

modelformset_factory和csrf令牌丟失或不正確

[英]modelformset_factory and csrf token missing or incorrect

我正在使用模型表單集一次添加一個模型的多個實例。 我正在使用基於類的視圖。 這是我的views.py部分,用於創建“庫”

class LibraryCreate(View):
model = Library

def post(self, request, *args, **kwargs):
    LibraryFormSet = modelformset_factory(
        Library, form=create_library, extra=2)
    if request.method == 'POST':
        formset = LibraryFormSet(request.POST, request.FILES)
        if formset.is_valid():
            # do something with the formset.cleaned_data
            pass
    else:
        formset = LibraryFormSet()
    return render_to_response(
        'trial1/library_form.html', {'formset': formset})

def get(self, request, *args, **kwargs):
    LibraryFormSet = modelformset_factory(
        Library, form=create_library, extra=2)
    formset = LibraryFormSet(queryset=Library.objects.none())
    return render_to_response(
        'trial1/library_form.html', {'formset': formset})

這是我的模板

<form method="post" action="{% url "library_create" %}">
{% csrf_token %}
{{ formset.management_form }}
<table>
    {% for form in formset %}
    {{ form }}
    {% endfor %}
</table>
<input type="submit" value="create" />

現在由於某種原因,當我嘗試提交表單時,由於“ CSRF令牌丟失或不正確”,它返回了403禁止訪問。 我不明白為什么這不起作用,並且它真的令人沮喪。

使用render而不是render_to_response以便將請求包含在模板上下文中。

return render(request, 'trial1/library_form.html', {'formset': formset})

您缺少RequestContext對象。 CSRF令牌由CsrfMiddleware添加到RequestContext對象。 當您不包含該對象時,令牌將為空(在瀏覽器中檢查form元素,您將看到它丟失)。

https://docs.djangoproject.com/en/1.8/ref/templates/api/#django.template.RequestContext

使用render方法或將RequestContext添加到視圖中

 return render_to_response('trial1/library_form.html',
                          {'formset': formset},
                          context_instance=RequestContext(request))

https://docs.djangoproject.com/zh-CN/1.8/topics/http/shortcuts/#render https://docs.djangoproject.com/zh-CN/1.8/topics/http/shortcuts/#render-to-response (請參見context_instance屬性)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM