0

X-CSRFToken ヘッダーを渡すか、POST データで csrfmiddlewaretoken をビューに送信すると、ajax ハンドラーが完全にスキップされ、インデックス/ベース ビューに直接移動します。

Javascript:

$.post("/action/register", {
          name: $('#input_name').val(),
          email: $('#input_email').val(),
          csrfmiddlewaretoken: '{{ csrf_token }}'

        }, function(data) {
          var response;
          try {
            response = JSON.parse(data.toString());  
          } catch(e) {
            response = {"status":"error", "message":"Please try again later, we're having some tech issues!"};
          }

          // ... process some stuff, the callback works which is good

意見:


def handle_register(req):
    ''' Request handler pyfor registration, should return JSON for the AJAX request. '''

    if req.is_ajax():
        return validate_and_register(req)
    else:
        return HttpResponse('{"status":"error","message":"Invalid request."}')

urls.py:


from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^action/register$', 'views.handle_register', name='handle_register'),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^.*$', 'views.handle_home', name='handle_home'),
)

ヘッダーを渡さないと、403 (CSRF_VERIFICATION_FAILED) が返されます。適切なヘッダー (複数のブラウザーで確認済み) を渡すと、/action/register ハンドラーをスキップし、「handle_home」ビューに直接移動します。

私は立ち往生しています!

4

2 に答える 2

0

これは、URL にスラッシュがないことが原因である可能性があります

/アクション/登録

URL と JavaScript にスラッシュを追加してみてください。

別の推測は次のようになります。

「views.handle_register」

アプリ名がありませんか?

より安全なのは、逆の URL を使用することです。

from django.core.urlresolvers import reverse

url = reverse('appname.views.handle_register')

$.post(url, {}, func...
于 2012-12-07T21:02:00.533 に答える
0

これはnginxの問題でした。django/nginx のセットアップ ドキュメントによると、nginx の設定でこれが欠落していることがわかりました。

        fastcgi_split_path_info ^()(.*)$;
于 2012-12-07T21:02:53.110 に答える