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:
>
> 下記の設定は既に設定済みでしようか?
>
>    1. 
>    
>    Add the middleware'django.middleware.csrf.CsrfViewMiddleware' to your 
>    list of middleware classes, 
> MIDDLEWARE_CLASSES<https://docs.djangoproject.com/en/1.3/ref/settings/#std:setting-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 decorator
>    django.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 <javascript:>> 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<javascript:>
> To unsubscribe from this group, send email to 
> django-ja-...@googlegroups.com <javascript:>
> 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

メールによる返信