try addind the csrf on the http header instead of form data

On Sun, Feb 8, 2015 at 10:40 PM, G Z <[email protected]> wrote:

> hello, I have an ajax request that sends a file to django, it is saying
> that the csrf token is missing but i copied my other ajax request that are
> working. I'm sure it has something to do with trying to pass a file to
> upload.
>
> I get a 403 and csrf missing return.
>
> base.html
>
>     <script type='text/javascript' src='
> http://code.jquery.com/jquery-1.8.2.js'></script>
>     <script type="text/javascript">
>         $(document).ready(function() {
>                     $("#create_token").click(function() {
>                             var username =
> document.getElementById("username").value;
>                             $.ajax({
>                                 url : "/gettoken/",
>                                 type : "POST",
>                                 dataType: "json",
>                                 data : {
>                                     csrfmiddlewaretoken: '{{ csrf_token
> }}',
>                                     create_token: 'create_token',
>                                     username: username,
>                                     },
>                                     success : function(json) {
>
> document.getElementById('output').innerHTML = ('Token: ' + json['token']);
>                                     },
>                                     error : function(xhr,errmsg,err) {
>                                         console.log(xhr.status + ": " +
> xhr.responseText);
>
> document.getElementById('output').innerHTML = "Token:" + " Request Failed.";
>                                     }
>
>                             });
>                             return false;
>                     });
>
>                     $("#add_friend").click(function() {
>                             var token =
> document.getElementById("friend_token").value;
>                             $.ajax({
>                                 url : "/addfriend/",
>                                 type : "POST",
>                                 dataType: "json",
>                                 data : {
>                                     csrfmiddlewaretoken: '{{ csrf_token
> }}',
>                                     add_friend: token,
>                                     },
>                                     success : function(json) {
>
> document.getElementById('output').innerHTML = (json['message']);
>                                     },
>                                     error : function(xhr,errmsg,err) {
>                                         console.log(xhr.status + ": " +
> xhr.responseText);
>
> document.getElementById('output').innerHTML = "Request Failed.";
>                                     }
>
>                             });
>                             return false;
>                     });
>
>                     $("#uppropic").click(function() {
>                             var file =
> document.getElementById("profile_pic").files[0];
>                             console.log(file);
>                             $.ajax({
>                                 url : "profilepic/",
>                                 type : "POST",
>                                 dataType: "json",
>                                 processData: false,
>                                 data : {
>                                     csrfmiddlewaretoken: '{{ csrf_token
> }}',
>                                     profile_pic: file,
>                                     },
>                                     success : function(json) {
>
> document.getElementById('output').innerHTML = (json['message']);
>                                     },
>                                     error : function(xhr,errmsg,err) {
>                                         console.log(xhr.status + ": " +
> xhr.responseText);
>
> document.getElementById('output').innerHTML = " Request Failed.";
>                                     }
>
>                             });
>                             return false;
>                     });
>
>
>                 });
>
>
>
> home.html
>
>     {% extends "base.html" %}
>     {% block title %}
>     {% for user in user_data %}
>         {{user.username}}
>     {%endfor%}
>     {% endblock %}
>     {% block content %}
>         {% for user in user_data %}
>             Username: {{user.username}}<br>
>             First Name: {{user.first_name}}<br>
>             Last Name: {{user.last_name}}<br>
>             About: {{user.about}}<br>
>             Title: {{user.title}}<br>
>         {%endfor%}
>         Friends:
>         {% for friend in friend_data %}
>             {{friend}}<br>
>         {%endfor%}
>                 {% if is_user_profile %}
>             <form method='POST' >
>             {% csrf_token %}
>             <input type='text' name='friend_token' id='friend_token'>
>             <button id='add_friend' name = 'add_friend' value='add_friend'
> > Add Friend </button>
>             </form>
>
>             <form method='POST' >
>             {% csrf_token %}
>             <button id='create_token' name = 'create_token' value=
> 'create_token' > Create Token </button>
>             {% for user in user_data %}
>             <input type='hidden' id='username' value='{{user.username}}'>
>             {%endfor%}
>             </form>
>
>              <p id='output'>
>              </p>
>              {%endif%}
>
>              <form method='POST'>
>             {% csrf_token %}
>             <input type='file' name='profile_pic' id='profile_pic'>
>             <button id='uppropic'> Upload Profile Pic</button>
>             {% for user in user_data %}
>             <input type='hidden' id='username' value='{{user.username}}'>
>             {%endfor%}
>             </form>
>
>         <a href="/logout/">Logout</a>
>     {% endblock %}
>
>
>
> views.py
>
>     @login_required
>     @csrf_protect
>     def upload_profilepic(request):
>         context = {}
>         if request.method == 'POST':
>             post_data = request.POST.copy()
>             profile_pic = post_data['profile_pic']
>             print post_data, profile_pic
>             handle_uploaded_file(request.FILES['file'])
>             context.update({'message':'You must select a file to upload.'
> })
>             return HttpResponse(simplejson.dumps(context), content_type=
> 'application/json')
>         else:
>             context.update({'message':'You must select a file to upload.'
> })
>             return HttpResponse(simplejson.dumps(context), content_type=
> 'application/json')
>
>
>
> consoleoutput
>
>     File { name: "10923328_1112855418728180_5377511192406844214_n.png",
> lastModified: 1421116207673, lastModifiedDate: Date 2015-01-13T02:30:
> 07.673Z, size: 664332, type: "image/png" } home:56
>     "403:
>     <!DOCTYPE html>
>     <html lang="en">
>     <head>
>       <meta http-equiv="content-type" content="text/html; charset=utf-8">
>       <meta name="robots" content="NONE,NOARCHIVE">
>       <title>403 Forbidden</title>
>       <style type="text/css">
>         html * { padding:0; margin:0; }
>         body * { padding:10px 20px; }
>         body * * { padding:0; }
>         body { font:small sans-serif; background:#eee; }
>         body>div { border-bottom:1px solid #ddd; }
>         h1 { font-weight:normal; margin-bottom:.4em; }
>         h1 span { font-size:60%; color:#666; font-weight:normal; }
>         #info { background:#f6f6f6; }
>         #info ul { margin: 0.5em 4em; }
>         #info p, #summary p { padding-top:10px; }
>         #summary { background: #ffc; }
>         #explanation { background:#eee; border-bottom: 0px none; }
>       </style>
>     </head>
>     <body>
>     <div id="summary">
>       <h1>Forbidden <span>(403)</span></h1>
>       <p>CSRF verification failed. Request aborted.</p>
>
>
>     </div>
>
>     <div id="info">
>       <h2>Help</h2>
>
>         <p>Reason given for failure:</p>
>         <pre>
>         CSRF token missing or incorrect.
>         </pre>
>
>
>       <p>In general, this can occur when there is a genuine Cross Site
> Request Forgery, or when
>       <a
>       href='
> http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf
> '>Django's
>       CSRF mechanism</a> has not been used correctly.  For POST forms, you
> need to
>       ensure:</p>
>
>       <ul>
>         <li>Your browser is accepting cookies.</li>
>
>         <li>The view function uses <a
>         href='
> http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext
> '><code>RequestContext</code></a>
>         for the template, instead of <code>Context</code>.</li>
>
>         <li>In the template, there is a <code>{% csrf_token
>         %}</code> template tag inside each POST form that
>         targets an internal URL.</li>
>
>         <li>If you are not using <code>CsrfViewMiddleware</code>, then you
> must use
>         <code>csrf_protect</code> on any views that use the
> <code>csrf_token</code>
>         template tag, as well as those that accept the POST data.</li>
>
>       </ul>
>
>       <p>You're seeing the help section of this page because you have
> <code>DEBUG =
>       True</code> in your Django settings file. Change that to
> <code>False</code>,
>       and only the initial error message will be displayed.  </p>
>
>       <p>You can customize this page using the CSRF_FAILURE_VIEW
> setting.</p>
>     </div>
>
>     </body>
>     </html>
>     "
>
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/3f57f4f8-5f92-403b-950c-c6a524dceb38%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/3f57f4f8-5f92-403b-950c-c6a524dceb38%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAFWa6tLePYVbhzYojbLmLREYM7VrstntyGz7L2FKrFVs%2BgCJNg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to