python - Djangobook ch 7 CSRF -


i'm reading djangobook , i'm on ch 7.there line says "#todo - explain csrf token"

when following examples (i'm pretty sure i've followed them exactly), cannot code function properly.

here template

    <html>     <head>         <title>contact us</title>     </head>     <body>         <h1>contact us</h1>          {% if errors %}             <ul>                 {% error in errors %}                 <li>{{ error }}</li>                 {% endfor %}             </ul>         {% endif %}          <form action="/contact/" method="post">                     {% csrf_token %}             <p>subject: <input type="text" name="subject"></p>             <p>your e-mail (optional): <input type="text" name="email"></p>             <p>message: <textarea name="message" rows="10" cols="50"></textarea></p>             <input type="submit" value="submit">         </form>     </body>     </html> 

here view

    django.core.mail import send_mail     django.http import httpresponseredirect     django.shortcuts import render     django.template import requestcontext      def contact(request):         errors = []         if request.method == 'post':             if not request.post.get('subject', ''):                 errors.append('enter subject.')             if not request.post.get('message', ''):                 errors.append('enter message.')             if request.post.get('email') , '@' not in request.post['email']:                 errors.append('enter valid e-mail address.')             if not errors:                 send_mail(                     request.post['subject'],                     request.post['message'],                     request.post.get('email', 'noreply@example.com'),                     ['siteowner@example.com'],                 )                 return httpresponseredirect('/contact/thanks/')         return render(request, 'contact_form.html',             {'errors': errors}, context_instance=requestcontext(request)) 

this error i'm getting

forbidden (403) csrf verification failed. request aborted.   reason given failure:     csrf token missing or incorrect.  in general, can occur when there genuine cross site request forgery, or when django's csrf mechanism has not been used correctly. post forms, need ensure:  - browser accepting cookies.  - view function uses requestcontext template, instead of context.  - in template, there {% csrf_token %} template tag inside each post form targets internal url.  - if not using csrfviewmiddleware, must use csrf_protect on views use csrf_token template tag, accept post data.  you're seeing section of page because have debug = true in django settings file. change false, , initial error message displayed.  can customize page using csrf_failure_view setting. 

edit******

i discovered can view source code form , csrf_token isn't being inserted though have in template. looked common solutions. people suggested this

        return render_to_response('contact_form.html',             {'errors': errors}, context_instance=requestcontext(request)) 

but doesn't work me either.

i checked settings.py , see 2 middlewares added not csrfviewmiddleware -

middleware_classes = ( ... ‘django.middleware.csrf.csrfviewmiddleware’, ‘django.middleware.csrf.csrfresponsemiddleware’, ) 

try adding more.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -