【问题标题】:Django Rest framework always return error 400Django Rest 框架总是返回错误 400
【发布时间】:2018-04-17 03:22:24
【问题描述】:

我正在尝试使用 Post 方法,当有人发布正确的用户名和密码时,该方法返回一个令牌进行身份验证,但每次我收到 400 错误(我正在尝试使用 RetroFit for Android)

这是我的网址(我正在使用令牌认证):

from rest_framework.authtoken import views as tmp

from decaught import views

router = routers.DefaultRouter()
router.register(r'devices', views.DeviceViewSet)
router.register(r'users', views.UserViewSet)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include(router.urls)),
    url(r'^api-auth/', tmp.obtain_auth_token),
]

这是我使用改造的方式:

POST方法:

 @POST("/api-auth/")
    Call<Tokken> get_tokken(@Query("username") String username, @Query("password") String password);

登录方式:

 private void signIn() {
        boolean isValid = validate();
        if (isValid) {

            mService.get_tokken(user.getText().toString(), password.getText().toString()).enqueue(new Callback<Tokken>() {
                @Override
                public void onResponse(Call<Tokken> call, Response<Tokken> response) {
                    if (response.isSuccessful()) {

                        System.out.println("Te lo imprimo");
                        System.out.println(response.body().toString());
                        Toast.makeText(LoginActivity.this, "tokken recibido", Toast.LENGTH_SHORT).show();
                    } else {
                        int statusCode = response.code();
                        // handle request errors depending on status code
                    }
                }

                @Override
                public void onFailure(Call<Tokken> call, Throwable t) {
                    Toast.makeText(LoginActivity.this, "Error al recibir tokken", Toast.LENGTH_SHORT).show();

                    t.printStackTrace();
                    Log.d("MainActivity", "error loading from API");

                }
            });
            /*startActivity(new Intent(this, RolSelection.class));*/
        }
    }

但每次我尝试登录服务器时都会收到以下消息:

[2018 年 4 月 16 日 20:56:06]“POST /api-auth/?username=admin&password=admin1234HTTP/1.1”400 79

知道为什么会这样吗?

【问题讨论】:

    标签: python django retrofit


    【解决方案1】:

    在很大程度上,您将设置上的DEBUG 标志设置为False,而您没有设置ALLOWED_HOSTS。当您在调试模式下运行项目时,Django 不检查 ALLOWED_HOSTS,但是当此标志更改为 False 时,Django 比较您的项目主机,如果在 ALLOWED_HOSTS 列表中找不到此主机,则会引发错误 400。

    【讨论】:

    • 对不起,我听不懂你在说什么
    • 在 settings.py 文件中更改 DEBUG = True,如果您的问题已解决,请阅读有关 Django ALLOWED_HOSTS 配置的更多信息。
    • @Green_Sam 一切都好吗?
    猜你喜欢
    • 2019-01-05
    • 2023-03-21
    • 2012-04-02
    • 2016-01-31
    • 2021-12-18
    • 2011-04-11
    • 2021-09-27
    • 2022-08-03
    • 2017-08-21
    相关资源
    最近更新 更多