Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: Error 500 (INTERNAL SERVER ERROR) when doing ajax call

Hi when I'm doing ajax call, I'm getting this in console:

POST http://127.0.0.1:8000/registration/check/username/ 500 (INTERNAL SERVER ERROR) 

Also when I click on this link, I'm getting this:

DoesNotExist at /registration/check/username/
User matching query does not exist.
Request Method: POST
Request URL:    http://127.0.0.1:8000/registration/check/username/
Django Version: 1.3
Exception Type: DoesNotExist

JQuery:

function check_username() {
    $("#id_username").change(function() {
        var user = $("#id_username").val();
        var status = $("#id_username").nextAll(".status").first().empty();
        var checking = '<img src="/site_media/images/loader.gif" align="absmiddle"> Checking availability...';
        var success = '<img src="/site_media/images/tick.gif" align="absmiddle">';
        var e_length = '<p>User name have to be longer</p>';
        if (user.length >= 3) {
            status.append(checking);
            $.ajax({
                url: "/registration/check/username/",
                type: "POST",
                data: { username : $("#id_username").val() },
                dataType: "text",
                success: function(msg) {
                    if (msg == '1') {
                        status.append(success);
                    }
                    else {
                        status.append("This username is already in use");
                    }
                }
            });
        }
        else if (user.length <= 3 && user.length != 0) {
            status.append(e_length);
        }
        else {
            status;
        }
    });
}

Html:

{% block main-menu %} 
    <div class="contentarea">
            <form method="post" action="">{% csrf_token %}
                <ul id="reg-form">
                    <li>
                        <label for="id_username">Username:</label>
                        <input id="id_username" type="text" name="username" maxlength="30" />
                        <div class="status"></div>
                    </li>

Urls.py:

...
(r'^registration/check/([\w|\W]+)/$', register_check),
...

Views.py:

@csrf_exempt
def register_check(request, variable):
    if request.is_ajax():
        if variable == 'username':
            user = User.objects.get(username__exact = request.POST['username']);
            if user:
                msg = "1"
            else:
                msg = '0'
        return HttpResponse(msg)
    else:
        return HttpResponse("0")
like image 828
Vor Avatar asked Nov 04 '22 17:11

Vor


1 Answers

Generally use strings for the urls.py. Instead of using

(r'^registration/check/([\w|\W]+)/$', register_check),

use

(r'^registration/check/([\w|\W]+)/$', "register_check"),

and the first should be the path to your views file.

update

According to Django's 1.4 website here, you need to add the csrf token to the request in the headers. I didn't read the entire chunk of code though.

like image 99
Snakes and Coffee Avatar answered Nov 12 '22 11:11

Snakes and Coffee