見出し画像

APIをつかってみる

フロントエンドをAPIを通して、データをもらってくるという方法を学ぶ。
ゲット方式:
例えば、あるサイトをみているときに、そのURLの情報を送って!というリクエストをする方法。データを要請するときに使う。ひっぱってくるイメージかな。
例)天気のデータを見る、とか。
ポスト方式:
という方法があるらしい。コンピュータ同士がやりとりする方式。
データを作る時、削除するとき、会員登録をするときにつかう。

htmlのファイルはフロントエンドファイル
Pythonのデータはバックエンドのファイル

ふむふむ。

from flask import Flask,render_template,request,jsonify
app = Flask(__name__)

@app.route('/')
def home():
   return render_template('index.html')

@app.route('/test', methods=['GET'])
def test_get():
   title_receive = request.args.get('title_give')
   print(title_receive)
   return jsonify({'result':'success', 'msg': 'これはGETリクエスト'})

”ゲットメソッドというものを使ってデータを貰う。このときの窓口が、「/test」。「title_give」というものは、このデータがあればタイトルレシーブという変数の中に入れる、という意味。それで、print(title.receive)で確認してみる、、、という意味。”
フロントエンドにデータを送る必要があるが、jsonifyのかっこの中身だそう。

えーわかんねぇす。
とりあえず、htmlのほうにも、コードを打つ。

<script> function hey(){ fetch("/test").then(res => res.json()).then(data => { console.log(data) }) } </script>

/testというURLに要請を送って、もらってきたデータをコンソールタブに表示させる、の意味。

それで、サイトを見てみると…なるほど、コンソールの方に表示されてる。

ポスト方式について

from flask import Flask,render_template,request,jsonify
app = Flask(__name__)

@app.route('/')
def home():
   return render_template('index.html')

@app.route('/test', methods=['POST'])
def test_post():
   title_receive = request.form['title_give']
   print(title_receive)
   return jsonify({'result':'success', 'msg': 'これはPOSTリクエスト'})

if __name__ == '__main__':
   app.run('0.0.0.0',port=5000,debug=True)

”/testを通して、title_giveというデータをもらったら、まずはプリントした後に、リターンをつかって、htmlファイルにデータを送る、
というコードになっている”らしいです。はい。

次にhtmlにfetchコードを貼り付ける。

    <script>
        function hey(){
            let formData = new FormData();
formData.append("title_give", "ブラックパンサー");

fetch("/test", { method: "POST", body: formData }).then(res => res.json()).then(data => {
    console.log(data)
})
        }
    </script>

ゲットは、あるデータをみるだけ、要請するだけだけど、ポストはデータを変更したりするから、フロントエンドでデータを指定する必要がある、ってことらしい。FromDataがそうらしい。

このFromDataというところにデータをいれて、/testを通して送る。
バックエンドのコードを見ると、タイトルギブでもらったデータをプリントする、というものがあるので、htmlで指定したデータが正しく表示されるかも要確認。

なんかブラックパンサーが表示された。

127.0.0.1 - - [27/Oct/2023 12:26:16] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Oct/2023 12:26:18] "POST /test HTTP/1.1" 200 -
ブラックパンサー
192.168.10.108 - - [27/Oct/2023 12:27:09] "GET / HTTP/1.1" 200 -
192.168.10.108 - - [27/Oct/2023 12:27:09] "GET /favicon.ico HTTP/1.1" 404 -

コンソールでも、できてるっぽい。


でも難しいなー。。。あー。難しい。
理屈はわかってきたけど。

おさらい

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <title>Document</title>

    <script>
        function hey(){
            let formData = new FormData();
formData.append("title_give", "ブラックパンサー");

fetch("/test", { method: "POST", body: formData }).then(res => res.json()).then(data => {
    console.log(data)
})
        }
    </script>
</head>
<body>
<h1>初のWebページ</h1>
    <button onclick="hey()">私はボタン!</button>
</body>
</html>

まず、フロントエンドのhtmlコードを見る。
heyという関数。ボタンを押したらこの関数が作動。これはわかる。
ボタンをおしたことで、”ブラックパンサー”というデータが生まれる。
このブラックパンサーは、/testという窓口を通してバックエンドに送られる。

from flask import Flask,render_template,request,jsonify
app = Flask(__name__)

@app.route('/')
def home():
   return render_template('index.html')

@app.route('/test', methods=['POST'])
def test_post():
   title_receive = request.form['title_give']
   print(title_receive)
   return jsonify({'result':'success', 'msg': 'これはPOSTリクエスト'})

if __name__ == '__main__':
   app.run('0.0.0.0',port=5000,debug=True)

バックエンドでは、title_receiveという変数がふくまれているので、それをプリントする。つぎにフロントエンドに表示させる文字’これはPOSTリクエスト’を送り返す。

そして、フロントデータに送られたデータはfetchをとおして、データという中に含まれる、ということらしい。

    <script>
        function hey(){
            let formData = new FormData();
formData.append("title_give", "ブラックパンサー");

fetch("/test", { method: "POST", body: formData }).then(res => res.json()).then(data => {
    console.log(data)
})
        }
    </script>

難しいけど、イメージはわかった・・・

ポスト形式は複雑だな。あたりまえか。ゲットは引き出すだけだけど。
ポストは書き換えとかするもんね。そうだよね。

この記事が気に入ったらサポートをしてみませんか?