Пытается опубликовать некоторую информацию в API DRF, но встречает ошибку 403, используя запросы Python - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь получить доступ к своему API-интерфейсу DRF и пытаюсь пройти аутентификацию на своем API, но я не могу опубликовать свое имя пользователя / пароль (Данные), поскольку я получаю ошибку HTTP 403 до того, как получаю Запрещенный (файл cookie CSRF не set.) ошибка, затем я изменил свое представление на представление класса DRF, теперь я застрял на этой ошибке, не в состоянии что-либо POST в мой API

ЗАПРОСЫ (вне проекта Джанго)

payload = {'username': 'user', 'password': '****'}

r = requests.get('http://website/api/login/', data=payload) 

URLs

app_name = 'api'
urlpatterns = [
    url(r'^login/$', views.login_to_api.as_view(), name = "login_to_api"),

Просмотры

class CustomerListAPIView(generics.ListAPIView):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer

class CustomerRetrieveAPIView(generics.RetrieveAPIView):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer

class login_to_api(APIView):

    def post(self, request):
        if request.method == "POST":
            (logic)

HTML

<form id="login-form" method="post" action="{% url 'api:login_to_api' %}" >
            {% csrf_token %}
            <table class="table">
                <tr>
                    <td><label >Username</label></td>
                    <td><input id="username" name="username" type="text" class="form-control"></td>
                </tr>
                <tr>
                    <td><label >Password</label></td>
                    <td><input id="password" name="password" type="password" class="form-control"></td>
                </tr>
            {%csrf_token%}
            </table>

            <input type="submit" value="Login" class="btn btn-primary pull-right" />

Настройки


REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        #'rest_framework.authentication.SessionAuthentication',
    )#,'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', )
}



REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Любая помощь будет принята с благодарностью

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Я исправил это, удалив is_authenticated из настроек


REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (

        'rest_framework.authentication.SessionAuthentication',
    ),
}

и в представлениях ставьте permission_classes = (IsAuthenticated,) в каждом из классифицированных представлений на основе, отличных от представления входа в систему, поэтому я смог опубликовать свои учетные данные в представлении для входа в систему и в логике моих запросов создал сеанс, а затем перешел к просмотр логина, а затем запросил любые другие необходимые представления

1 голос
/ 25 июня 2019

Вы неправильно используете модуль запросов Python.

import requests
from requests.auth import HTTPBasicAuth

auth = HTTPBasicAuth(username='user', password='****')
api_url = 'http://website/api/some/list/api/'

r = requests.get(url=api_url, auth=auth)

Ссылка: базовая аутентификация с использованием requests

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...