我有一个Web项目,后端用django
编码,前端用react
编码。
在我的项目中,我想创建一个特殊用户的订单,所以项目的这一部分需要知道用户,但当我使用request.user
时,它返回AnonymousUser
。
以下是react
、axios
代码和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)
- 为了写一个干净的代码,我没有在我的问题中写前端代码和后方法代码。
- 请帮助检索用户对象并创建订单。
2条答案
按热度按时间txu3uszq1#
REST API是无状态的,不在用户会话中。所以没有用户登录,Django返回给你匿名用户。您必须在post参数中传递用户
xghobddn2#
正如@stefano提到的,REST是无状态的。默认情况下,request.user将是 AnonymousUser,因为Django不会隐式地知道发出请求的用户。如果这个特殊用户是常量,你可以创建一个小的helper函数来返回它。
然后在视图中调用此函数。否则,您必须设置身份验证。我推荐django rest auth