为什么django restframework api不能与LocaleMiddleware一起使用?

时间:2015-11-04 09:16:03

标签: angularjs django django-rest-framework

我有一个drf api" POST / api / session /"登录

我使用angularjs来做那个

$resource('/api/sessions/:id/').save()

首先eveything是好的,直到我添加LocaleMiddleware

setting.py:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

LANGUAGE_CODE = 'zh-cn'
LANGUAGES = (
  ('en', 'Engilsh'),
  ('zh-cn', u'简体中文'),
)

url.py

urlpatterns = i18n_patterns('',
url(r'^sessions', 'rest_framework_jwt.views.obtain_jwt_token'),
)

当我再次尝试呼叫$resource('/api/sessions/:id/').save()时,Django控制台说

[04/Nov/2015 09:09:51] "POST /api/sessions/ HTTP/1.1" 302 0

[04/Nov/2015 09:09:51] "GET /zh-cn/api/sessons/ HTTP/1.1" 405 45

这意味着LocaleMiddleware将我的请求从/api/sessions/重定向到/zh-cn/api/sessons/,但是" POST"到" GET"我的请求错误。

如何停止LocaleMiddleware修改" POST"到" GET"?

2 个答案:

答案 0 :(得分:0)

如果您不想使用其余框架网址的语言前缀,请将其移至i18n_patterns之外。在您的urls.py中,您可以将i18n_patterns与常规的网址格式列表结合使用。

urlpatterns = [
    url(r'^sessions', 'rest_framework_jwt.views.obtain_jwt_token'),
    ...
]

urlpatterns += i18n_patterns(
   # note the '' isn't necessary in Django 1.8+ 
   # your patterns that you do want to internationalize go here
)

有关详细信息,请参阅language prefix in URL patterns上的文档。

答案 1 :(得分:0)

“$ resource('/ api / sessions /:id /')。save()”错了!应该更改为“$ resource('api / sessions /:id /')。save()”,首先斜杠make url错误