Reputation: 35099
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")
Upvotes: 5
Views: 12295
Reputation: 8837
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.
Upvotes: 2