Django REST Framework Web登录不起作用

时间:2018-10-24 17:10:01

标签: python django django-rest-framework django-views

我似乎无法弄清楚为什么我在Django项目中的其余框架登录无法正常工作...我在那里找到了登录链接,所有链接确实将我重定向到其余登录页面,但在填充后在我的凭据中,然后单击“登录”,它仅使我返回到我来自的页面,但它似乎没有对我进行身份验证,因为它仍在右上角显示“登录” ...

This is the login button I am talking about.

在这种情况下,由于我尝试使用名为“ admin”的超级用户登录,因此我希望将其更改为“ admin”。

我肯定会丢失一些东西。

这是我的REST URL

path("rest/auctions", auction_list, name="auction-list"),
path('rest/auctions/<int:pk>', auction_detail, name="auction-detail"),
path('rest-auth/', include('rest_framework.urls', namespace='rest_framework')),

我知道的rest-auth /是某种以某种方式添加了登录按钮的按钮(全部?(魔术?)。)但是也许我还必须做其他事情才能使它进行身份验证?我不知道...我正在使用内置的django身份验证系统和用户模型。

views.py

@api_view(['GET'])
def auction_list(request, format=None):
    if request.method == 'GET':
        query = request.GET.get('q')
        if query is not None:
            auctions = Auction.objects.filter(Q(title__icontains=query), deadline__gte=timezone.now(),
                                              status=Auction.STATUS_ACTIVE)
        else:
            auctions = Auction.objects.all()
        serializer = AuctionSerializer(auctions, many=True, context={'request': request})
        return Response(serializer.data)

serializer.py

class AuctionSerializer(serializers.ModelSerializer):
    winning_bid = serializers.SlugRelatedField(many=False, read_only=True, slug_field='amount', allow_null=True)
    seller = serializers.SlugRelatedField(many=False, read_only=True, slug_field='username', allow_null=False)

    class Meta:
        model = Auction
        fields = ('id', 'url', 'title', 'description', 'deadline', 'min_price', 'winning_bid', 'seller')

在我的 Settings.py

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticatedOrReadOnly'
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
    ],
}

最后我可以提到通过邮递员使用API​​时身份验证有效。

2 个答案:

答案 0 :(得分:2)

您应该从settings.py中删除BasicAuthentication,它应该可以正常工作。 BasicAuthentication通过base64对用户登录信息进行编码并将其附加到HTTP Authorization Header来工作。这就是您通过邮递员的请求正常工作的原因。

默认情况下,Django使用基于会话的身份验证,一旦用户登录,该身份验证将依赖客户端上的cookie来存储用户会话信息。显然,用户名和密码不会通过BasicAuthentication存储在cookie中。

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticatedOrReadOnly'
    ],
}

答案 1 :(得分:0)

如果没有在解决方案之上工作的人,也添加此行

'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication',
),