Latest posts on Ошибка 403 при попытке открыть изображения, загруженные с телефона topichttp://python.su/forum/topic/37081/2019-04-18T15:37:44+03:00Веб-технологии :: Django :: Ошибка 403 при попытке открыть изображения, загруженные с телефона
2019-04-18T15:37:44+03:00Dropni200891<blockquote><em>m0nte-cr1st0</em><br/>Проблема была не столько в телефоне, сколько в размере файлов. Если они весят больше 2,5 Мб, то им устанавливаются 600 права. Нужно было в настройках этот параметр переопределить.</blockquote>Все оказалось проще. Хорошо, что решение проблемы на поверхности было.
Веб-технологии :: Django :: Ошибка 403 при попытке открыть изображения, загруженные с телефона
2019-04-18T15:22:37+03:00m0nte-cr1st0200890Проблема была не столько в телефоне, сколько в размере файлов. Если они весят больше 2,5 Мб, то им устанавливаются 600 права. Нужно было в настройках этот параметр переопределить.
Веб-технологии :: Django :: Ошибка 403 при попытке открыть изображения, загруженные с телефона
2019-04-17T12:14:39+03:00Dropni200846Может проблема не в коде? Имеет смысл проверить маршрут следования пакетов от пользователя к серверу <br/><a href="https://www.host-tracker.com/ru/InstantCheck/Create/?type=Trace">host-tracker.com/ru/InstantCheck/Create/?type=Trace</a> Это даст ответ на суть проблемы. Вообще последнее время много проблем с оптимизацией сайта под яблочные устройства. Если это не поможет, то будем дальше думать.
Веб-технологии :: Django :: Ошибка 403 при попытке открыть изображения, загруженные с телефона
2019-04-17T11:47:35+03:00Unifikacia200840Проблема только на iPhone или на Android тоже?
Веб-технологии :: Django :: Ошибка 403 при попытке открыть изображения, загруженные с телефона
2019-04-15T16:15:13+03:00m0nte-cr1st0200789Есть 2 поля для загрузки изображений. При нажатии на сабмит они через аякс уходят во views Джанго. Дальше они там обрабатываются и создаётся соответствующая запись в базе данных.<br/><br/>Проблема в том, что мой код работает только для загрузки изображений с компьютера. А при загрузке с мобильного телефона (айфон) просто создаётся запись в базе данных. В этой записи присутствуют ссылки на эти фотографии, но когда я пытаюсь их открыть - получаю ошибку 403. Когда пытаюсь вручную сменить эти фото с админ страницы - получаю ту же ошибку - 403.<br/><br/><strong>models.py</strong><br/><br/><div class="code"><pre> <span class="kn">from</span> <span class="nn">djlime.utils</span> <span class="kn">import</span> <span class="n">get_file_path</span>
<span class="k">class</span> <span class="nc">RequestUser</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
<span class="n">main_photo</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ImageField</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s1">'main_photo'</span><span class="p">),</span> <span class="n">upload_to</span><span class="o">=</span><span class="n">get_file_path</span><span class="p">)</span>
<span class="n">profile_photo</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ImageField</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s1">'profile_photo'</span><span class="p">),</span> <span class="n">upload_to</span><span class="o">=</span><span class="n">get_file_path</span><span class="p">)</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">upload_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">'accounts/request_user/images'</span>
</pre></div><br/><strong>forms.py</strong><br/><br/><div class="code"><pre> <span class="k">class</span> <span class="nc">IdentificationForm</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">ModelForm</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">RequestUser</span>
<span class="n">fields</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'main_photo'</span><span class="p">,</span> <span class="s1">'profile_photo'</span><span class="p">,</span> <span class="p">)</span>
<span class="n">widget</span><span class="o">=</span> <span class="p">{</span>
<span class="s1">'main_photo'</span><span class="p">:</span> <span class="n">forms</span><span class="o">.</span><span class="n">FileInput</span><span class="p">(</span>
<span class="n">attrs</span><span class="o">=</span><span class="p">{</span>
<span class="s1">'style'</span><span class="p">:</span> <span class="s1">'display: none'</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">),</span>
<span class="s1">'profile_photo'</span><span class="p">:</span> <span class="n">forms</span><span class="o">.</span><span class="n">FileInput</span><span class="p">(</span>
<span class="n">attrs</span><span class="o">=</span><span class="p">{</span>
<span class="s1">'style'</span><span class="p">:</span> <span class="s1">'display: none'</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="p">}</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">IdentificationForm</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s1">'main_photo'</span><span class="p">]</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">attrs</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'class'</span><span class="p">:</span><span class="s1">'file_dnl'</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">[</span><span class="s1">'profile_photo'</span><span class="p">]</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">attrs</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'class'</span><span class="p">:</span><span class="s1">'file_dnl'</span><span class="p">}</span>
<span class="k">def</span> <span class="nf">clean_image</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">cd_image</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'main_photo'</span><span class="p">]</span>
<span class="k">return</span> <span class="n">cd_image</span>
<span class="k">def</span> <span class="nf">clean_image2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">cd_image</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">'profile_photo'</span><span class="p">]</span>
<span class="k">return</span> <span class="n">cd_image</span>
</pre></div><br/><strong>views.py</strong><br/><br/><div class="code"><pre> <span class="k">def</span> <span class="nf">identification_view</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">'POST'</span><span class="p">:</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">IdentificationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span><span class="p">)</span>
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">is_ajax</span><span class="p">():</span>
<span class="n">main_photo</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'file1'</span><span class="p">)</span>
<span class="n">profile_photo</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'file2'</span><span class="p">)</span>
<span class="n">RequestUser</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
<span class="n">user</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">,</span>
<span class="n">main_photo</span> <span class="o">=</span> <span class="n">main_photo</span><span class="p">,</span>
<span class="n">profile_photo</span> <span class="o">=</span> <span class="n">profile_photo</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">HttpResponse</span><span class="p">(</span><span class="s1">'image upload success'</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">form</span> <span class="o">=</span> <span class="n">IdentificationForm</span><span class="p">()</span>
<span class="n">identifications</span> <span class="o">=</span> <span class="n">RequestUser</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">user</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
<span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">'accounts/identification.html'</span><span class="p">,</span> <span class="p">{</span><span class="s1">'form'</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'identifications'</span><span class="p">:</span> <span class="n">identifications</span><span class="p">})</span>
</pre></div><br/><strong>identification.html</strong><br/><br/><div class="code"><pre> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span>
<span class="p"><</span><span class="nt">form</span> <span class="na">action</span><span class="o">=</span><span class="s">""</span> <span class="na">class</span><span class="o">=</span><span class="s">"edit_form new_event"</span> <span class="na">enctype</span><span class="o">=</span><span class="s">"multipart/form-data"</span> <span class="na">method</span><span class="o">=</span><span class="s">"POST"</span><span class="p">></span>
<span class="p"><</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">'hidden'</span> <span class="na">name</span><span class="o">=</span><span class="s">'csrfmiddlewaretoken'</span> <span class="na">value</span><span class="o">=</span><span class="s">'bBfv5mapMAVzI35UGp0H4LfbKR9avG4id6Me01bRZfAefjzKwcL3xj1lDiLBBR5L'</span> <span class="p">/></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"field inline"</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"subhead"</span><span class="p">></span>Main photo:<span class="p"></</span><span class="nt">div</span><span class="p">></span>
<span class="p"><</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">"file"</span> <span class="na">name</span><span class="o">=</span><span class="s">"main_photo"</span> <span class="na">required</span> <span class="na">class</span><span class="o">=</span><span class="s">"file_dnl"</span> <span class="na">id</span><span class="o">=</span><span class="s">"id_main_photo"</span> <span class="p">/></span>
<span class="p"><</span><span class="nt">label</span> <span class="na">for</span><span class="o">=</span><span class="s">"foto1"</span> <span class="na">class</span><span class="o">=</span><span class="s">"id_foto"</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"addPhoto"</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"button"</span> <span class="na">id</span><span class="o">=</span><span class="s">'foto1_button'</span><span class="p">></</span><span class="nt">div</span><span class="p">></span>
<span class="p"></</span><span class="nt">div</span><span class="p">></span>
<span class="p"></</span><span class="nt">label</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">id</span><span class="o">=</span><span class="s">'profile_photo'</span> <span class="na">style</span><span class="o">=</span><span class="s">'display:none; text-align:center'</span><span class="p">></</span><span class="nt">div</span><span class="p">></span>
<span class="p"></</span><span class="nt">div</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"field inline"</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"subhead"</span><span class="p">></span>Profile photo:<span class="p"></</span><span class="nt">div</span><span class="p">></span>
<span class="p"><</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">"file"</span> <span class="na">name</span><span class="o">=</span><span class="s">"profile_photo"</span> <span class="na">required</span> <span class="na">class</span><span class="o">=</span><span class="s">"file_dnl"</span> <span class="na">id</span><span class="o">=</span><span class="s">"id_profile_photo"</span> <span class="p">/></span>
<span class="p"><</span><span class="nt">label</span> <span class="na">for</span><span class="o">=</span><span class="s">"foto2"</span> <span class="na">class</span><span class="o">=</span><span class="s">"id_foto"</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"addPhoto"</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"button"</span> <span class="na">id</span><span class="o">=</span><span class="s">'foto2_button'</span><span class="p">></</span><span class="nt">div</span><span class="p">></span>
<span class="p"></</span><span class="nt">div</span><span class="p">></span>
<span class="p"></</span><span class="nt">label</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">id</span><span class="o">=</span><span class="s">'profile_photo'</span> <span class="na">style</span><span class="o">=</span><span class="s">'display:none; text-align:center'</span><span class="p">></</span><span class="nt">div</span><span class="p">></span>
<span class="p"></</span><span class="nt">div</span><span class="p">></span>
<span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"center"</span><span class="p">></span>
<span class="p"><</span><span class="nt">button</span> <span class="na">class</span><span class="o">=</span><span class="s">"submit mgln"</span> <span class="na">type</span><span class="o">=</span><span class="s">'button'</span><span class="p">></span>Submit<span class="p"></</span><span class="nt">button</span><span class="p">></span>
<span class="p"></</span><span class="nt">div</span><span class="p">></span>
<span class="p"></</span><span class="nt">form</span><span class="p">></span>
</pre></div><br/><div class="code"><pre> <span class="nx">$</span><span class="p">(</span><span class="s2">"input[name='main_photo']"</span><span class="p">).</span><span class="nx">change</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span>
<span class="kd">var</span> <span class="nx">filename</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">val</span><span class="p">().</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/.*\\/</span><span class="p">,</span> <span class="s2">""</span><span class="p">);</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">filename</span><span class="p">)</span>
<span class="nx">$</span><span class="p">(</span><span class="s2">"#main_photo"</span><span class="p">).</span><span class="nx">html</span><span class="p">(</span><span class="nx">filename</span><span class="p">).</span><span class="nx">css</span><span class="p">(</span><span class="s1">'display'</span><span class="p">,</span> <span class="s1">'block'</span><span class="p">);</span>
<span class="p">});</span>
<span class="nx">$</span><span class="p">(</span><span class="s2">"input[name='profile_photo']"</span><span class="p">).</span><span class="nx">change</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span>
<span class="kd">var</span> <span class="nx">filename</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">val</span><span class="p">().</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/.*\\/</span><span class="p">,</span> <span class="s2">""</span><span class="p">);</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">filename</span><span class="p">)</span>
<span class="nx">$</span><span class="p">(</span><span class="s2">"#profile_photo"</span><span class="p">).</span><span class="nx">html</span><span class="p">(</span><span class="nx">filename</span><span class="p">).</span><span class="nx">css</span><span class="p">(</span><span class="s1">'display'</span><span class="p">,</span> <span class="s1">'block'</span><span class="p">);</span>
<span class="p">});</span>
<span class="nx">$</span><span class="p">(</span><span class="s1">'#foto1_button'</span><span class="p">).</span><span class="nx">on</span><span class="p">(</span><span class="s1">'click'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(){</span>
<span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">"id_main_photo"</span><span class="p">).</span><span class="nx">click</span><span class="p">();</span>
<span class="p">});</span>
<span class="nx">$</span><span class="p">(</span><span class="s1">'#foto2_button'</span><span class="p">).</span><span class="nx">on</span><span class="p">(</span><span class="s1">'click'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(){</span>
<span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">"id_profile_photo"</span><span class="p">).</span><span class="nx">click</span><span class="p">();</span>
<span class="p">});</span>
<span class="kd">var</span> <span class="nx">token</span> <span class="o">=</span> <span class="s1">'bBfv5mapMAVzI35UGp0H4LfbKR9avG4id6Me01bRZfAefjzKwcL3xj1lDiLBBR5L'</span><span class="p">;</span>
<span class="nx">$</span><span class="p">(</span><span class="s1">'.mgln'</span><span class="p">).</span><span class="nx">on</span><span class="p">(</span><span class="s1">'click'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(){</span>
<span class="nx">formData</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">FormData</span><span class="p">();</span>
<span class="nx">formData</span><span class="p">.</span><span class="nx">append</span><span class="p">(</span><span class="s1">'file1'</span><span class="p">,</span> <span class="nx">$</span><span class="p">(</span><span class="s1">'input[name=main_photo]'</span><span class="p">)[</span><span class="mi">0</span><span class="p">].</span><span class="nx">files</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="nx">formData</span><span class="p">.</span><span class="nx">append</span><span class="p">(</span><span class="s1">'file2'</span><span class="p">,</span> <span class="nx">$</span><span class="p">(</span><span class="s1">'input[name=profile_photo]'</span><span class="p">)[</span><span class="mi">0</span><span class="p">].</span><span class="nx">files</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="nx">$</span><span class="p">.</span><span class="nx">ajax</span><span class="p">({</span>
<span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="s2">"X-CSRFToken"</span><span class="o">:</span> <span class="nx">token</span> <span class="p">},</span>
<span class="nx">type</span><span class="o">:</span> <span class="s2">"POST"</span><span class="p">,</span>
<span class="nx">url</span><span class="o">:</span> <span class="s2">"/identification/"</span><span class="p">,</span>
<span class="nx">data</span><span class="o">:</span> <span class="nx">formData</span><span class="p">,</span>
<span class="nx">processData</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
<span class="nx">contentType</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
<span class="nx">success</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">alert</span><span class="p">(</span><span class="s1">'Ok.'</span><span class="p">);</span>
<span class="p">},</span>
<span class="nx">error</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">alert</span><span class="p">(</span><span class="s1">'Not ok.'</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">})</span>
<span class="p">})</span>
</pre></div>