やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Pythonで簡単なローカルWebサーバサービスを作るために知っておくべき常識

Python学習だけでは済まされない。

PythonでWebサーバ

ファビコン収集ツールの応答を改善しキー操作できるようにしたときのように、PythonでローカルWebサーバを立ててGUIアプリ風なものを作ってみた。

このとき、サーバはPython、クライアントはHTML/CSS/JavaScriptで実装する。双方のデータ通信にはAJAXという技術を使った。JSONデータにより画面をリロードせず、リアルタイムに画面やデータを更新する。

必要な知識

とくに、HTML/CSS/JavaScriptは難しい。個別に見ても大変だが、連携することで画面を作る点が難しさに拍車をかける。

HTTP通信

HTTPはWebサーバとクライアントがデータ通信する仕組みのひとつ。サーバ(Python)とクライアント(HTTP/CSS/JS)との通信に必要。

HTTPメソッド

HTTPにはいくつかの通信方法がある。

メソッド 説明
GET サーバから値を取得する
POST サーバへ値を送信すつ
PUT サーバにファイルを作成する
DELETE サーバのファイルを削除する
HEAD HTTPヘッダのみ取得する

https://ja.wikipedia.org/wiki/Hypertext_Transfer_Protocol#.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89

HTML/CSS/JS

HTML/CSS/JSは時々刻々と進化を続けている。ブラウザの実装状況や対応の違いなどもあってカオス。Pythonより複雑な状況。

HTML5

https://ja.wikipedia.org/wiki/HTML5

HTMLの基本はテキストに意味づけするメタ言語だと思う。Webサービスではクライアント画面の基礎部分。HTML5はもっと裾野を広げているらしい。

HTML5は、プロプライエタリプラグインとして提供されているリッチインターネットアプリケーションのプラットフォーム(JavaFXAdobe FlashMicrosoft Silverlight 等)を置き換えることを標榜しており、ウェブアプリケーションのプラットフォームとしての機能やマルチメディア要素が実装されている。

1つの標準だけで済むため学習コストが減る。ありがたい。

https://www.webprofessional.jp/whats-new-in-html-5-1/

が、実際はブラウザごとに実装が違うなどの問題もある。

CSS3

アニメーションなどのAPIもサポートされたらしい。よく知らないが画面作成するならHTMLとともに必須の知識。

HTMLのformタグによるHTTP通信

HTMLではformタグを用いてHTTP通信ができる。

<html>
<head>
    <meta charset="UTF-8">
    <title>Form要素</title>
<head>
<body>
<form method="POST" action="http://...">
    ユーザ名:<input type="text" name="username" value="u />
    パスワード:<input type="password" value="p" />
    <button type="submit">送信</button>
</form>
</body>
</html>

method="GET"でも可。ただし値の渡し方が異なる。

メソッド 値の渡し方
GET URL文字列で渡される。http://....?username=u&password=p
POST バイナリデータとして渡される。データ送信形式はapplication/x-www-form-urlencoded(name=value&name=value&…)

<form>-HTML5タグリファレンス

formタグではJSON形式で送信できない。JS(JavaScript)で行う。

HTMLファイルからPOSTでJSONデータを送信する - Qiita

JSのライブラリJQueryを使うと楽。

JavaScript

ややこしすぎる。時代と共に時々刻々と変化している。正直、あまり関わりたくない。

XMLHttpRequest

JQueryを使う前に、JavaScriptにおけるHTTP通信APIがある。

XMLHttpRequest - Web API インターフェイス | MDN

JSONで送信するなどHTMLではできない細かな制御が可能。面倒なことをカバーしてくれるライブラリを使うともっと楽。

JQuery

JQueryJavaScriptで必須のライブラリ。これがなくてはJSを触る気になれないほど。

HTML5,CSS3,JS(ES6)にて標準APIでできることが増えてきた。脱JQueryという考えもあるようだ。

脱jQueryのためにしたこと - Qiita

が、小中規模ならJQuery必須だと思う。

$.ajax()

XMLHttpRequestによる通信をいい感じに使える関数。

jQuery: 一般的なAjax通信を実装するには?($.ajax) - Build Insider

DOM

HTMLの要素をJSからいじくるための仕様。HTML要素の木構造などを操作できる。

http://qiita.com/hththt/items/cc047e326994f440a17a

JQueryではCSSセレクタ風に要素を取得できる。

https://lab.sonicmoov.com/markup/jquery/jquery-selectors/

所感

細かいことは順次学習しながら書いていく。