SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Pythonで学ぶバックエンド開発

【PythonとJavaScriptのデータ連携】座標をPOSTしてSQLiteへ保存する総仕上げ

Pythonで学ぶバックエンド開発 第8回

お絵描きデータをPOSTする

 HTMLのフォームにある送信ボタンが押された際、JavaScriptを使用して、お絵描きデータをdrawページ自身へPOST送信する処理を作成します。 ここであえてJavaScriptを介在させる理由は、お絵描きのベジェ曲線データがクライアントサイド(main.js内の変数)で保持されているためです。フォーム送信時にこのデータを動的に含める必要があります。

お絵描きした作者とコメント入力欄
お絵描きした作者とコメント入力欄

「js」→「main.js」ファイルを実装する

 js/main.jsファイルにpostForm関数を追加し、POST処理を実装します。具体的には、JavaScriptを用いて<form name="myform">内に隠しフィールド(<input type="hidden">)を動的に生成し、そこにお絵描きデータをセットして送信します。

サンプルコード「js」→「main.js」ファイル
(前略)
// 絵をPOSTする
function postForm(event) {
  let form = document.myform;
  let request = document.createElement('input');
  let xy = _pos[0].toString();
  for ( let i = 1; i < _current*4; i++ ) xy += "," + _pos[i];

  request.type = 'hidden';
  request.name = 'xy';
  request.value = xy;

  form.appendChild(request);
  form.submit();
}

サンプルコードの解説

 <form>タグの「name」がmyFormを「form」変数に代入します。

 お絵描きデータを文字列にして「xy」変数に代入します。

 <input>タグを「request」変数に代入し非表示にし、nameを'xy'にし、「value」にxy変数を代入します。

 form変数の子にrequest変数を追加し、「submit(登録)」してPOSTを実行します。

「pages」→「draw.py」ファイルを実装する

 「pages」→「draw.py」ファイルを次のように追記し、タイトルと名前とコメントとお絵描きデータをPOSTするフォームをHTML5文書に出力します。イベントリスナーでボタンがクリックされたらmain.jsファイルのpostForm関数を呼び出してPOSTします。

サンプルコード「pages」→「draw.py」ファイル
def html(form,con,cur):
  print('''
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>お絵描き - 一筆書きBBS</title>
  <link href="css/pc.css" rel="stylesheet" type="text/css" />
  <link href="css/mobile.css" rel="stylesheet" type="text/css" media="only screen and (max-width:1023px)" />
  <script type="text/javascript" src="js/main.js"></script>
</head>
<body>

<div id="left">
  <header>
    <h1>お絵描き</h1>
    <nav>
      <a href="?page=home">HOME</a>
      <a href="?page=draw">DRAW</a>
      <a href="?page=about">ABOUT</a>
    </nav>
  </header>

  <h2>記事投稿</h2>
  <form name="myform" method="post" action="?page=draw">
    <input placeholder="ここにタイトルを書く。" name="title" />
    <input placeholder="お名前" name="speaker" />
    <textarea placeholder="ここにコメントを書く。" name="sentence"></textarea>
    <button name="btn">送信</button>
  </form>

  <h2>操作方法</h2>
  <ul>
    <li>クリック&ドラッグで曲線を描けます。</li>
    <li>マウスホイールでアンドゥやリドゥできます。</li>
    <li>「送信」で絵を掲示板に載せられます。</li>
  </ul>

  <script>
    document.myform.btn.addEventListener('click', function(event) {
      postForm(event);
    });
  </script>
''')

サンプルコードの解説

 <form>タグで「index.py?page=draw」にPOSTを用意します。

 POSTに使うタイトルの"title"パラメータを<input>で作ります。

 POSTに使う発言者の"speaker"パラメータを<input>で作ります。

 POSTに使うコメントの"sentence"パラメータを<textarea>で作ります。

 送信ボタンを作ります。

 <script>タグでJavaScriptを記述し、送信ボタンが'click'されたらpostForm関数をJavaScriptで呼び出します。

次のページ
お絵描きデータをデータベースに保存する

この記事は参考になりましたか?

Pythonで学ぶバックエンド開発連載記事一覧

もっと読む

この記事の著者

大西 武(オオニシ タケシ)

 1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書などを30冊以上商業出版する作家。ドコモでグランプリなどコンテストに20回以上入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」がTVで約10回出題。プロフィールサイト:https://profile.vixar.jp

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22091 2025/12/04 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング