/ / Predávanie parametrov do jQuery z Django View a používanie funkcií spätného volania na základe podmienky if else - django, jquery, django-form, django-views

Odovzdávanie parametrov do jQuery z Django View a používanie funkcií spätného volania na základe podmienky if if - django, jquery, django-forms, django-views

V mojej base.html mám vyskakovací prihlasovací formulár

<div id="login-box" class="login-popup">
<a href="#" class="close"><img src="/images/http://localhost:8000/static/media/close_pop.png" class="btn_close" title="Close Window" alt="Close" /></a>
<form method="post" class="signin" action="{% url login_view %}" id="LoginForm">
<div id="ajaxwrapper">
<fieldset class="textbox">
<label class="username">
<span>Username</span>
<input id="username" name="username" value="" type="text" autocomplete="on" placeholder="Username">
</label>
<label class="password">
<span>Password</span>
<input id="password" name="password" value="" type="password" placeholder="Password">
</label>
<p id="sendwrapper"></p>
<p><button id="submitbutton" type="submit">Sign in</button></p>
<p>
<a class="forgot" href="/accounts/password/reset/">Forgot your password?</a>
</p>
</fieldset>
</div>
</form>

Pri odoslaní tohto formulára zavoláte nasledujúcu funkciu v zobrazení Django:

def login_view(request):
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
print "%s" % repr(request.POST)
print "%s" % repr(request.GET)
cd = form.cleaned_data
user = authenticate(username=cd["username"], password=cd["password"])
print user
if user is not None:
if user.is_active:
login(request, user)
# success
response_dict = "success"
return render_to_response("tr/login.html", { "username" : user , "response_dict" : response_dict })
else:
# disabled account
response_dict = "The account is disabled"
return render_to_response("tr/login.html", { "response_dict" : response_dict })
else:
# invalid login
response_dict = "Username or Password is not correct"
return render_to_response("tr/login.html", { "response_dict" : response_dict })
else:
print "%s" % repr(form.errors)

Teraz chcem pokračovať v vyskakovacom prihlasovacom poli pre každý neúspešný pokus a zavrieť ho pri úspešnom pokuse. Z tohto dôvodu skúšam nižšie uvedený kód jQuery. Ale neviem ako na to.

jQuery(function() {
var form = jQuery("#LoginForm");
form.submit(function(e) {
var a = 1;
jQuery("#submitbutton").attr("disabled", true)
jQuery("#sendwrapper").prepend("<span>Sending message, please wait... </span>")
if(a==1){jQuery("#ajaxwrapper").load(
form.attr("action") + " #ajaxwrapper",
form.serializeArray(),
function(responseText, responseStatus) {
jQuery("#sendwrapper").html("<span> AAAAAAAAAAAAAAA </span>")
jQuery("#sendbutton").attr("disabled", false)
}
)}
else{jQuery("#ajaxwrapper").load(
form.attr("action") + " #ajaxwrapper",
form.serializeArray(),
function(responseText, responseStatus) {
jQuery("#sendwrapper").html("<span> AAAAAAAAAAAAAAA </span>")
jQuery("#sendbutton").attr("disabled", false)
}
)};
e.preventDefault();
});
});

Prosím pomôžte!!

odpovede:

0 pre odpoveď č. 1

Vo svojom login_view vráťte „úspech“ do šablóny. Ak bolo prihlásenie úspešné, success = True else success = False.

Vo svojej šablóne môžete skontrolovať, či je úspech == pravda, zatvorte vyskakovacie okno.

Btw, vaše premenné sú trochu mätúce. Navrhujem niečo také:

response_dict["message"] = "Login successful."
response_dict["success"] = True
response_dict["user"] = user
return render_to_response("tr/login.html", response_dict)

Ak to urobíte, nemusíte tiež používateľa odosielať do šablóny: https://docs.djangoproject.com/en/dev/topics/auth/#authentication-data-in-templates