露木です。

状況を切り分けてみましょう。

ブラウザ上で動作しているJavaScriptで確認する事
===============================================
* Ajaxのリクエスト時に該当行が呼び出されているか

  xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));

* Cookieにcsrftokenが設定されてきているか

  Cookieにcsrftokenという名前と値がセットされてきているか。
  csrftokenという名前は、settings.CSRF_COOKIE_NAMEで定義されています
  ので、設定を変えていれば違う名前になるでしょう。

サーバ側でチェックする事
===============================================
* リクエストヘッダにX-CSRFTokenが設定されている事

  CSRFViewMiddlewareのprocess_viewをみると、最終的には
  request.META.get('HTTP_X_CSRFTOKEN', '') をチェックするようです。
  リクエストヘッダを覗くか、METAを覗くかでHTTP_のプリフィックスが
  あるかないかが違いそうなので、慌てずによく見るとよいでしょう。

原因となっている箇所がどこなのかを切り分けて、調査する必要の
ある場所を限りなく絞り込んでいくとよいと思います。

2012/9/6 tonpa <oniku.wo.mog...@gmail.com>:
> Toruさん
>
> 返信ありがとうございます。
>
> CsrfViewMiddlewareに関しては、Django1.3にはデフォルトで有効になっているようです。
>
>
> MIDDLEWARE_CLASSES = (
>     'django.middleware.common.CommonMiddleware',
>     'django.contrib.sessions.middleware.SessionMiddleware',
>     'django.middleware.csrf.CsrfViewMiddleware',               # こちら
>     'django.contrib.auth.middleware.AuthenticationMiddleware',
>     'django.contrib.messages.middleware.MessageMiddleware',
> )
>
> CSRF値についてですが、
> ajaxを利用する場合は、上記にも書きました
> https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax
> こちらの方で、cookieに値をセットする仕組みだと理解しておりました。
> そこのリクエストで実際にnullとなってしまっているようで失敗していると考えております。
>
> もし、他に確認する項目があるようでしたら、教えていただけたら幸いです。
>
> よろしくお願いします。
>
>
> 2012年9月1日土曜日 12時57分43秒 UTC+9 Toru Tomita:
>>
>> 下記の設定は既に設定済みでしようか?
>>
>> Add the middleware'django.middleware.csrf.CsrfViewMiddleware' to your list
>> of middleware classes, MIDDLEWARE_CLASSES. (It should come before
>> CsrfResponseMiddleware if that is being used, and before any view middleware
>> that assume that CSRF attacks have been dealt with.)
>>
>> Alternatively, you can use the
>> decoratordjango.views.decorators.csrf.csrf_protect on particular views you
>> want to protect (see below)
>>
>> また
>> Postの際に、CSRFの値を含んでいるか気になります
>>
>> Por iPhone
>>
>> On 2012/08/31, at 23:48, tonpa <oniku.w...@gmail.com> wrote:
>>
>> tonpaです。
>>
>> 早速の返信ありがとうございます。
>>
>> 環境について不足があり申し訳ありません。
>>
>> // パッケージ
>> Apache/2.2.21
>> Django-1.3
>>
>> // ディレクトリ構成
>> /Sites/my_site/
>>     |
>>     +----settings.py
>>     +----urls.py
>>     +---wsgi.py
>>     +---media
>>              |
>>              +---css
>>              +---img
>>              +---js
>>     +---my_app
>>
>> // apache.conf
>> <VirtualHost *:80>
>>     DocumentRoot "/Sites/my_site/"
>>     ServerName my_app.com
>>     ErrorLog "/private/var/log/apache2/my_app-error_log"
>>     CustomLog "/private/var/log/apache2/my_app-access_log" common
>>
>>     Alias /media/ /Sites/my_site/media/
>>     Alias /static/ /Sites/my_site/static/
>>
>>     WSGIScriptAlias / /Sites/my_site/wsgi.py
>>
>>     <Directory "/Sites/my_site/">
>>         AllowOverride None
>>         Order allow,deny
>>         Allow from all
>>     </Directory>
>> </VirtualHost>
>>
>>
>> また、開発環境時はcontext_processorで以下のように設定しておりました。
>>
>> // context_processor.py
>> import settings
>>
>> def media(request):
>>     return {
>>         'MEDIA_URL': settings.MEDIA_URL,
>>     }
>>
>> 自分がおかしいと思う点が一点ありまして、
>> 先ほどにも書いた、 https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax
>> こちらのスクリプト上で、cookieにX-CSRFTokenをセットしているように見受けられるのですが、
>>
>>   xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
>>
>> 確認してみたところ実際のリクエストには、cookieにはX-CSRFTokenはnullとなっておりました。
>>
>> 原因の一因となるのかすら分かりませんが、よろしくお願いします。
>>
>>
>>
>>
>>
>>
>> 2012年8月31日金曜日 17時53分13秒 UTC+9 Toru Tomita:
>>>
>>> ”403”はhttp status
>>>
>>> codeであり、開発環境はdjangoのframeworkのwebserverで動いていたのであれば、デプロイ環境のApacheの設定におかしいところが在るのではないでしょうか?
>>>
>>> http://ja.wikipedia.org/wiki/HTTP_403
>>>
>>>
>>> どのような環境で動かされているのか不明なため、原因の推測が今案最低限、開発環境、動作環境(apacheデプロイ環境)などを記載頂かないと回答が難しいです。
>>>
>>> ※技術系メーリングリストで質問方法
>>> http://www.hyuki.com/writing/techask.html
>>>
>>>
>>> 2012/8/31 tonpa <oniku.w...@gmail.com>:
>>> > こんにちわ
>>> >
>>> > 先日もお世話になったtonpaです。
>>> >
>>> > django1.3で以下の用にPOSTをしたところ、403で返ってきてしまっているようです。
>>> >
>>> > // post
>>> > $.post("/detail", {id: id} , function(data) { callback })
>>> >
>>> > // view
>>> > def detail(request):
>>> >     if request.is_ajax():
>>> >         if request.method == 'POST':
>>> >             detail = Model.objects.get(id=csrf(request.POST['id']))
>>> >             return render_to_response('detail.html',
>>> >                                 {'detail': detail},
>>> >
>>> > context_instance=RequestContext(request))
>>> >
>>> > また、以下に記載されているサンプルをコピーして読み込んでおります。
>>> > https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax
>>> >
>>> > 開発環境で開発中のときは期待通の動作をしておりましたが、
>>> > apacheにデプロイしてからは、403を返すようになってしまいました。
>>> >
>>> > 原因追及にご協力いただけませんでしょうか。
>>> >
>>> > よろしくお願いいたします。
>>> >
>>> >
>>> > --
>>> > ----------------- http://djangoproject.jp/ -----------------
>>> > You received this message because you are subscribed to the Google
>>> > Groups
>>> > "django-ja" group.
>>> > To post to this group, send email to djan...@googlegroups.com
>>> > To unsubscribe from this group, send email to
>>> > django-ja-...@googlegroups.com
>>> > For more options, visit this group at
>>> > http://groups.google.com/group/django-ja
>>
>> --
>> ----------------- http://djangoproject.jp/ -----------------
>> You received this message because you are subscribed to the Google Groups
>> "django-ja" group.
>> To post to this group, send email to djan...@googlegroups.com
>> To unsubscribe from this group, send email to
>> django-ja-...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/django-ja
>
> --
> ----------------- http://djangoproject.jp/ -----------------
> You received this message because you are subscribed to the Google Groups
> "django-ja" group.
> To post to this group, send email to django-ja@googlegroups.com
> To unsubscribe from this group, send email to
> django-ja-unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/django-ja

-- 
-----------------                       http://djangoproject.jp/                
         -----------------
You received this message because you are subscribed to the Google Groups 
"django-ja" group.
To post to this group, send email to django-ja@googlegroups.com
To unsubscribe from this group, send email to 
django-ja-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/django-ja

メールによる返信