Django рдореЗрдВ рдЕрдЬрд╛рдХреНрд╕ рдкреНрд░рдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди

image рдЖрдЬ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдХреИрд╕реЗ рдЕрдЬрд╛рдХреНрд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реВрдкреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░, Django рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдХреЛрдИ рдирдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрдИ рд▓реЗрдЦ рд╣реИрдВ, рдЗрди рд▓реЗрдЦреЛрдВ рд╕реЗ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдлреЙрд░реНрдо рд╕рддреНрдпрд╛рдкрди рдХреЗ рдкреВрд░реЗ рддрд░реНрдХ рдХреЛ рдЕрдЬрд╛рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рдпрд╣ рд╣рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреЗ рдЕрдиреНрдп рд╕рднреА рдЕрднреНрдпрд╛рд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдХреНрд▓рд╛рд╕ рдЖрдзрд╛рд░рд┐рдд рджреГрд╢реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЬрдм рдЕрдЬрд╛рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд░реВрдкреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдн рдорд┐рд▓рддреЗ рд╣реИрдВ:

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
  1. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдкрд░ рд╕рднреА рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП "рд╕рдмрдорд┐рдЯ" рдИрд╡реЗрдВрдЯ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдиреНрдпрдлрд╝реЙрд░реНрдо;
  2. рдЬрдм "рд╕рдмрдорд┐рдЯ" рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣реИрдВрдбрд▓рд░ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдФрд░ рдЙрд╕рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреЗ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ;
  3. рд╡рд╣ рджреГрд╢реНрдп рдЬреЛ рдЗрд╕ рдкрддреЗ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ:
    1. рдкреНрд░рдкрддреНрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ;
    2. рдбреЗрдЯрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ;
    3. рд╕рддреНрдпрд╛рдкрди рдХреА рд╕рдлрд▓рддрд╛ рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓реА рд╕реВрдЪреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ;
  4. рд╕рдлрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рдж, рд╣реИрдВрдбрд▓рд░ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЖрд▓реЗрдЦ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ред рд╣реЗрдмреНрд░реЛрд╕реЛрд╕рд┐рдЯреА рд╕реЗ рдмреНрдпрд╛рдЬ рдХреЗ рд╕рд╛рде, рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб


рдХреА рдкреНрд░рд╕реНрддреБрддрд┐
рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рдПрдВ рдЬреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛:
class SignIn(FormView): form_class = SignInForm template_name = 'valid.html' def form_valid(self, form): user = authenticate(**form.cleaned_data) if user: login(self.request, user) return HttpResponseRedirect('/') 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдЕрдЬрд╛рдХреНрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдБ рдирд╣реАрдВ рд╣реИред

рдЕрдм рд╣рдо рдПрдХ рджреГрд╢реНрдп рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВрдЧреЗ:
 class AjaxValidation(FormView): form_dict = { 'signin': SignInForm, } def get(self, request, *args, **kwargs): return HttpResponseRedirect('/') def form_invalid(self, form): data = [] for k, v in form._errors.iteritems(): text = { 'desc': ', '.join(v), } if k == '__all__': text['key'] = '#%s' % self.request.POST.get('form') else: text['key'] = '#id_%s' % k data.append(text) return HttpResponse(json.dumps(data)) def form_valid(self, form): return HttpResponse("ok") def get_form_class(self): return self.form_dict[self.request.POST.get('form')] 

рдпрд╣рд╛рдВ рд╣рдо AjaxValidation рджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдпрджрд┐ рдлреЙрд░реНрдо рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдирд┐рдореНрди рдлреЙрд░реНрдо рдХреЗ Json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛:
 [{тАЬkeyтАЭ: тАЭ#id_emailтАЭ, тАЬdescтАЭ: тАЭ  email тАЭ}, {тАЬkeyтАЭ: тАЭ...тАЭ, тАЬdescтАЭ: тАЭ...тАЭ}] 

рдЗрд╕рдореЗрдВ рд╣рдо рдЙрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реБрдИ рдереА, рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░ - "id_ <рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо>", рдпрд╛ рдлреЙрд░реНрдо рдХрд╛ рдирд╛рдо рдпрджрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдлреЙрд░реНрдо рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╣рдо рдлреЙрд░реНрдо рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рдкреНрдд рддреНрд░реБрдЯрд┐ рдкрд╛рда рдХреЛ рднреА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдлреЙрд░реНрдо_ рдбрд┐рдХреНрд╢рди рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ, рд╣рдо рдлреЙрд░реНрдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдлреЙрд░реНрдо рдХреНрд▓рд╛рд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдХрднреА-рдХрднреА, рдЙрдЪрд┐рдд рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рдкреНрд░рдкрддреНрд░ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡реЗ get_form_kwargs рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
  def get_form_kwargs(self): kwargs = super(AjaxValidation, self).get_form_kwargs() cls = self.get_form_class() if hasattr(cls, 'get_arguments'): kwargs.update(cls.get_arguments(self)) return kwargs 

рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдлреЙрд░реНрдо рдХреНрд▓рд╛рд╕ рдореЗрдВ рдлреЙрд░реНрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЙрдЬрд┐рдХ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╣рдо рд╡рд┐рдзрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рдкрддреНрд░ рдореЗрдВ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
  @staticmethod def get_arguments(arg): user = arg.request.user return {'instance': user} 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рддрд░реАрдХреЗ рдореЗрдВ AjaxValidation рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рдлрд┐рд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВред

рдЖрдХрд╛рд░
рдЕрдЧрд▓рд╛, рдкреНрд░рдкрддреНрд░ рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 class SignInForm(forms.Form): email = forms.EmailField(widget=forms.TextInput(attrs={'humanReadable': 'E-mail'}), label='E-mail') password = forms.CharField(min_length=6, max_length=32, widget=forms.PasswordInput(attrs={'humanReadable': ''}), label='') def clean(self): if not self._errors: cleaned_data = super(SignInForm, self).clean() email = cleaned_data.get('email') password = cleaned_data.get('password') try: user = User.objects.get(email=email) if not user.check_password(password): raise forms.ValidationError(u'  e-mail \ .') elif not user.is_active: raise forms.ValidationError(u'   e-mail .') except User.DoesNotExist: raise forms.ValidationError(u'   e-mail  .') return cleaned_data 

рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо humanReadable рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рдкрддреНрд░ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрд░реЗрдВрдЧреЗред

рд╕рддреНрдпрд╛рдкрди рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдИрдореЗрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рде рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдлрд╛рдИ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЯреЗрдореНрдкрд▓реЗрдЯ
рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рд╡рд┐рдзрд┐ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдлреЙрд░реНрдо рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ:
 <!DOCTYPE html> <html> <head> <title></title> </head> <body> <form class='validForm' id='signin' humanReadable=' ' method='post' action=''> <div class='validation_info'></div> {{ form.as_ul }} {% csrf_token %} <input type='submit'> </form> </body> </html> 

рд╕рддреНрдпрд╛рдкрди_рдЗрдирдлреЛ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдореЗрдВ, рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо рдЬреЛ рд╣рдореЗрдВ рдорд╛рдирд╡реАрдп рдЧреБрдг рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЧреНрд░рд╛рд╣рдХ рднрд╛рдЧ


рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЬрд╛рдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлреЙрд░реНрдо рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдП
рдЖрдИрдбреАред рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкреНрд░рдкрддреНрд░_dict рдЪрд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рдкрддреНрд░ рдХреЛ рдмрд╛рдВрдзрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдиреНрдп рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рдорд╛рдиреНрдп рд╡рд░реНрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реНрд╡рдпрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 (function(){ var _p = project; _p.setupValidator = function($f){ var targetInputs = $f.find('input,textarea,select'), infoElement = $f.find('.validation_info'); targetInputs.add($f).each(function(){ var $i = $(this), hR = $i.attr('humanReadable'); $i.data('showErrorMessage',function(msg){ infoElement.append($('<p/>').html(hR+': '+msg)); }); }); $f.on('submit', function(e, machineGenerated) { if(machineGenerated) return; infoElement.html(''); e.preventDefault(); var ser = targetInputs.serialize(); ser += '&form=' + $f.attr('id'); $.post('/ajaxValidation/', ser, function(info) { if (info != 'ok') { var errors = $.parseJSON(info); for (var i = 0; i < errors.length; i++) { var input = $f.find(errors[i].key); if($f.is(errors[i].key)){ input = $f; } if(input.data('showErrorMessage')){ input.data('showErrorMessage')(errors[i].desc); } else { console.log(input,errors[i].desc); } } } else { $f.trigger('submit', [true]); } }); }); } $(function (){ _p.setupValidator($('.'+_p.validateeFormClass)); }); })(); 

рд╣реИрдВрдбрд▓рд░ рдлреЙрд░реНрдо рд╕реЗ рд╕рдмрдорд┐рдЯ рдИрд╡реЗрдВрдЯ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, $ .serialize () рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ,
рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд╛рдЗрди рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдФрд░ рд╡реИрд▓реНрдпреВ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛, рдФрд░ рдлреЙрд░реНрдо рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рднреА рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рдФрд░ рддреНрд░реБрдЯрд┐ рдкрд╛рда рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рддрддреНрд╡ рдХрд╛ рдПрдХ рдкрдардиреАрдп рд╡рд┐рд╡рд░рдг (рдкреНрд░рдкрддреНрд░) рдФрд░ рдХрдХреНрд╖рд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рддрддреНрд╡ рдореЗрдВ рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рдкрд╛рда рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ AjaxValidation рджреГрд╢реНрдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рдм рдХреБрдЫ рдбрд╛рд▓рддреЗ рд╣реИрдВ
рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрддред рджреГрд╢реНрдп рдореЗрдВ, рд╣рдо рдЙрди рд░реВрдкреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЛ рдЕрдЬрд╛рдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рднреА рд▓рд╛рднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реБрдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Flip89 рдХреЗ рд╕рд╣рдпреЛрдЧ рд╕реЗ

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


All Articles