2017-07-19 5 views
1

私は私の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で

+0

あなたのコードにこの行 'console.log(csrftoken);'を付けてcsrfトークンを印刷することができます。あなたがget要求をしたときにどうなるのですか? –

+0

yeah csrftokenが正常に印刷されました。最近、問題に応答オブジェクトを追加します。 – honesty1997

+0

と、request.userの下のビュー機能でユーザーを印刷するとどうなりますか? – hansTheFranz

答えて

1

は、あなたがfetchを使用するときに資格情報が含まれています。

+0

これはうまくいきました。なぜ私はまだこのエラーメッセージ "SyntaxError(DOM Exception 12):文字列が期待されたパターンと一致しませんでした。投稿後に既に成功しました – honesty1997

+0

申し訳ありません、私のPython/DjangoはJavaScriptよりもはるかに優れています。 – Alasdair

+0

まだありがとうございます。あなたの答えは本当に役に立ちます。 – honesty1997

関連する問題