2015-10-19 129 views
0

我只是試圖用Django練習。我試圖做一個簡單的應用程序,它允許您上傳圖像並返回它的像素化版本。 我有兩個視圖:一個顯示錶單,一個處理圖像並返回結果。 問題是提出'禁止(403)'而不是結果。給出失敗的原因:CSRF令牌丟失或不正確。Django:困擾uploadind和處理圖像(CSRF令牌丟失或不正確)

urls.py

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^result/$', views.pixelate, name='pixelate') 
] 

views.py

from django.http import HttpResponse 
from django.shortcuts import render_to_response 
from .forms import UploadImageForm 
from .pixelate import pixelate_image 

def index(request): 
    form = UploadImageForm() 
    return render_to_response('pixelate/index.html', {'form': form}) 

def pixelate(request): 
    form = UploadImageForm(request.POST, request.FILES) 
    if form.is_valid(): 
     response = HttpResponse(content_type='image/png') 
     response['Content-Disposition'] = 'filename="image.png"' 

     img = pixelate_image(request.FILES['image']) 
     response.write(img) 
     return response 

pixelate.py

from PIL import Image 
from io import BytesIO 

def pixelate_image(img, pixelSize=9): 
    buffer = BytesIO() 
    p = Image(buffer) 
    image = p.open(img) 
    image = image.resize((image.size[0]/pixelSize, image.size[1]/pixelSize), Image.NEAREST) 
    image = image.resize((image.size[0]*pixelSize, image.size[1]*pixelSize), Image.NEAREST) 
    image.save() 
    final_image = buffer.getvalue() 
    buffer.close() 
    return final_image 

forms.py

from django import forms 

class UploadImageForm(forms.Form): 
    image = forms.ImageField() 

的index.html

<form action="{% url 'pixelate:pixelate' %}" method="post"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 

回答

1

的index.html

<form action="{% url 'pixelate:pixelate' %}" method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 
+0

就試了一下。不幸的是,它仍然引發同樣的錯誤「CSRF令牌丟失或不正確」。 – ndrbrt

+0

你在request.POST中得到了什麼? – EchoUA

+0

我該如何檢查? – ndrbrt

相關問題