【问题标题】:Authentication in Django during GET request在 GET 请求期间在 Django 中进行身份验证
【发布时间】:2018-09-19 00:59:35
【问题描述】:

我需要通过 android 应用程序向我的 Django 服务器发出 GET 请求。 问题是这个 GET 函数是用 Django 编写的,带有 @login_required。

我应该做什么样的请求来登录并执行 GET 请求?

我的 API:

from django.shortcuts import render
from django.http import HttpResponse,HttpResponseServerError, HttpResponseBadRequest
from rest_framework.decorators import api_view
from .models import Order, New
import json
from django.shortcuts import render_to_response
from .forms import NewForm
from django.core.files.storage import FileSystemStorage
from django.contrib.auth.decorators import login_required
from .validation import *
from django.views.decorators.csrf import csrf_exempt
@login_required
@api_view(['GET'])
def get_order(request):

    order_list = Order.objects.values("user_name",
                        "user_surname",
                        "order_date").all()

    return HttpResponse(json.dumps([x for x in order_list])

我的 urls.py:

from django.urls import path
from django.conf.urls import url
from . import views

app_name = 'API'
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^order', views.order, name='order'),
    url(r'^get_order', views.get_order, name='get_order')]

和:

from django.contrib import admin
from . import settings
from django.views.static import serve
from django.urls import path, include, re_path
from django.conf.urls.static import static
from API.views import index

urlpatterns = [
    path('API/', include('API.urls',namespace="API")),
    path('admin/', admin.site.urls),
    path('', index, name='index'),
    path(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT})
]

在 Postman 中,我正在使用基本身份验证执行 GET (http://127.0.0.1:8000/API/get_order),收到 302 状态码。

【问题讨论】:

  • 也许你需要用django-rest-framework 构建RESTFul API。 DRF 中有几种客户端身份验证方法,例如。 TokenAuthentication。如果您不想构建 RESTFul API,则需要利用 WebView 来访问您的 django 网站。

标签: android django api get request


【解决方案1】:

我不确定如何在 Android 端 中做到这一点,但基本想法是您应该添加 身份验证凭据 em> 在您的 GET 请求中。

我将使用Python's Requests library向您展示一个相同的示例

from requests.auth import HTTPBasicAuth
import requests

requests.get('http://my/url/end/poin/', auth=HTTPBasicAuth('my_username', 'mypass'))



May be these results will help you to find the answer ;)


更新

1. 转到授权标签
2.选择Basic Auth类型
3. 在各自的文本框中提供您的usernamepassword
4. 点击发送按钮

UPDATE-2
改变你的看法如下

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response


@permission_classes((IsAuthenticated,))
@api_view(['GET'])
def get_order(request):
    order_list = Order.objects.values("user_name",
                                      "user_surname",
                                      "order_date").all()

    return Response(data=[x for x in order_list])

【讨论】:

  • 谢谢,但不幸的是我收到了状态错误 HTTP/1.1" 302 0
  • 请在问题中添加相应的视图
  • 似乎您将普通的 Dango 视图与 DRF 视图混合在一起。请同时添加 imports 语句
  • 并且,添加你的 urls.py
  • 为了测试目的,注释掉所有 url 模式 除了 path('API/'.....)url('get_order'.....) 然后在 Postman 中尝试
猜你喜欢
  • 2014-03-17
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 2014-09-15
  • 2018-07-13
相关资源
最近更新 更多