я создавал всплывающую форму регистрации.и не хочу перезагружать страницу, когда появляется какое-либо сообщение об ошибке или об успешном завершении.потому что тогда всплывающая форма закроется.я просто хочу показать сообщение просто без перезагрузки страницы.
это то, что я делаю до сих пор
views.py
def signup(request):
if request.method == "POST":
username = request.POST["username"]
email = request.POST["email"].lower()
password = request.POST["password"]
password2 = request.POST["password2"]
try:
if password2 != password:
messages.error(request, "password didn't match")
elif len(password) < 6:
messages.error(request, "password is too small.")
elif User.objects.get(email=email):
messages.error(request, "user with this email already exists")
except:
if not (User.objects.filter(username=username).exists()):
user = User.objects.create_user(username=username, email=email)
user.set_password(password)
user.save()
messages.success(request, "User Created")
else:
messages.error(request, "Looks like username already exists")
django_messages = []
for message in messages.get_messages(request):
django_messages.append({
"level": message.level,
"message": message.message,
"tags": message.tags,
})
data = {}
data['messages'] = django_messages
return HttpResponse(json.dumps(data), content_type="application/json")
return redirect(request.META['HTTP_REFERER'])
ajax-код
<script type="text/javascript">
$(document).on('submit','#signup_form',function(e){
e.preventDefault();
$.ajax({
type:'POST',
url:"{% url 'auth_signup' %}",
data:{
'username':$('#signup_username').val()
'email':$('#signup_email').val(),
'password':$('#signup_password').val(),
'password2':$('#signup_password2').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
success:function(data){
update_messages(data.messages);;
$(".message").show();
},
error:function(data){
update_messages(data.messages);
(".message").show();
}
});
});
<script type="text/javascript">
function update_messages(messages){
$("#msgs").html("");
$.each(messages, function (i, m) {
$("#msgs").append("<div class='alert "+m.tags+"''><button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>×</span></button>"+m.message+"</div>");});}</script>
когда я нажимаю кнопку отправки.там должно быть сообщение об ошибке или об успешном завершении.но страница перейдет на URL http://127.0.0.1:8000/signup и покажет только эту строку json.
{"messages": [{"level": 40, "message": "пароль не совпадает", "теги ":" alert-danger "}]}