Django рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░реЗрдВ

рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ "рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо" рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЕрдкрд▓реЛрдб рдХреЗ рджреМрд░рд╛рди рдЫрд╡рд┐ рдкрд░ рдлрд┐рд▓реНрдЯрд░ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рд░реНрд╡рд░ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЫрд╡рд┐ рдХреЛ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛, рдЙрд╕рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ (рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЫрд╡рд┐) рдХреА рдзрд╛рд░рд╛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, CamanJS js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛, рдЬреЛ рдХрд┐ NodeJS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЗрд╕реЗ рддреАрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛:


рдлрд┐рд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ CamanJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рдЕрд╕рдВрддреЛрд╖рдЬрдирдХ рдерд╛:


рдирддреАрдЬрддрди, рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ CamanJS рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ред

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╡рд┐рдХрд▓реНрдк ImageMagick рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреИрдХреЗрдЬ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рдореГрджреНрдз рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ django рдкрд░ рдЪрд▓рддреА рд╣реИ, рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ ImageMagick - PythonMagick рдФрд░ Wanda рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╡реЗ ImageMagick рдХреА рд╕рднреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреБрдЫ рдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рднрд╛рд╡ рдмрд╕ рдЧрд╛рдпрдм рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЙрдкрдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдореЗрдЬрдореИрдЧрд┐рдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдкреНрд░рднрд╛рд╡ рд╡рд┐рд╢реЗрд╖ рдмрд╛рд╢ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, http://jqmagick.imagemagick.org рдкрд░ рдЬрд╛рдПрдВ , рдПрдХ рддрд╕реНрд╡реАрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕реБрдВрджрд░ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реВрдк рд╣реИ, рддреЛ "рд╡рд┐рдХрд▓реНрдк" рдЕрдиреБрднрд╛рдЧ рдХреЗ рдирд┐рдЪрд▓реЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХрдорд╛рдВрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, jmmagick рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд┐рдЪрд▓рд╛ рджрд╛рдпрд╛рдВ рднрд╛рдЧ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

bash scripts/vintage1.sh -b 0 -c 35 -s roundrectangle -T torn -I grunge -C white output/8526-603.jpg output/3347-9458.jpg 


рдЬрд┐рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрд╕реЗ рд╡рд┐рдВрдЯреЗрдЬ1.рд╢ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо http://www.fmwconcepts.com/imagemagick рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдвреВрдВрдврддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП" рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рддрд░рд╣ рд╣рдо рдЙрди рд╕рднреА рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред

рддреЛ, рдХрд╛рд░реНрдп:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рдИ-рдХреЙрдорд░реНрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╕рд╛рдорд╛рди рдмреЗрдЪрдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдХреНрд░реЗрддрд╛ рд╣реИрдВ) рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд┐рддреНрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рддреИрдпрд╛рд░ рд╕реЗрдЯ рд╕реЗ рдЙрди рдкрд░ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рд╕рд░реНрд╡рд░ рдкрд░ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ


рдЫрд╡рд┐ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ filereader.js js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЙрдкрдпреЛрдЧ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ FileReader рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж XMLHttpRequest рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рдзрд┐ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реАрдзреЗ рднреЗрдЬрдиреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рд▓реЛрдб" рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

 var opts = { // тАж load: function(e, file) { var xhr = new XMLHttpRequest(); xhr.open('POST', '{% url upload_file %}', true); xhr.onload = function() { if (this.status == 200) { //        var resp = JSON.parse(this.response); //        (    ) filter_image = resp['image']; filter_thumb = resp['thumb']; } }; xhr.send(file); }, //тАж }; 


рд╕рд░реНрд╡рд░ рдкрд░, рд╣рдо рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рддрддреНрд╡ рдХреА src рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЫрд╡рд┐ рдХрд╛ рдирд╛рдо рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд╛ рдирд╛рдо рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред

 import os import datetime from PIL import Image try: from cStringIO import StringIO except ImportError: from StringIO import StringIO import simplejson as json from django.http import HttpResponse from django.conf import settings def upload_file(request): max_size = (2560, 2048) #      thumb_size = (325, 325) #     f_data = request.body fake_file = StringIO() fake_file.write(f_data) fake_file.seek(0) img = Image.open(fake_file) img.thumbnail(max_size, Image.ANTIALIAS) #     tmp_dir = settings.TEMP_IMG_DIR #         if not os.path.exists(tmp_dir): os.makedirs(tmp_dir) #        inner_dir_name = datetime.datetime.now().strftime('%d.%m.%Y') inner_dir = os.path.abspath(os.path.join(tmp_dir, inner_dir_name)) if not os.path.exists(inner_dir): os.makedirs(inner_dir) tmp_file_name = generate_tmp_file_name() #      thumb_tmp_file_name = 'thumb_' + tmp_file_name #     output = os.path.abspath(os.path.join(inner_dir, tmp_file_name)) output_thumb = os.path.abspath(os.path.join(inner_dir, thumb_tmp_file_name)) if not img.mode == 'RGB': img = img.convert('RGB') img.save(output, "JPEG") #      jpeg    img.thumbnail(thumb_size, Image.ANTIALIAS) img.save(output_thumb, "JPEG") #     to_response = json.dumps({ 'image': ''.join([settings.MEDIA_URL, '/'.join([settings.TEMP_IMG_DIR_NAME, innder_dir_name, tmp_file_name])]), 'thumb': ''.join([settings.MEDIA_URL, '/'.join([settings.TEMP_IMG_DIR_NAME, innder_dir_name, thumb_tmp_file_name])]), }) return HttpResponse(to_response, mimetype="application/json") 


TEMP_IMG_DIR рдХреЛ рд╕реНрд╡рдпрдВ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 #      TEMP_IMG_DIR = os.path.abspath(os.path.join(MEDIA_ROOT, 'temp_img')) 


рдПрдХ рдЫрд╡рд┐ рдкрд░ рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рдирд╛


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

 function setFilter(filter_name) { result_filter = filter_name $.ajax({ url: '{% url set_filter %}', method: 'POST', data: { 'img_path': filter_thumb, //     'filter_name': filter_name //    }, success: function(response) { $('#result_img').attr('src', response); //   } }) } 


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

 FILTERS_COMMAND = { 'f1': "bash_scripts/colortemp.sh -t 10950 {file_name} {output}", 'f2': "bash_scripts/colortemp.sh -t 5736 {file_name} {output}", # тАж 'f8': "bash_scripts/colorfilter.sh -c sepia -m 1 -d 28 {file_name} {output}", 'f9': "bash_scripts/colorfilter.sh -c underwater -m 1 -d 20 {file_name} {output}" } 


рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рди:

 import os import sys import subprocess def apply_filter(img_path, filter_name, output=None): if output is None: output_file_name = ''.join([filter_name, '_', os.path.basename(img_path)]) output_file = os.path.abspath(os.path.join(img_path.replace(os.path.basename(img_path), ''), output_file_name)) if os.path.exists(output_file): return output_file else: output_file = output command = FILTERS_COMMAND[filter_name] #  bash,  ,     : command = command.replace('(', '\(').replace(')', '\)') command = command.format(file_name=img_path, output=output_file) subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT) return output_file 


Apply_filter рдлрд╝рдВрдХреНрд╢рди set_filter рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ 2 рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ: рдЫрд╡рд┐ рдХрд╛ рдкрде рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдирд╛рдо, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫрд╡рд┐ рдХрд╛ рдкрде рджреЗрддрд╛ рд╣реИред

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

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


All Articles