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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to