簡體   English   中英

CSRF 驗證失敗。 請求中止。失敗的原因:CSRF 令牌丟失或不正確

[英]CSRF verification failed. Request aborted.Reason given for failure:CSRF token missing or incorrect

當我點擊登錄表單中的提交按鈕時出現此錯誤:

Forbidden (403) CSRF verification failed. Request aborted. CSRF token missing or incorrect.

設置.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

視圖.py

def contact_us(request):
    if request.method == "POST":
        con_name = request.POST['con_name']
        con_email = request.POST['con_email']
        con_company = request.POST['con_company']
        inquiry = request.POST['inquiry']
        con_message = request.POST['con_message']
        #context = RequestContext(request)
        #context_dict={'con_name':con_name}
        #context_dict.update(csrf(request))
        return render(request, 'contact_us.html', {'con_name':con_name})

    else:
        return render(request, 'contact_us.html',{})    

contact_us.html

 <form id="contact-form" action="{% url 'contact_us' %}" method="post"> {% csrf_token %} <div class="contact-form"> <div class="contact-input"> <div class="contact-inner"> <input name="con_name" type="text" placeholder="Name *"> </div> <div class="contact-inner"> <input name="con_email" type="email" placeholder="Email *"> </div> </div> <div class="contact-inner"> <input name="con_company" type="text" placeholder="Company"> </div> <div class="contact-select"> <div class="form-item contact-inner"> <span class="inquiry"> <select name="inquiry" class="select-item"> <option value="Your inquiry for">Your inquiry for</option> <option value="General Information Request">General Information Request</option> <option value="Partner Relations">Public Relations</option> <option value="Digital Marketing">Digital Marketing</option> <option value="Influencer Marketing">Influencer Marketing</option> <option value="Brand Creation">Brand Creation</option> <option value="Careers">Careers</option> <option value="Brand Creation">Web Development</option> <option value="Others">Others</option> </select> </span> </div> </div> <div class="contact-inner contact-message"> <textarea name="con_message" placeholder="Please describe what you need."></textarea> </div> <div class="submit-btn mt-20"> <button class="ht-btn ht-btn-md" type="submit">Send message</button> <p class="form-messege"></p> </div> </div> </form>

我是 Django 和大多數 web 開發的新手,我只是在這里找不到問題。 我錯過了什么? 我該如何解決這個問題?

您需要在 render_to_response 中為 csrf_token 傳遞 RequestContext

為此:(views.py)

from django.template import RequestContext

...

return render_to_response('fileupload/upload.html', {'form': 

c['UploadFileForm']}, RequestContext(request))

這會將 csrf 的令牌傳遞給模板。

也訪問此鏈接,這會有所幫助。

我遇到了同樣的問題。當我將“{% csrf_token %}”放在每個輸入標簽之前,當它們沒有在一起或被任何其他標簽分開時,它得到了解決。

暫無
暫無

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

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