Как правильно создать json-ответ вошедшего пользователя для react
Я начал пробовать react и попытался просто получить информацию о вошедшем пользователе, но, похоже, это не работает. У меня есть представление Django для отображения данных пользователя:
def user_details_view(request, *args, **kwargs): #REST API for detailing some basic info about the user that is using the system at the moment
current_user = request.user
id = current_user.id
try:
obj = CustomUser.objects.get(id=id)
data =obj.serialize()
except:
#data['message'] = "Not Found"
status = 404
return JsonResponse(data)
Я установил это представление в urls и если я обращаюсь к нему, то получаю нужные мне данные. Однако, когда я пробую его на react, я получаю внутреннюю ошибку сервера. Вот код на данный момент:
function loadUserInfo(callback){
const xhr = new XMLHttpRequest();
const method = 'GET';
const url = "http://127.0.0.1:8000/userdetails/";
const responseType = "json";
xhr.responseType = responseType; // Let the xhr request know that its getting a json
xhr.open(method, url); //This opens the request with the method and url entered
xhr.onload = function(){
console.log("This is the response: ",xhr.response)
callback(xhr.response, xhr.status)
}
xhr.onerror = function(){
callback({"message":"The request was an error"}, 400)
}
xhr.send();//Trigger that request
}
function App() {
const [info, setinfo] = useState(null)
useEffect(()=>{
const myCallBack = (response,status)=>{
console.log(response,status)
if (status === 200){
setinfo(response)
}
}
loadUserInfo(myCallBack)
},[])
Я разобрался с cors и allowed hosts в файле settings.py, поэтому я не получаю этих проблем. Что я получаю в журнале сервера django, так это:
UnboundLocalError: local variable 'data' referenced before assignment
Я удалил блоки try, так как они могут быть немного лишними в настоящее время, но я получаю другую ошибку:
Restaurant_Project/venv/lib/python3.9/site-packages/django/db/models/query.py", line 435, in get
raise self.model.DoesNotExist(
accounts.models.CustomUser.DoesNotExist: CustomUser matching query does not exist.
Эта же ошибка возникает, если я обращаюсь к урлу просмотра, не войдя в систему. Я хотел бы знать, какой лучший способ передать информацию о пользователе, которую я хочу получить в реакции.
Причина UnboundLocalError
заключается в том, что данные не определяются, если происходит исключение.
Измените строки на:
def user_details_view(request, *args, **kwargs): #REST API for detailing some basic info about the user that is using the system at the moment
current_user = request.user
id = current_user.id
data = dict()
status = 200
try:
obj = CustomUser.objects.get(id=id)
data = obj.serialize()
except:
data['message'] = "Not Found"
status = 404
return JsonResponse(data, status=status)