前提・実現したいこと
Flask APIでユーザーIDとパスワードを渡し、トークンをもらいPOSTにて付加したい。
環境
OS:windows10 64bit
language:Python3.7
tool:VScode,Anaconda
textEditor:VSCode
VSCode:RestfulClientインストール済み使用(GETPOST送信テスト)
行った内容
①開発準備 cd
(envs_2019) D:\ProgramData\Anaconda3\envs\envs_2019>
②Directory構成
D:\ProgramData\Anaconda3\envs\envs_2019>
envs_2019フォルダ
┗api_testフォルダ
┗api.py
┗dataフォルダ
┗__init__.py
┗requirement.txt
┗call.http
┗test.png
③flask と flask_restful インストール
参考サイト1
参考サイト2
(envs_2019) D:\ProgramData\Anaconda3\envs\envs_2019>pip install flask flask_restful
④Local仮想サーバー立て
(envs_2019) D:\ProgramData\Anaconda3\envs\envs_2019\api_test>set FLASK_APP=api.py
(envs_2019) D:\ProgramData\Anaconda3\envs\envs_2019\api_test>set FLASK_ENV=development
(envs_2019) D:\ProgramData\Anaconda3\envs\envs_2019\api_test>flask run
⑤VScodeにてRestClientをインストール
参考サイト3
⑥api.pyの中身は以下
該当のソースコード
python
1from flask import Flask, jsonify, request 2import bleach 3 4app = Flask(__name__) 5 6TOKEN = 'YOUR_TOKEN' 7 8@app.route('/api/v1/user', methods=['POST']) 9def add_user(): 10 # check token 11 header = request.headers.get('Authorization', None) 12 if header is not None: 13 _, token = header.split() 14 if token != TOKEN: 15 return jsonify({'Forbidden': 'Access is denied'}), 403 16 else: 17 return jsonify({'Forbidden': 'Access is denied'}), 403 18 19 # method check 20 if request.method != 'POST': 21 return jsonify({'Method Not Allowed': 'Method is invalid.'}), 405 22 23 # create new user 24 new_user = {} 25 for key in request.form.keys(): 26 new_user[key] = bleach.clean(request.form.get(key)) 27 28 # save uploaded file into data folder 29 for file in request.files: 30 if file is None: 31 break 32 upload_file = request.files.get(file) 33 # upload_path = 'data/%s' % upload_file.filename 34 upload_path = '..\work\%s' % upload_file.filename 35 upload_file.save(upload_path) 36 new_user[file] = upload_file.filename 37 all_directory = '..\work\' 38 return jsonify(upload_file.filename) 39 40if __name__ == '__main__': 41 app.run(debug=True) 42
⑦call.httpの中身は以下
Python
1POST http://localhost:5000/api/v1/user 2Authorization: Bearer YOUR_TOKEN 3Content-Type: multipart/form-data; boundary=HOGEHOGEBOUNDARY 4 5--HOGEHOGEBOUNDARY 6Content-Disposition: form-data; name=user_name 7 8SAKAMOTO RYOMA 9--HOGEHOGEBOUNDARY 10Content-Disposition: form-data; name=user_email 11 12ryoma.sakamoto@... 13--HOGEHOGEBOUNDARY 14Content-Disposition: form-data; name="file"; filename="test1.pdf" 15Content-Type: application/octet-stream 16 17< ./test1.pdf 18--HOGEHOGEBOUNDARY--
⑧VSCodeのRestClientツールの使用:call.httpをVSCodeにて開き、Send Request実行クリック(API送信テスト)
試したこと
特に試そうとしたサイト
いろいろなサイトを調べているのですが、Authorization: Bearer YOUR_TOKENの書き方について言及されている箇所がなく困っています。
JWTですと記載法が変わってしまうかもしれませんが、ユーザーネームとPWからトークンを渡せればゴールとしてはよいかと思っておりまして、bearerが一番知りたいですが他記載法などご教授頂けないでしょうか。
よろしくお願い致します。
(途中teratailの質問ボタン押したところなぜか全消えしまして再度書き直しております。もし文としておかしな場所あればご指摘お願い致します。。)
他参考サイト
https://qiita.com/y-miine/items/d9f2168fe72a1e29c91f
https://qiita.com/tesstesstex/items/90b9488dc337dbb535c0
https://tools.ietf.org/html/rfc7578
API:https://github.com/yukkyo/simple-ml-api/blob/master/run_server.py
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。