Django - рдЕрдЬрд╛рдХреНрд╕ рд░реВрдкреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Django рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдврд╛рдВрдЪрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗрдм 2.0 рдпреБрдЧ рдХреЗ рдЖрдЧрдорди рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдЕрднреА рднреА AJAX рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдФрд░ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд░реВрдкреЛрдВ рдореЗрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ django рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдХреЛрдИ js- рдврд╛рдБрдЪрд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реЛ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рдЪреАрд▓рд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдРрд╕реЗ рдкреНрд░рдкрддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкреЗрдЬреЛрдВ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ ajax рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдРрд╕реЗ рд░реВрдкреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рдирдпрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ - http://www.dajaxproject.com/ ред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реНрд╡рдпрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЧ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред

рдЖрдХрд╛рд░


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдлреЙрд░реНрдо рд▓реЗрдВ:
class RegisterForm(forms.Form): email = forms.EmailField() password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput) password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput) 

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕реЗ рдпрд╣ рдлрд╝реЙрд░реНрдо рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

рдлрд╛рд░реНрдо рдХрд╛ рдЙрддреНрдкрд╛рджрди


рдЗрд╕ рдлрд╝реЙрд░реНрдо рдХреЛ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд▓рд╛рдн рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЧрддрд┐ рд╣реИ (рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рдЖрдк рдлреЙрд░реНрдо рдореЗрдВ GET рдФрд░ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдореЗрдВ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ POST рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдкреНрд▓рд╕ рд╣рдо рдПрдХ рдЕрд▓рдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдлрд╝реЙрд░реНрдо рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓, рдЬреЛ рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдмрдирд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡рд╛рдж рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдкреГрд╖реНрда рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реВрдВ рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣рд╛рдВ / рдирд╣реАрдВ рд╕рдВрд╡рд╛рдж рд╣реИ, рдФрд░ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдпрд╣рд╛рдВ рд░рд╣рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

рдлрд╛рд░реНрдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг


рд╣рдо рдкреНрд░рдкрддреНрд░ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЕрдЬрд╛рдХреНрд╕-рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдлреЙрд░реНрдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдореМрдЬреВрдж рд╣реИрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣рд╛рдБ рддрд╛рд░реНрдХрд┐рдХ рд╕рдорд╛рдзрд╛рди, JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 2 рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдмреВрд▓рд┐рдпрди рд╣реИ, рдЬреЛ рдлреЙрд░реНрдо рд╕рддреНрдпрд╛рдкрди рдХреА рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде, рдлрд┐рд░ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
рдореБрдЭреЗ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╣реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП, рдкреВрд░реЗ рдлреЙрд░реНрдо рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ред рдпрд╣рд╛рдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдлреЙрд░реНрдо рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛрдб рд▓реЛрдХрдкреНрд░рд┐рдп jQuery рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ jQuery рдлреЙрд░реНрдо рдкреНрд▓рдЧрд┐рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  1. рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛:

    рджреЗрдЦрдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг:
     def register(request): if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): #  # ... return HttpResponse(simplejson.dumps({'response': _("Email with a confirmation link has been sent"), 'result': 'success'})) else: t = loader.get_template('register.html') ctx = RequestContext(request, {'form': form}) response = t.render(ctx) return HttpResponse(simplejson.dumps({'response': unicode(response), 'result': 'error'})) form = RegisterForm() return direct_to_template(request, "register.html", extra_context={'form': form }) 


    рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
     $(document).ready(function() { $('#register').live('click', function() { $('#register_form').ajaxSubmit({ success: function(data, statusText, xhr, $form) { //     $form.find('.error').remove(); if (data['result'] == 'success') { //  -  } else if (data['result'] == 'error') { //   $form.replaceWith(data['response']); } }, dataType: 'json' }); }); } 
  2. рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛:

    рджреЗрдЦрдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг:
     def register(request): if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): #  # ... return HttpResponse(simplejson.dumps({'response': _("Email with a confirmation link has been sent"), 'result': 'success'})) else: #   response  ,  -   response = {} for k in form.errors: #       ... response[k] = form.errors[k][0] return HttpResponse(simplejson.dumps({'response': response, 'result': 'error'})) form = RegisterForm() return direct_to_template(request, "register.html", extra_context={'form': form }) 


    рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
     function display_form_errors(errors, $form) { for (var k in errors) { $form.find('input[name=' + k + ']').after('<div class="error">' + errors[k] + '</div>'); } } $(document).ready(function() { $('#register').live('click', function() { $('#register_form').ajaxSubmit({ success: function(data, statusText, xhr, $form) { //     $form.find('.error').remove(); if (data['result'] == 'success') { //  -  } else if (data['result'] == 'error') { //   display_form_errors(data['response'], $form); } }, dataType: 'json' }); }); } 
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдФрд░ рдлреЙрд░реНрдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ <ul> рд╕реВрдЪреА рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рджреВрд╕рд░реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛ рдпрд╛ рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рд╡рд╣ рд╕рдм рд╣реИред рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдлреЙрд░реНрдо рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реВрдВ:

рдЫрд╡рд┐

рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕реБрдирдиреЗ рдФрд░ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реАрдЦрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In117876/


All Articles