Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用原始html表单获取Django CSRF错误_Html_Django_Django Views_Csrf - Fatal编程技术网

使用原始html表单获取Django CSRF错误

使用原始html表单获取Django CSRF错误,html,django,django-views,csrf,Html,Django,Django Views,Csrf,我正在尝试设置一个原始html表单,用户可以在其中提出建议,然后使用POST方法将其保存到数据库中,但我一直得到一个禁止的(403)CSRF验证失败。请求被中止。即使按照“帮助”部分中的步骤进行操作,请求也会被中止 我发现,如果在我的视图顶部添加csrf\u export,则不会出现错误,如下所示: from django.views.decorators.csrf import csrf_exempt @csrf_exempt def suggest_ptags(request):

我正在尝试设置一个原始html表单,用户可以在其中提出建议,然后使用POST方法将其保存到数据库中,但我一直得到一个
禁止的(403)CSRF验证失败。请求被中止。
即使按照“帮助”部分中的步骤进行操作,请求也会被中止

我发现,如果在我的视图顶部添加
csrf\u export
,则不会出现错误,如下所示:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def suggest_ptags(request):
    context = {}
    print("Form is submitted.")
    return render(request, "partials/search_form.html", context)
但我意识到它完全消除了CSRF保护,我不希望这样

那我该怎么办

这是我在templates的partials文件夹中的search_form.html表单:

<!-- Suggestion Form in popup -->
    <div class="prop-modal">
        <div class="prop-content">

            <a class="btn-close-prop">&times;</a>
            <img src="{% static 'images/pyramids.svg' %}">

            <form action="/suggest_ptags/" class="feedback-form" method="POST" enctype="text/plain">
            {% csrf_token %}
                    <h5 class="title-prop">Suggestion</h5>
                    <input class="input-prop" name="suggest" rows="3" cols="37" placeholder="suggest something..."></input>
                    <input class="button-prop" type="submit" value="Envoyez"></input>
            </form>

        </div>
    </div>
在我的URL中:

from django.conf.urls import url
from django.contrib import admin
from search.views import HomeView, ProductView, FacetedSearchView, autocomplete, suggest_ptags
from .settings import MEDIA_ROOT, MEDIA_URL
from django.conf.urls.static import static

urlpatterns = [
    url(r'^$', HomeView.as_view(), name='home'),
    url(r'^admin/', admin.site.urls),
    url(r'^suggest_ptags/$', suggest_ptags, name='suggest_ptags'), #Suggestions
    url(r'^product/(?P<slug>[\w-]+)/$', ProductView.as_view(), name='product'),
    url(r'^search/autocomplete/$', autocomplete),
    url(r'^search/', FacetedSearchView.as_view(), name='haystack_search'),

] + static(MEDIA_URL, document_root=MEDIA_ROOT)
从django.conf.url导入url
从django.contrib导入管理
从search.views导入HomeView、ProductView、FacetedSearchView、自动完成、建议标签
从.settings导入媒体\u根目录、媒体\u URL
从django.conf.url.static导入静态
URL模式=[
url(r'^$',HomeView.as_view(),name='home'),
url(r“^admin/”,admin.site.url),
url(r“^suggest\u ptags/$”,suggest\u ptags,name='suggest\u ptags'),#建议
url(r'^product/(?P[\w-]+)/$),ProductView.as_view(),name='product'),
url(r“^search/autocomplete/$”,autocomplete),
url(r“^search/”,FacetedSearchView.as_view(),name='haystack_search'),
]+静态(媒体URL,文档根=媒体根)

任何解决方案?

您不应该使用
enctype=“text/plain”
。你可以删除它(这与
enctype=“multipart/form data”
相同),或者如果你正在上传文件,可以使用
enctype=“multipart/form data”

呈现表单的视图在哪里?我没有,我的search\u form.html是一个django表单,所以每次我都需要在html文件中使用这个表单,我传递模板标记以包含表单。我在需要表单的html文件顶部添加类似的内容:
{%extends“layout.html”%}{%block title%}{{query}}{{block.super}{%endblock%}{%load staticfiles%}{%block content%}{%endblock%}
非常感谢!这就解决了问题。我花了一整天才发现是这个小东西!坚持总是有回报的!!
from django.conf.urls import url
from django.contrib import admin
from search.views import HomeView, ProductView, FacetedSearchView, autocomplete, suggest_ptags
from .settings import MEDIA_ROOT, MEDIA_URL
from django.conf.urls.static import static

urlpatterns = [
    url(r'^$', HomeView.as_view(), name='home'),
    url(r'^admin/', admin.site.urls),
    url(r'^suggest_ptags/$', suggest_ptags, name='suggest_ptags'), #Suggestions
    url(r'^product/(?P<slug>[\w-]+)/$', ProductView.as_view(), name='product'),
    url(r'^search/autocomplete/$', autocomplete),
    url(r'^search/', FacetedSearchView.as_view(), name='haystack_search'),

] + static(MEDIA_URL, document_root=MEDIA_ROOT)