質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5638閲覧

Django Authentication credentials were not provided. と表示される

Kch1221

総合スコア31

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/18 01:08

編集2020/01/18 01:27

前提・実現したいこと

Django REST framework で API を作成していて、
スマホアプリからPOST,DELETEなどのアクションをできるようにしています
(Alamofire 使用)

発生している問題・エラーメッセージ

POST や DELETE をするときには Token Authentication を header に追加して認証をするようにしているのですが

DELETE の時だけ

["detail": Authentication credentials were not provided.]

というエラーが発生しています。(POST は問題なくできる)

該当のソースコード

swift

1let url = (任意のURL) 2let headers: HTTPHeaders = [ 3 "Contenttype": "application/json", 4 "Authorization": "Token (トークン)", 5] 6Alamofire.request(url, method: .delete, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { response in 7 if let result = response.result.value as? [String: Any] { 8 print(result) 9 } 10}

サーバー側のコードはこのようになっています。
認証はデフォルトの'rest_framework.authtoken'を使用しています

python

1class PostViewSet(viewsets.ModelViewSet): 2 queryset = Post.objects.order_by('-published_date') 3 permission_classes = (IsAuthenticated,IsAdmin,) 4 serializer_class = PostSerializer 5 filter_backends = [DjangoFilterBackend] 6 7 @method_decorator(csrf_exempt) 8 def dispatch(self, *args, **kwargs): 9 return super(PostViewSet2, self).dispatch(*args, **kwargs)

試したこと

POST と同じ Header をつけてるのでうまくいかない理由がわかりません。

###使用環境
macOS Catalina
Django 2.2.9
Python 3
Django Restframework

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

python

1class PostDeleteView(APIView): 2 3 def post(self, request): 4 pk = request.GET.get(key="id", default="0") 5 post = get_object_or_404(Post, pk=pk) 6 post.delete() 7 return Response({'succeeded': True})

というクラスビューを作成して、postで消せるようにしました

投稿2020/01/18 03:34

Kch1221

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

権限周りのエラーのようですね
以下のコードを参考にしてください

REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAdminUser' ), }

投稿2020/01/18 02:11

harinezumi.py

総合スコア282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kch1221

2020/01/18 02:20

回答ありがとうございます settings.py に追加してみたのですがやはり Delete だけは Token を認証してくれないです (Post は問題なくできるんですけど…)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問