webdevqa.jp.net

Pythonはウェブサイトを作る際のバックエンドを構築するためだけですか?

Pythonで作成されたウェブサイトのURLの最後に.pyが含まれているようなウェブサイトは見たことがありません。index.htmlおよびindex.php、しかし時々SOのように何も。 .htaccess-fileで何とか終わりを隠すことができることを私は知っています。

その理由を知りたいのですが。

。pyで終わるWebサイトがないのはなぜですか?

通常、PHPスクリプトは、CGIスクリプトと同様に直接アクセスされます。基本的には、通常のファイルと同じようにスクリプトにアクセスしますが、Webサーバーはこの要求をインターセプトし、スクリプトを実行して、代わりに出力を返します。ファイルの内容。

ほとんどのPythonフレームワークには、次のようなものを定義する独自のルーティングシステムがあります。

_urls = (
    ('^/article/(\d+)$', ArticleController),
    ('^/user/(.+?)$', UserController)
)
_

..次に、次のようなものにアクセスします。

_http://example.com/router.py?uri=article/123
_

..そしてそれはurlsで定義されたURLマッピングを介して実行され、適切なクラスにリクエストを送信します...しかし、すべてのURLに_router.py_の部分があるのは少しくだらないので、 _mod_rewrite_を使用して/(.*)を_/router.py/$1_にリダイレクトします(_.htaccess_、Apache構成などを介して)

PHPや他の言語でもまったく同じことができます-これがまさにその方法です CodeIgniter 動作します(PHPフレームワーク)

まったく正気でない場合は、could _mod_rewrite_を使用し、/user/(\d+).pyを_/ViewController.php?id=$1_などにマップしますが、通常、偽の拡張機能を追加しても意味がありません。ページ(主に下位互換性、およびAPIでさまざまな形式のデータへのアクセスを許可するといういくつかの例外があります)

Pythonを使用して「PHPの方法」を実行することもできます。各ページを個別のCGIスクリプトとして記述する場合、ほとんどのPythonフレームワークは、前述のMVC(またはMVCのような)セットアップを使用する傾向があります。上記..

4
dbr

適切なURLはテクノロジーに依存しないため、.php、.py、または.rb拡張子を使用しないでください。ほとんどの場合、pythonフレームワーク(Turbogearsなど)はすべてのURL解析を処理し、バックグラウンドで実行されるpythonプログラムは、すべてのパラメーターをNiceデータ構造で取得します。その場合、ファイル拡張子は表示されません。

"クールなURIは変更されません" ティムバーナーズリーを参照してください

17
hayalci

まあ、おそらくほとんどの人は拡張機能を非表示にします。それがより賢い方法だからです。つまり、PHP(あなたがしたいというわけではありません...)に切り替えた場合、拡張子を変更する必要はありません。

ただし、.py拡張子のあるサイトがあります(Googleのいくつかの部分にあります)。

尋ねるべきより良い質問は、なぜほとんどのASP.NETとPHPユーザーが拡張を維持することを主張するのですか?

8
Zifre

コンピューターに転送されるのはHTMLです(おそらくCSSとJavaScriptコードを使用)。 CSSとJavaScript自体は表示されないため、これらの拡張機能は表示されません。 HTMLは表示されるコンテンツであるため、.html拡張子を付けることに慣れています。

さて、HTMLドキュメントがメモ帳で手動で書かれたのか、それともわずか0.1秒前に実行されたいくつかのプログラムと動的に組み合わされたのかを気にする人がいます。それは違いはありません。

PHPは、この方法でHTMLドキュメントをオンザフライで作成するためによく使用されます。 PHPプログラムによって作成されたHTMLドキュメントに.php拡張子を追加することは慣例であり、あまり意味がありません。エンドユーザーにはブラウザにHTMLドキュメントが表示されます。

Webサーバーには、提供するHTMLドキュメントを見つける方法に関する情報が必要です。ディスクから手作りのHTMLドキュメントを読み取りますか?いくつかのPHPプログラム?.php拡張子をヒントとして使用できます。これはサーバー構成の問題だけです。

PythonでWebを提供することに興味がある場合は、プロジェクトを見てください Django

Pythonでwebapps/websiteを実行するための(おそらく)最も人気のあるフレームワークであるDjangoは、python関数へのURLマッピングを使用するため、/url/を要求すると、実際には次の関数が呼び出されます。そのURLへのリクエストの処理に割り当てられます。つまり、URLと.pyファイルの間に1対1のマッピングはありません。

更新(コメントごと):

典型的なphpWebサイトでは、URLは/path/to/file.phpのようになり、この要求に応じて、Webサーバーはphpファイルを実行し、その出力を HTTP Response として返します。

Djangoでは、/path/of/url/の形式のURLがフレームワークによってインターセプトされ、実際にはどのファイルにも対応していません。これは HTTPリクエスト の単純な部分であり、Djangoフレームワークには rl-dispatchingメカニズム があり、URLを通常の関数にマップします。このタイプのURLを処理するために割り当てられた関数が見つかると、それを呼び出し、関数が返したHttpレスポンスを返します。

http://docs.djangoproject.com/en/dev/topics/http/urls/

3
hasen

ここ 、Googleが.py拡張子を残していることがわかります。

2
Loïc Wolff

この違いは主に、リクエストのディスパッチ方法が原因です。

ファイル拡張子を表示するWebサイトは、ほとんどの場合、ファイルシステムを介して直接ディスパッチされています。 /example/index.phpのようなURLパスが表示されると、Webサーバーはドキュメントルートの下のexampleディレクトリに移動し、index.phpファイルを開いて、その内容を実行します(少し簡略化)。それらはファイルシステムを通過するため、拡張子を含むファイル名全体を使用する傾向があります。

ファイル拡張子が表示されていないWebサイトは、ほとんどの場合、他の方法でディスパッチされています。たとえば、 Django には、リクエストを処理するコードにURLパスをマッピングするテーブルがあります(少し簡略化されています)。ここではURLパスとファイルシステムパスの間に関係がないため、マッピングは完全に任意であり、「偽の」拡張子を追加する理由はありません。

最初のケースには例外があります。たとえば、mod_rewriteを使用すると、URLパスを再マップして、ファイル拡張子を簡単に隠すことができます(これは非常に一般的です)。

Pythonの最初のケースがあまり見られない理由は、ほとんどの人がPythonでサイトを構築するときに、独自のディスパッチを行うWebフレームワークを使用するためです。これはPHPでも一般的です( Drupal は一般的なPHPフレームワークです)が、「スタンドアロン」ページの作成(フレームワークなし)はPHPPythonよりも。

1
CesarB

あなたの質問に直接関係しているわけではありませんが、ウェブサイトだけがPythonで作成されているわけではありません。 EVE online (MMP宇宙ゲーム)のAIエンジン全体はPythonだと思います。

1
Toby Allen

また

Google検索.py

9番目の結果 http://schmidt.nuigalway.ie/cs103/python/graphics.py

それは、.pyで終わるファイルを持つ少なくとも1つのWebサイトです-おそらくもっとあります。

1
Toby Allen