reactjs request.user在react、django和rest框架的项目中返回AnonymousUser

xwbd5t1u  于 2023-06-05  发布在  React
关注(0)|答案(2)|浏览(124)

我有一个Web项目,后端用django编码,前端用react编码。
在我的项目中,我想创建一个特殊用户的订单,所以项目的这一部分需要知道用户,但当我使用request.user时,它返回AnonymousUser
以下是reactaxios代码和views.py带有rest_framework的www.example.com:

react代码

// Hook to save game id and price
    const [all, setAll] = useState({'game': 0, 'price': 0});
    
    // get state
    const location = useLocation();
    const state = location.state;
    
    useEffect(() => {
        setAll({'game': state[0]}, 'price': suggestion);
    }, [])
    
        // To check user confirm suggestion and make order api.
    const orderApi = async (e) => {
        e.preventDefault();
        try {
            // console.log({'state': state[0], 'suggestion': suggestion});
            console.log(all);
            const {status} = await axios.post('http://127.0.0.1:8000/api-1/order/create/', all);
            if (status === 201) {
                console.log('created');
            }
        } catch (err) {
            console.log(err)
        }
    }

views.py

from rest_framework import status
from rest_framework.response import Response
from . import serializer
from rest_framework.decorators import api_view
from . import models
from game.models import Game

@api_view(['GET', 'POST'])
def orderCreate(request):
    
    # Here my program return AnonymousUser
    print(str(request.user) + '\n')
    
    if request.method == 'POST':
            .......
            
    orders = models.Order.objects.all()
    serialized = serializer.OrderSerializer(orders, many=True)

    return Response(serialized.data, status=status.HTTP_200_OK)
  • 为了写一个干净的代码,我没有在我的问题中写前端代码和后方法代码。
  • 请帮助检索用户对象并创建订单。
txu3uszq

txu3uszq1#

REST API是无状态的,不在用户会话中。所以没有用户登录,Django返回给你匿名用户。您必须在post参数中传递用户

xghobddn

xghobddn2#

正如@stefano提到的,REST是无状态的。默认情况下,request.user将是 AnonymousUser,因为Django不会隐式地知道发出请求的用户。如果这个特殊用户是常量,你可以创建一个小的helper函数来返回它。

def get_special_user():
    special_user_id = 1
    return User.objects.get(id=special_user_id)

然后在视图中调用此函数。否则,您必须设置身份验证。我推荐django rest auth

相关问题