私は私のwebsite.Whenで私は、ビュー機能でユーザーオブジェクトを取得したいと思ったときに、私はこの "AnonymousUser"エラーを持ってdjangoバックエンドにjsonデータを送信しようとしています。 以下は私のコードです:djangoを使用しているときにajax呼び出しでrequest.userを渡す方法は?
マイAPIビュー:
@api_view(['GET','POST'])
def add_vote(request):
if request.method =='POST':
#I think this is where I can't figure out a way to deal with
user = request.user
serializer = VoteSerializer(data=request.data)
if serializer.is_valid():
instance = serializer.save(creator=user)
return redirect(instance)
return Response(serializer.errors)
if request.method == 'GET':
votes = VoteTitle.objects.all()
serializer = VoteSerializer(votes,many=True)
print(request.user)
return Response(serializer.data)
これは私の送信機能(反応クラスの機能):Djangoのバックエンドに示す
sent_json(){
let send_json = {
title:this.state.title,
subjects:[],
};
send_json.subjects = this.state.subjects.map((object) => ({name:object}));
send_json = JSON.stringify(send_json);
console.log(send_json);
let csrftoken = Cookies.get('csrftoken');
console.log(csrftoken);
let header = {
"method":'POST',
"body" :send_json,
"headers":{
"X-CSRFToken": csrftoken,
"Accept": "application/json",
"Content-Type": "application/json",
}
};
fetch('http://127.0.0.1:8000/voteapp/add/',header).then(function(response){
console.log(response);
return response.json();
}).then(function(response){
console.log(response);
}).catch(function(error){
alert(error);
});
}
エラーメッセージ:
Internal Server Error: /voteapp/add/
Traceback (most recent call last):
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner
response = get_response(request)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/rest_framework/views.py", line 489, in dispatch
response = self.handle_exception(exc)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/rest_framework/views.py", line 449, in handle_exception
self.raise_uncaught_exception(exc)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/rest_framework/views.py", line 486, in dispatch
response = handler(request, *args, **kwargs)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/rest_framework/decorators.py", line 52, in handler
return func(*args, **kwargs)
File "/Users/phil/Desktop/Web-Development/mini-blog/blog/voteapp/views.py", line 19, in add_vote
instance = serializer.save(creator=user)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/rest_framework/serializers.py", line 215, in save
self.instance = self.create(validated_data)
File "/Users/phil/Desktop/Web-Development/mini-blog/blog/voteapp/serializers.py", line 17, in create
vote = VoteTitle.objects.create(**data)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/db/models/query.py", line 397, in create
obj = self.model(**kwargs)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/db/models/base.py", line 537, in __init__
setattr(self, field.name, rel_obj)
File "/Users/phil/Desktop/Web-Development/mini-blog/env/lib/python3.5/site-packages/django/db/models/fields/related_descriptors.py", line 211, in __set__
self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x1045995f8>": "VoteTitle.creator" must be a "User" instance.
警告メッセージ:
ブラウザでSyntaxError (DOM Exception 12): The string did not match the expected pattern.
エラーメッセージ:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
私はすでにログインしていると確信していたので、私が何かを見逃している必要があります。 Djangoのビューで
let header = {
"method":'POST',
"body": send_json,
"credentials": 'include',
"headers":{
"X-CSRFToken": csrftoken,
"Accept": "application/json",
"Content-Type": "application/json",
}
};
あなたはすでにやっているとして、あなたはrequest.user
を使用する必要があります。あなたはJavaScriptで
あなたのコードにこの行 'console.log(csrftoken);'を付けてcsrfトークンを印刷することができます。あなたがget要求をしたときにどうなるのですか? –
yeah csrftokenが正常に印刷されました。最近、問題に応答オブジェクトを追加します。 – honesty1997
と、request.userの下のビュー機能でユーザーを印刷するとどうなりますか? – hansTheFranz