Python-web-development-libraries-quick-guide
Python Web開発ライブラリ-はじめに
ユーザーがGoogle ChromeやMozillaなどのWebブラウザーを開いて「Web開発」を検索すると、何千もの結果がすぐに表示されます。 何がこれを可能にしますか? ウェブ開発! イントラネットまたはインターネット経由でホスティングするためのWebサイトの構築、作成、保守に関連する作業を広く指します。 Webサイトの設計に関連する作業には、Webプログラミング、データベース管理、Webデザイン、Web公開など、複数の領域が含まれます。
Web開発には、実行するWebサイトに影響を与えるすべてのコードが含まれます。 私たちは、Web開発のプロセス全体を2つのカテゴリに分けることができます-
- フロントエンド
- バックエンド
フロントエンドとバックエンドのWeb開発は確かに互いに異なりますが、同じコインの両面のようでもあります。 完全なWebサイトは、各側が互いに通信し、単一のユニットとして効果的に動作することに依存しています。 Web開発では、フロントエンドとバックエンドの両方が等しく重要です。
アプリケーションのフロントエンドまたはクライアント側は、テキストの色からボタン、画像、ナビゲーションメニューに至るまで、ユーザーが画面上で直接体験するすべてのものを担当するコードです。 フロントエンド開発者が使用する一般的なスキルとツールの一部を以下に示します-
- HTML/CSS/JavaScript
- CSSプリプロセッサ
- フレームワーク
- 図書館
- GitとGithub
通常、アプリケーションのバックエンド/サーバー側は、データベース内の情報を管理し、その情報をフロントエンドに提供する責任があります。 Webサイトのバックエンドは、サーバー、アプリケーション、およびデータベースで構成されています。 一般に、ブラウザにアクセスする前に発生するすべてのことを含みます。 バックエンドWeb開発に必要なツールは次のとおりです-
- プログラミング言語-Ruby、PHP、Pythonなど
- データベース-MySQL、PostgreSQL、MongoDB、Oracleなど
なぜWeb開発なのか?
今日の世界では、ビジネスやスキルを促進し、アイデアを共有するための複数の選択肢があります。 それらのいくつかは、ウェブサイト、市場でのネイティブアプリケーションなどによるプロモーションです。 ビジネス開発のツールとして新しいウェブサイトを作成する傾向は、世界中で急速に勢いを増しています。 しかし、私たちの中には、ビジネスの成長においてウェブサイトが持つ重要性を知らない人もいます。
現在、公開市場での存在感を確立するのに苦労している多くの新興企業があります。 しかし、彼らのほとんどが彼らが望むほど多くのターゲットオーディエンスを獲得できないことも事実です。 それらをダウンさせる主な理由の1つは、彼らが彼らのためにビジネスを獲得するためにフル機能で開発されたウェブサイトの可能性を過小評価することです。 ビジネスやその他の目的のためのウェブサイトの開発は、実り多いものになることがあります。
ウェブサイトの開発がビジネスの成長に重要である重要な理由のいくつかを見てみましょう-
聴衆に手を差し伸べる
オンラインWebサイトは、最も幅広いユーザーにリーチでき、ネイティブアプリケーションを制約するプラットフォームに制限されません。 視聴者または顧客は簡単にアクセスできます。 WebサイトにはWebブラウザを介してコンテンツを表示する機能があるため、デスクトップ/ラップトップからモバイルデバイスまで。
ネイティブアプリケーションと比較して、Webブラウジングは、ユーザーがデバイスのアプリストアにアクセスしたり、アプリをダウンロードしたりする必要がないため(コンテンツへのアクセスに1つ以上のプロセスが含まれる場合があるため)、はるかに簡単です。 厳格なアプリストア要件や従うべきコンテンツ制限がないため、Webベースのアプリケーションでは、データの配布がネイティブアプリケーションよりもはるかに柔軟で機敏です。
Web開発に非常に役立つもう1つのツールは、SEOテクニックを利用して視聴者をターゲットにする力です。
24時間年中無休
会社の物理的な店舗を開設する代わりに、ビジネスオーナーがWebサイトをオンラインフォーラムまたは同様のものとして開発する場合、オンラインでより多くの視聴者を獲得してリンクを張る可能性が高くなります。 これは、ほとんどの人が一日中インターネットに接続しているためです。
一般的に、人々は最初にオンラインでチェックしてから決定を下す最も賢い方法を選びます。 したがって、事業主が製品の基本的な詳細をすべて記入し、製品をタイムリーに顧客に届けるための安全な方法を確立すれば、人々は店舗を物理的に訪れるよりもオンラインで購入することを好みます。 これにより、人々は1日の最も奇妙な時間でもアクセスできます。
便利さ
完全に機能するウェブサイトは、ユーザーがいつでも必要なものを選択して探すことができるという利点をユーザーに提供します。 一般に、オンラインで入手するオプションがある場合、ユーザーは物理的に店舗に行くことを避けます。 ですから、あなたが賢いビジネスマンなら、あなたはそれ以外の場合はそうではないかもしれないビジネスを獲得するためだけにウェブサイトにあなたの製品またはあなたの店のすべての詳細を持つことを好むでしょう。
グローバルマーケティング
オンラインWebサイトを使用すると、ソーシャルフォーラムにリンクして、世界中の大勢のユーザーに製品/サービスを販売できます。 これにより、ソーシャルフォーラムで定期的に作品を宣伝および共有して、ターゲットユーザーのフットプリントを大幅に増やすことができます。
信頼できるソース
オンラインポータルは、あらゆる企業/組織にとって最も信頼できるプラットフォームです。 公式のウェブサイトが単独のオフィスとして機能する場合もあります。 会社の物理的な場所に簡単にアクセスできないシナリオを考えてみましょう。 そのような場合、あなたは彼らのウェブサイトに集中することによってこの心配を克服できます。
要するに、ウェブサイトを開発することで、数回クリックするだけでサービスを宣伝でき、世界中のさまざまな地域の消費者の注目を集めることができます。 企業のウェブサイトは、短期間でビジネスを獲得するだけでなく、より多くのオーディエンスを獲得できるという点で注目に値します。
Pythonフレームワーク
Pythonは、効率と読みやすさを重視しているため、Webおよびアプリケーション開発者の間で最も受け入れられる言語の1つです。 多数の優れたPython Webフレームワークがあり、それぞれ独自の専門性と機能を備えています。
ジャンゴ
ここでは、Djangoフレームワークの必要な詳細と機能の概要を説明します。
カテゴリー-DjangoはフルスタックPythonフレームワークに属します。
リリース-最新リリース-2.1バージョン、一般的に使用されるリリース-1.8、1.6バージョン。
概要-経験豊富な開発者によって構築されたDjangoは、高速でクリーンで実用的な設計開発を可能にする高レベルのPython Webフレームワークです。 DjangoはWeb開発の複雑さの多くを処理するため、車輪を再発明することなくアプリの作成に集中できます。 無料でオープンソースです。
オブジェクトをデータベーステーブルにマップするために、DjangoはORMを使用し、同じデータベースから別のデータベースへの転送に同じものを使用します。
Oracle、MySQL、PostgreSQL、SQLiteなどのほとんどすべての重要なデータベースで動作します。
業界には、バックエンド開発の主要なフレームワークとしてDjangoを使用する多くのWebサイトがあります。
Djangoの機能
このPython Webフレームワークの典型的な機能のいくつかは次のとおりです-
- URLルーティング
- 認証
- データベーススキーマの移行
- ORM(オブジェクトリレーショナルマッパー)
- テンプレートエンジン
Djangoフレームワークの公式Webサイトは-https://www.djangoproject.com/です。
フラスコ
カテゴリ-Flaskは非フルスタックフレームワークに属します。
リリース-2018-05-02にリリースされた1.0.2
*About* -特定のライブラリやツールを必要としないため、マイクロフレームワークとして分類されます。 フォーム検証やデータベース抽象化レイヤー、または既存のサードパーティライブラリが共通の機能を提供するその他のコンポーネントはありません。 ただし、flaskは、Flask自体に実装されているかのようにアプリケーション機能を拡張する複数の拡張機能をサポートしています。 オブジェクトリレーショナルマッパー、フォーム検証、アップロード処理、さまざまなオープン認証テクノロジ、およびいくつかの一般的なフレームワーク関連ツールの拡張機能があります。
フラスコの特徴
- 単体テストの統合サポート
- 安らかなリクエストの発送
- 開発サーバーとデバッガーが含まれています
- Jinja2テンプレートを使用します
- セキュアCookieのサポート
- Unicodeベース
- 100%WSGI 1.0準拠
- 豊富なドキュメント
- Google App Engineの互換性
- 必要な機能を強化するために利用可能な拡張機能
Web2py
カテゴリ-Web2pyはフルスタックフレームワークファミリーに属します。
リリース-2.17.1、2018-08-06リリース
*About* -Python 2.6、2.7からPython 3.xバージョン。 それ以上の依存関係がないため、それ自体が完全なパッケージです。 アプリケーションの開発、データベース管理、デバッグ、展開、テスト、およびメンテナンスはすべて、Webインターフェイスを介して実行できますが、通常は必要ありません。 これはスケーラブルなオープンソースフレームワークであり、コードエディター、ワンクリック展開、デバッガーとともにWebベースのIDEが付属しています。
Web2pyの機能
このフレームワークには、多くの開発ツールと組み込み機能が付属しており、開発者の煩わしさを解消します。
- インストールも構成も不要なので、簡単に実行できます。
- Python 2.7/3.5/3.6/バージョンを介して、Windows、Unix/Linux、Mac、Google App Engine、およびほぼすべてのWebホスティングプラットフォームなど、ほぼすべての主要なオペレーティングシステムをサポートします。
- MySQL、MSSQL、IBM DB2、Informix、Ingres、MongoDB、SQLite、PostgreSQL、Sybase、Oracle、およびGoogle App Engineと簡単に通信できます。
- クロスサイトスクリプティング、インジェクションの欠陥、悪意のあるファイルの実行など、最も一般的なタイプの脆弱性を防ぎます。
- エラー追跡と国際化をサポートします。
- 複数のプロトコルの可読性。
- コードの読み取りと保守を容易にする成功したソフトウェアエンジニアリング手法を採用しています。
- 下位互換性により、ユーザー指向の進歩を保証します。
ピラミッド
カテゴリー-ピラミッドは非フルスタックフレームワークです
リリース-1.9.2、2018-04-23リリース
*About* -Pyramidは小さく、高速で、現実的なPython Webフレームワークです。 Pylonsプロジェクトの一部として開発されています。 BSDライクなライセンスの下でライセンスされています。 これにより、実際のWebアプリケーションの開発と展開がより楽しく、予測可能で、生産的になります。
ピラミッドの特徴
Python Pyramidは、次の機能を備えたオープンソースのフレームワークです-
- シンプル-事前の知識がなくても、誰でも作業を開始できます。
- ミニマリズム-すぐに使用できるPyramidには、ほとんどすべてのWebアプリケーションに必要な重要なツールがいくつか付属しています。セキュリティやJavaScriptやCSSなどの静的アセットの提供、コードへのURLの添付などです。
- ドキュメント-排他的で最新のドキュメントが含まれています。
- スピード-非常に高速で正確。
- 信頼性-保守的で徹底的にテストされていることを念頭に置いて開発されています。 適切にテストされていない場合、故障と見なされます。
- オープン性-寛容でオープンなライセンスで販売されています。
Dash
カテゴリ-Dashフレームワークは「他の」Python Webフレームワークに属します。
リリース-0.24.1、コアダッシュバックエンド。
*About* -Webベースのインタラクティブな視覚化を作成するためのオープンソースライブラリとしてのDash。 plotlyチームは、Flask、React.js、plotly.jsを活用してカスタムデータ視覚化アプリを構築するオープンソースフレームワークであるDashを作成しました。 このライブラリの重要なハイライトは、Pythonコードを介してのみ高度にインタラクティブなWebアプリケーションを構築できることです。 データサイエンティストはダッシュフレームワーク、特にWeb開発に慣れていないすべての人を愛しています。
Dashを使用すると、開発者は構成可能なすべてのプロパティと基になるFlaskインスタンスにアクセスできます。 Dashフレームワークを使用して開発されたアプリケーションは、サーバーにデプロイでき、最終的にWebブラウザーでレンダリングされます。
ダッシュアプリケーションは本質的にクロスプラットフォーム(Linux/Win/Mac)であり、モバイルフレンドリーであり、Flaskプラグインの豊富なセットによってアプリケーションの機能を拡張できます。
ダッシュの特徴
- 構成可能なプロパティとFlaskインスタンスへのアクセスを提供します
- Flashプラグインを通じて、Dashアプリケーションの機能を拡張できます
- モバイル対応
Djangoフレームワーク
この章では、Django Frameworkについて詳しく説明します。
Djangoは、Webアプリケーションの構築に使用されるMVT Webフレームワークです。 巨大なDjango Webフレームワークには非常に多くの「バッテリーが含まれています」が付属しているため、開発者はすべてがどのように連携するかについて多くの場合驚かれます。 非常に多くのバッテリーを追加する背後にある原則は、後者を個別のライブラリとして追加する代わりに、フレームワーク自体に共通のWeb機能を持たせることです。
Djangoフレームワークの人気の背後にある主な理由の1つは、巨大なDjangoコミュニティです。 コミュニティは非常に巨大であるため、認証、承認、本格的なDjangoベースのCMSシステム、eコマースアドオンなどを含むサードパーティパッケージを開発するために、すべてのコーナーの開発者が別のWebサイトを設けました。 あなたが開発しようとしているものが既に誰かによって開発されている可能性が高く、それをあなたのプロジェクトに引き込む必要があるだけです。
なぜDjangoを使用する必要があるのですか?
Djangoは、開発者がWebサイトを迅速かつクリーンで実用的なデザインで開発することを奨励するような方法で設計されています。 物事を成し遂げるためのDjangoの実用的なアプローチは、群衆から際立っているところです。
ソーシャルメディアウェブサイトなど、高度にカスタマイズ可能なアプリを構築することを計画している場合、Djangoは検討すべき最高のフレームワークの1つです。 Djangoの強みは、ユーザー間の相互作用、またはさまざまな種類のメディアを共有する能力にあります。 djangoの大きな利点の1つは、大規模なコミュニティベースのサポートを利用できることです。これにより、高度にカスタマイズ可能なサードパーティがアプリケーションでプラグインをすぐに使用できます。
以下は、Web開発にDjangoを選択するトップ10の理由です-
Python
Pythonは、そのシンプルな言語構成、フロー構造、および簡単な構文のために、間違いなく最も学習しやすいプログラミング言語の1つです。 汎用性があり、多くのデバイスに組み込まれたWebサイト、デスクトップアプリケーション、モバイルアプリケーションを実行し、一般的なスクリプト言語として他のアプリケーションで使用されます。
含まれている電池
Djangoには、URLルーティング、認証、オブジェクトリレーショナルマッパー(ORM)、テンプレートシステム、db-schema移行などの一般的な機能を構築するために不可欠な共通ライブラリが付属しています。
組み込みの管理者
Djangoには、モデル、ユーザー/グループの権限を処理したり、ユーザーを管理したりできる管理インターフェースが組み込まれています。 モデルインターフェイスが適切に配置されていれば、高度なデータベース機能を除くすべてのデータベース管理プログラムを別途用意する必要はありません。
邪魔にならない
Djangoアプリケーションを作成しても、ボイラープレートや不要な機能は追加されません。 必須のインポート、サードパーティのライブラリ、XML構成ファイルはありません。
スケーラブル
DjangoはMVCデザインパターンに基づいています。 これは、db(データベース)、バックエンド、フロントエンドコードなどのすべてのエンティティが個別のエンティティであることを意味します。 Djangoでは、サイトを構成する写真、ファイル、CSS、JavaScriptなどの静的メディアからコードを分離できます。
Djangoは、Webサーバー、キャッシュ、パフォーマンス管理、クラスタリング、およびバランシング用のサードパーティライブラリの完全なリストをサポートしています。 Djangoが提供する利点の1つは、ReSTやOAuthなどの主要な電子メールおよびメッセージングアプリケーションとサービスのサポートです。
バトルテスト済み
Djangoは2005年に最初にオープンソース化されました。 12年の成長の後、DjangoはニュースパブリッシングWebサイトを運営するだけでなく、Pinterest、Instagram、Disqus、Bitbucket、EventBrite、Zapierなどの主要なグローバル企業のすべてまたは一部も運営しています。 これにより、堅牢で信頼性の高いWebフレームワークとして機能します。
巨大なパッケージのサポート
その大規模なコミュニティサポートと巨大な開発者ネットワークのために、あなたがやろうとすることは以前に行われた可能性が高いです。 開発者の大規模な国際コミュニティは、プロジェクトをオープンソースパッケージとしてリリースすることでコミュニティに貢献しています。
これらのプロジェクトのそのようなリポジトリの1つがDjango Packageサイトです。 現在、Djangoパッケージには、3400を超えるリストと、Djangoプロジェクトで使用する再利用可能なDjangoアプリ、サイト、およびツールがリストされています。
活発に開発された
オープンソースプロジェクトに関連する最大のリスクの1つは、その持続可能性です。 それが長く続くかどうかはわかりません。
Djangoは12歳なので、このようなリスクはありません。 一貫性のあるリリース、新しい/より良いバージョン、アクティブなコミュニティは毎日成長しており、毎日コードベースを維持および改善するボランティアの貢献者の大規模なコアチームがいます。
安定したリリース
Djangoなどのオープンソースソフトウェアプロジェクトは、多くの場合、積極的に開発されており、多くの開発者が毎日開発およびテストしているため、競合するプロプライエタリソフトウェアよりも安全です。 ただし、オープンソースソフトウェアプロジェクトの欠点は、商業的に実行可能な開発に対する安定したコードベースがないことです。
Djangoでは、ソフトウェアの長期サポート(LTS)バージョンと、以下の画像に示すように定義されたリリースプロセスがあります-
ファーストクラスのドキュメント
最初のリリースから、Django開発者は適切な包括的なドキュメントが利用可能でなければならず、チュートリアルが簡単に理解できるようにしました。
Djangoを使用しているのは誰ですか?
Djangoのユニークな強さにより、Djangoフレームワークの上にPythonで構築された人気のあるWebサイトが複数あります。 以下は、Djangoに基づいて完全または部分的に構築された主要なサイトの一部です。
Disqus
これは、世界中で最も好まれているブログコメントホスティングサイトの1つです。 WordPressや他の多くのような人気のあるCMS(コンテンツ管理システム)とDisqusを使用して簡単に統合できます。 5,000万人を超えるユーザーベースを処理するDjangoは、サイト所有者を満足させ、コミュニティに手を差し伸べることができます。
タマネギ
風刺的な新聞のオンライン会場を提供するOnionウェブサイト、Djangoはそのフレームワークを提供します。
Bitbucket
Bitbucketは、バージョン管理リポジトリホスティングサービスであるGitHubに似ています。 BitbucketとGitHubの唯一の違いは、Bitbucketが水銀リポジトリをホストするのに対して、GitHubはgitリポジトリをホストすることです。 何百万人ものユーザーがBitbucketに関連付けられており、bitbucketが提供するすべてのサービス(レポの作成、コードのプッシュ、共同作業者の追加、コミット、プルリクエストなど)は安定している必要があります。 Djangoはbitbucketサイトの運営を担当しています。
インスタグラム
Instagramは、すべての友人と写真やビデオを共有するのが大好きな人のために特に構築されたソーシャルネットワーキングアプリです。 現在、Instagramには多くの有名人がいますので、彼らのファンに近づきます。 DjangoフレームワークもInstagramを実行しています。
Mozilla Firefox
Google Chromeに次いで世界で2番目に広く使用されているブラウザはMozillaブラウザです。 現在、MozillaのヘルプページはDjangoフレームワークで構築されています。
世界中の何百万人ものユーザーがPinterestから新しいアイデアやインスピレーションを発見しています。 Pinterestは、Djangoフレームワークを使用して(要件に応じて変更を加えて)実行しています。
NASA
米国航空宇宙局の公式ウェブサイトは、数百万人のユーザーがプレミア代理店が提供するニュース、画像、ビデオ、ポッドキャストを訪れたりチェックしたりする場所です。 Djangoは、NASAの公式Webサイトの特定の部分を開発しています。
ワシントンポスト
世界に影響力のある新聞が1つあれば、それは確かにワシントンポストです。 Washington PostのWebサイトは、日刊紙に付随する人気の高いオンラインニュースソースです。 その膨大なビューとトラフィックは、Django Webフレームワークによって簡単に処理されています。
Redditギフト
大人気のRedditウェブサイトは、Reddit Giftsと呼ばれるオンラインの匿名のギフト交換およびミートアッププラットフォームを立ち上げました。 このサイトは世界中のユーザーを結び付け、ユーザー間のギフト交換を促進します。 Django Webフレームワークはその機能を強化しています。
プレジ
Preziは、Djangoフレームワーク上に構築されたMicrosoft PowerPointのクラウドベースの代替です。 このサイトは、操作および拡大/縮小できる仮想キャンバスを提供します。 これにより、個々のスライドではなく、プレゼンテーションの全体ビューが提供されます。
Djangoプロジェクトとアプリのインストールと作成
Djangoをインストールする前に、Pythonがインストールされていることを確認する必要があります。 virtualenvを使用していると仮定すると、単純なpipインストールdjangoで十分です。
仮想環境とDjangoのインストール
以下は、Windows環境に仮想環境とDjangoをインストールするプロセスです-
Djangoが適切にインストールされているかどうかを確認するには、次のコードを入力します-
Djangoプロジェクトの作成
インストールが完了したら、Djangoプロジェクトを作成する必要があります。
Windowsマシンで以下のコマンドを実行すると、次のdjangoプロジェクトが作成されます-
*django-admin startproject my_project_name*
Django Project Django Projectの作成
dirと入力すると、上記のように1つの新しいファイルと1つの新しいディレクトリが表示されます。
*manage.py* -manage.pyはコマンドラインで実行可能なPythonファイルで、django-adminの単なるラッパーです。 これは、その名前に暗示されているプロジェクトの管理にも役立ちます。
これにより、プロジェクトの構成ルートを表すmyFirstDjangoProject内に myFirstDjangoProject というディレクトリが作成されました。 さらに深く掘り下げてみましょう。
Djangoの構成
myFirstDjangoProjectディレクトリーを「構成ルート」と呼ぶことにより、このディレクトリーには、一般にDjangoプロジェクトを構成するために必要なファイルが保持されます。 このディレクトリ以外のほとんどすべては、プロジェクトのモデル、ビュー、ルートなどに関連付けられた「ビジネスロジック」のみに焦点を合わせます。 プロジェクトを接続するすべてのポイントがここにつながります。
- init.py-これは空で、ディレクトリをインポート可能なPythonパッケージに変更します。
- settings.py-名前が示すように、ほとんどの構成アイテムが設定される場所です。
- urls.py-URLはurls.pyで設定されます。 これにより、このファイルにプロジェクトのすべてのURLを明示的に記述する必要はありません。 ただし、URLが宣言されている場所をDjangoに伝える必要があります(つまり、urls.pyの他のURLをリンクする必要があります)。
- Wsgi.py-これは実稼働環境でのアプリケーションを支援するためのものであり、Flask、Tornado、Pyramidなどの「アプリ」オブジェクトを公開する他のアプリケーションに似ています。
設定をする
settings.pyの内部を見てみると、そのかなりのサイズが明らかになります。これらは単なるデフォルトです。 他に注意する必要があるのは、静的ファイル、データベース、メディアファイル、クラウド統合、またはDjangoプロジェクトを構成できる他の多数の方法です。 settings.pyファイルで言及されているいくつかのポイントを理解しましょう-
*BASE_DIR* -これはファイルの検索に役立ちます。 setting.pyファイル内で、BASE_DIRパラメーターはベースディレクトリへの絶対パスを設定します。
*SECRET_KEY* -ハッシュを作成するために使用されます。 一般に、cookie、セッション、csrf保護、および認証トークンにsecret_keyを使用しました。
*DEBUG* -開発モードまたは本番モードで実行されているプロジェクトに設定できます。
*ALLOWED_HOSTS* -アプリケーションが提供されるホスト名のリストを提供します。 開発モードでは、設定はオプションです。ただし、実稼働マシンでは、Djangoプロジェクトを設定する必要があります。
*INSTALLED_APPS* -Djangoプロジェクトで現在インストールおよび実行されているDjango「アプリ」のリストです。 組み込みのDjangoは、次の6つのインストール済みアプリを提供します-
django.contrib.admin
django.contrib.auth
django.contrib.
django.contrib.sessions
django.contrib.messages
django.contrib.staticfiles
*MIDDLEWARE* -Djangoプロジェクトの実行を支援します。 これは、djangoの要求/応答処理にフックするPythonクラスです。
*TEMPLATES* -フロントエンドでのドキュメントの表示方法を定義します。 Djangoテンプレートは、テキストベースのフォーマットを作成するために使用されます。
*WSGI_APPLICATION* -設定したサーバーは、WSGIファイルの場所を知っている必要があります。 外部サーバーを使用している場合は、独自の設定を確認します。 デフォルトでは、wsgi.py内のオブジェクトを指します。
*DATABASES* -Djangoプロジェクトが現在アクセスしているデータベースに設定します。 デフォルトのデータベースを設定することは必須です。 選択したデータベースを設定する場合、HOST、USER、PASSWORD、PORT、データベースNAME、適切なENGINEなど、データベースに関連するいくつかのことに言及する必要があります。
*STATIC_URL* -STATIC_ROOTにある静的ファイルを参照するときに使用するURLです。 デフォルトでは、なしです。
ただし、静的ファイルのパスを追加する必要がある場合があります。 ファイルの終わりまで行き、STATIC_URLエントリのすぐ下に、以下に示すようにSTATIC_ROOTという新しいエントリを追加します-
myFirstDjangoProject/settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR、「静的」)
データベースのセットアップ
サイトの日付を保存できるさまざまなデータベースソフトウェアがあります。 デフォルトのsqlite3を使用します。
これは、 myFirstDjangoProject/settings.py の以下の所定の部分で既に設定されています-
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
ブログ用のデータベースを作成するには、コンソールで次を実行します- python manage.py migrate (manage.pyファイルを含むmyFirstDjangoProjectディレクトリにいる必要があります。
すべてがうまくいけば、次の出力が得られます-
Webサーバーの起動
manage.pyファイルを含むディレクトリにいる必要があります。 コンソールで、次のようにpython manage.py runserverを実行してWebサーバーを起動できます-
あとは、Webサイトが実行されていることを確認するだけです。 ブラウザ(Firefox、Chrome、Safari、Internet Explorer、または使用するもの)を開き、このアドレスを入力します-
*http://127.0.0.1:8000/*
or
*http://localhost:8000/* #ウェブサーバーはローカルマシンでのみ実行されているため。
おめでとうございます。 最初のWebサイトを作成し、Webサーバーを使用して実行しました!
Webサーバーの実行中は、追加のコマンドを入力するための新しいコマンドラインプロンプトは表示されません。 端末は次のテキストを受け入れますが、新しいコマンドは実行しません。 これは、着信要求をリッスンするためにWebサーバーが継続的に実行されるためです。
Djangoモデル
ブログのすべての投稿を保存するDjangoモデルを作成しようとしています。 しかし、それが機能することを確認するには、オブジェクトについて学ぶ必要があります。
オブジェクト
オブジェクトは、プロパティとアクションのコレクションです。 例でこれを理解しましょう。 猫をモデル化する場合、色、年齢、気分(良い/悪い/眠い)、所有者などのプロパティを持つCatというオブジェクトを作成します。
その後、猫はいくつかのアクションを持っています:ゴロゴロ、スクラッチまたはフィード。
Cat
--------
color
age
mood
owner
purr()
scratch()
feed(cat_food)
CatFood
--------
taste
そのため、基本的に、プロパティ(オブジェクトプロパティと呼ばれる)とアクション(メソッドと呼ばれる)を使用して、コードで実際のことを記述しようとしています。
ブログを作成する際には、テキストコンテンツとタイトルが必要です。 著者の名前、作成日、出版日も必要です。
だから私たちのブログには次のオブジェクトがあります-
Post
--------
title
text
author
created_date
published_date
また、その投稿を公開するメソッドが必要です。 オブジェクトが何であるかがわかったので、ブログ投稿用のDjangoモデルを作成できます。
モデルはDjangoの特別な種類のオブジェクトであり、データベースに保存されます。 データをSQLiteデータベースに保存します。
アプリケーションを作成する
すべてを明確にするために、プロジェクト内に別のアプリケーションを作成します。 以下では、下記の簡単なコマンドを実行して、ブログWebアプリケーションの作成を試みます。
ここで、新しいmyBlogディレクトリが作成され、そこに多数のファイルが含まれていることがわかります。 私たちのプロジェクトのディレクトリとファイルは次のようにする必要があります-
アプリケーションを作成したら、それを使用するようDjangoに指示する必要もあります。 これはmyFirstDjangoProject/settings.pyファイルで行います。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myBlog',
]
ブログ投稿モデルの作成
*myBlog/models.py* ファイルで、Modelsと呼ばれるすべてのオブジェクトを定義します。これは、ブログ投稿を定義する場所です。
myBlog/models.pyを開き、すべてを削除して、次のようにコードを記述しましょう。
まず、fromまたはimportを呼び出して、他のファイルからいくつかの機能をインポートします。 したがって、これを使用すると、すべてのファイルに同じものをコピーして貼り付ける代わりに、 fromおよびimport で一部を含めることができます。
- class Post(models.Model)*-この行は、モデルを定義します(オブジェクトです)。
- classは、オブジェクトを定義していることを示す特別なキーワードです。
- Postはモデルの名前です。 クラス名は常に大文字で始めてください。
- models.Modelは、PostがDjangoモデルであることを意味するため、Djangoはデータベースに保存する必要があることを認識しています。
ここで、上記で定義したプロパティ、title、text、created_date、published_date、authorについて説明します。 そのためには、各フィールドのタイプを定義する必要があります。
models.CharField-これは、限られた文字数でテキストを定義する方法です。
Models.TextField-これは制限のない長いテキスト用です。
Models.DateTimeField-これは日付と時刻用です。
Models.ForeignKey-これは別のモデルへのリンクです。
*def* で関数/メソッドを定義し、publishがメソッドの名前です。
メソッドはしばしば何かを返します。 ここでstr()を呼び出すと、Postタイトル付きのテキスト(文字列)が取得されます。
データベース内のモデルのテーブルを作成する
最後のステップは、新しいモデルをデータベースに追加することです。 まず、モデルに変更を加えたことをDjangoに理解させる必要があります。 以下に示すように、コマンド python manage.py make migrations myBlog を使用して、コンソールウィンドウで同じ操作を行います。
次に、Djangoはデータベースに適用する必要がある移行ファイルを準備します。 コンソールで次のように入力できます: python manage.py migrate myBlog そして出力は次のようになります-
Postモデルがデータベースに追加されました。
Django管理者
モデル化したばかりの投稿を追加、編集、削除するには、Django adminを使用します。
だから私たちは *myBlog/admin.pyファイルを開き、この中に以下の内容を入れてみましょう-
まず、前の章で定義したPostモデルをインポート(インクルード)します。 管理ページでモデルを表示するには、admin.site.register(Post)でモデルを登録する必要があります。
管理サイトにログインするには、スーパーユーザー(サイト上のすべてを制御できるユーザーアカウント)を作成する必要があります。 そのため、Webサーバーを停止し、コマンドラインpython* manage.py createsuperuser *を入力して、Enterキーを押します。
それでは、Postモデルを見てみましょう。 python manage.py run serverをコンソールで実行して、Webサーバーを実行することを忘れないでください。 ブラウザに移動して、アドレスを入力します* [[1]] 次に、以下のようにDjango管理ダッシュボードが表示されます-
投稿に移動して、少し試してください。 多くのブログ投稿やコンテンツをどこからでも追加できます。 あなたのブログは次のようになります-
これはDjangoの概要にすぎず、数行のコードでブログを作成できます。
フラスコフレームワーク
Flaskは、外部ライブラリにほとんど依存しないマイクロフレームワークです。 それは非常に軽いフレームワークであり、私たちがやりたいことを何でもする自由を与えます。
この章では、PythonとFlaskフレームワークを使用してプロジェクトをビルドします。
Flaskの起動と構成
最も広く使用されているpythonライブラリと同様に、FlaskパッケージはPython Package Index(PPI)からインストールできます。 最初にディレクトリを作成します(この章では、 flaskProject というディレクトリを作成しました)。次に、プロジェクト関連のすべての依存関係が読み込まれる(flaskを含む)仮想環境を作成します( flaskEnv と呼びます)。 また、flask-sqlalchemyをインストールして、フラスコアプリケーションがSQLデータベースと簡単に通信できるようにすることもできます。
フラスコをインストールした後、flaskEnv(私たちのvirtualEnvironment名)は以下のようなものが表示されます-
フラスコでアプリを作成する
フラスコをインストールすることにより、次のように非常に少ないコード行でシンプルな「 hello application in flask 」を作成できます-
端末に次のように入力します-
$python flaskapp.py
そして、あなたは次の出力を見ることができます-
*http://127.0.0.1:5000/* または *localhost:5000* で実行
以下は、サンプルコードで行ったことの説明です-
- まず、Flaskクラスライブラリをインポートします。 このクラスのインスタンスはWSGIアプリです。
- 次に、このクラスのインスタンスを作成します。 アプリケーションのパッケージまたはモジュール名が最初の引数です。 静的ファイル、テンプレート、その他のファイルの場所をフラスコが知っていることが必須です。
- 次に、どのURLがメソッド/関数をトリガーするかを知るために使用するroute()デコレーターです。
URLルーティングの作成
URLルーティングを使用すると、Webアプリ内のURLを覚えやすくなります。 ここでいくつかのURLルートを作成します-
/hello
/members
/members/name
上記のURLに基づいて次のコードを記述し、app.pyとして保存できます。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return "Index!"
@app.route('/Hello')
def hello():
return "Hello, World!"
@app.route("/members")
def members():
return "Members"
@app.route("/members/<name>/")
def getMember(name):
return name
if __name__ == '__main__':
app.run(debug=True)
$ python app.py
*http://localhost:5000/* で実行
ブラウザで次の出力を取得します-
次のようにブラウザで他のURLを試すことができます-
- http://localhost:5000/helloで実行すると、次の出力が得られます-*
- http://localhost:5000/membersで実行すると、-*
- http://localhost:5000/members/finddevguides/で実行すると、次の出力が表示されます-*
ただし、通常は(上記のように)文字列を返したくないため、テンプレートを返します。 そのために、flaskから関数「 render_template 」を使用し、いくつかの入力でrender_templateを返します。 したがって、以下の機能は私たちの仕事をします-
from flask import render_template
return render_template(‘homel’)
フォルダーテンプレートを作成し、それにhomelファイルを配置します。
次に、レイアウトについて説明します。 すべてのテンプレートにhtmlヘッドタグとボディタグを使用する代わりに、head&bodyタグを含むレイアウトを設計し、現在のビューまたは現在のテンプレートをラップします。 そのためには、1つの別個のファイルを作成し、 layoutl と呼ぶ必要があります。 これに、通常のheadタグ、bodyタグ、および他のすべての必要なタグを配置できます。
次のコード行で新しいレイアウトを作成できます-
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>MyFlaskApp</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
{% include 'includes/_navbarl' %}
<div class="container">
{% block body %}
{% endblock %}
</div>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js">
</script>
</body>
</html>
上記のコードでは、タイトルトラックMyFlaskApを指定し、ヘッドでcss cdnを使用し、ボディブロックでjavascriptを使用してブートストラップを有効にしています。
次に、すべてのページにnavbarを作成する必要があります。 そのためには、最初にインクルードフォルダーを作成してから、その中に_navbarlファイルを作成する必要があります。 _navbarlでは、getbootstrap.comの標準スターターテンプレートを使用する必要があります。 新しく作成された_navbarlファイルは次のようになります-
そして、この_navbarlファイルをレイアウトファイルに含めます。
{% include 'includes/_navbarl' %}
レイアウトブロックがあるので、このブロックをホームファイル(homel)で拡張できます。
私たちのhomelファイルは、以下のコードを使用して作成できます-
{% extends 'layoutl' %}
{% block body %}
<div class="jumbotron text-center">
<h1>Welcome to FlaskApp</h1>
<p>This application is built on Flask webframework!</p>
</div>
{% endblock %}
flaskapp.pyファイルを実行しようとすると、これを使用して、ブラウザに次の出力が表示されます-
ここで、 about タブをアクティブにします(現在、タブは機能していません)。 aboutタブのルートを作成し、テンプレートファイル aboutl を作成します。
appflask.pyのタブルートについては以下のようになります-
aboutlファイルは以下の内容になります-
HomeとAboutが処理されます。 Articlesの場合、ルートディレクトリに新しいファイル(data.py)を作成し、そこでデータを配置してWebページに呼び出します。
data.py
def Articles():
articles = [
{
'uid': 1,
'title': 'Article_One',
'body': 'Flask, being a microframework, often requires some repetitive step
to get a third party library working. Because very often these steps could
be abstracted to support multiple projects the Flask Extension Registry
was created.',
'Author': 'Rajesh Joshi',
'Created-on': '07-09-2018'
},
{
'uid': 2,
'title': 'Article_Two',
'body': "Flask, being a microframework, often requires some repetitive steps
to get a third party library working. Because very often these steps could
be abstracted to support multiple projects the Flask Extension Registry
was created.",
'Author': 'Rajesh J',
'Created-on': '07-09-2018'
},
{
'uid': 3,
'title': 'Article_Three',
'body': 'Flask, being a microframework, often requires some repetitive steps
to get a third party library working. Because very often these steps could be
abstracted to support multiple projects the Flask Extension Registry
was created.',
'Author': 'Joshi Rajesh',
'Created-on': '07-09-2018'
}
]
return articles
以下は articlesl のコードで、各uidの記事のタイトルを表示します。
{% extends 'layoutl' %}
{% block body %}
<h1>Articles</h1>
{% for article in articles %}
<li class="list-group-item">
<a href="article/{{article.uid}}"> {{article.title}}</a>
</li>
{% endfor %}
{% endblock %}
要約すると、Flaskは軽量であるため、最も人気のあるPython Webフレームワークの1つです。 マイクロですが、拡張可能なpython Webフレームワークです。 必要な機能を提供することにより、flaskは単純なWebアプリケーションの開発を加速します。 そのため、Flaskは、小規模で複雑でないアプリケーションに適しています。
Web2pyフレームワーク
Web2pyは使いやすいフレームワークです。 web2pyでは、ポータブルであり、USDドライブでも実行できるため、インストールと構成は必要ありません。 他の多くのpythonフレームワークと同様に、MVCフレームワークに基づいています。 それらのほとんどは古いバージョンのPythonをサポートしていませんが、web2pyは引き続き古いバージョンのpython 2.6および2.7をサポートしています。 また、最近広く受け入れられている認証用のLDAPもサポートしています。
Web2pyは、3つの主な目標に焦点を当てることにより、Web開発への参入障壁を下げようとします-
- 急速な発展
- 使いやすさ
- セキュリティ
ユーザーの観点を念頭に置いて、Web2pyは構築され、常に内部的に最適化されており、下位互換性のサポートを含む、より高速で無駄のないフレームワークになっています。
Web2py Frameworkのインストールと設定
web2pyの実行は簡単です。次のリンクからexeをダウンロードする必要があります:http://www.web2py.com/init/default/download
Windowsの場合、zipファイルをダウンロードして解凍し、exeファイルを直接またはコマンドラインから実行できます。 以下の画面で管理者パスワードの入力を求められます。
管理者パスワードを選択して、サーバーを起動できます。 次の画面が表示されます-
Web2pyを使用してアプリを作成する
これで、新しいアプリを作成する準備ができました。 下部にある[管理]タブをクリックします。 管理者パスワードを入力した後、次の画面が表示されます-
新しい単純なアプリケーションに移動し、アプリケーション名(helloWeb2pyなど)を入力して、[作成]をクリックします。 これにより、以下に示すデザインインターフェイスページが表示されます-
また、現在のライブWeb、helloWeb2pyにアクセスして、ローカルマシンで http://127.0.0.1:8000/helloWeb2py と入力するだけで、以下の出力が得られます-
helloWeb2pyアプリケーションの設計ページで、コントローラーに移動し、default.pyの横にある編集ボタンをクリックします。 あなたがindex()関数の戻り値を変更すると、次の出力が表示されます-
変更を保存すると、helloWeb2pyアプリで行われた変更を確認できます。 http://127.0.0.1:8000/helloWeb2py リンクを更新すると、以下の出力が表示されます-
クラウドプラットフォームでのアプリの展開
クラウドプラットフォームにアプリを展開する場合は、ホームページに戻ってサイトをクリックします。 展開のオプションを選択できます。 ここでは、「pythonAnywhere」を選択します。 pythonAnywhere Webサイトにアクセスして、自分で登録します(まだ行っていない場合)。 *「新しいWebアプリを追加する」*をクリックして、すべての資格情報を入力します(web2pyアプリを選択します)。 全部できた。
[[2]]タブをクリックします(パスワードを入力します)。 次に、パックされたアプリケーションのアップロードとインストールをクリックします。 以下のように資格情報を入力し、インストールをクリックします。
すべてが完了すると、次のようにポップアップメッセージが表示されます-
アプリを表示するには、以下のリンクを開きます-
[[3]]
最初のweb2pyアプリケーションが正常に作成およびデプロイされました。
要約すると、Web2pyは完全にpythonで記述された無料の高速で安全なWeb開発フレームワークであり、可能な限りあらゆる方法(モデル、ビュー、コントローラー)でpythonを使用することを推奨します。 小規模なWebアプリケーションやプロトタイプには非常に優れたフレームワークですが、エンタープライズクラスの品質要件を満たしていません。 これは、エンタープライズレベルのアプリケーションでは、単体テスト、適切で正確なエラー報告、散在するモデルがないため、バグを解決する複雑さが指数関数的に増加するためです。
ピラミッドフレームワーク
Pyramidは、Pythonで構築された一般的なオープンソースのWebアプリケーション開発フレームワークです。 Python開発者は簡単にWebアプリケーションを作成できます。
インストール、起動、構成
「小さな開始、大きな終了、完成したフレームワーク」で説明したように、PyramidはFlaskに非常に似ており、インストールと実行にほとんど手間がかかりません。 実際、このアプリケーションの構築を開始すると、いくつかのパターンがFlaskに似ていることがわかります。
ピラミッドフレームワーク環境を作成する手順は次のとおりです-
- まず、プロジェクトディレクトリを作成します。 ここでは、 pyramidProject という名前のディレクトリを作成しました(任意の名前を選択できます)。
- 次に、プロジェクト固有のすべての依存関係をインストールする仮想環境を作成します。 ここでは、Pyramidがインストールされている pyramidEnv という名前の仮想環境フォルダーを作成しました。
- 次に、ディレクトリ pyramidEnv に移動し、 pip install pyramid を使用してピラミッドをインストールします。
上記のようにすべてが完了すると、ディレクトリ構造は次のようになります-
そして、システムにインストールされているピラミッドのバージョンは以下のとおりです-
コアコンセプト
Pyramidフレームワークは、以下のコアコンセプトに基づいています-
- Zope (拡張性、トラバーサル、宣言型セキュリティ)-Pyramidは、拡張性、トラバーサルの概念、および宣言型セキュリティの点でZopeに大まかに基づいています。
- Pylons (URLディスパッチ、永続性の非意見ビュー、テンプレートなど)-pyramidがそのコンセプトを引き出すもう1つの領域は、pylonsプロジェクトです。 Pylonsには、ピラミッドフレームワーク内でURLディスパッチを呼び出すルートの概念があり、永続層またはテンプレートの非意見ビューもあります。
- Django (表示、ドキュメントのレベル)-PyramidはDjangoからヒントを得ます。 表示方法、URLのルーティング方法、およびドキュメントのレベルは、非常にDjangoの方法です。
以下は、ピラミッドフレームワークの機能です-
- 最速の既知のPython Webフレームワークです。
- 小規模および大規模なプロジェクトをサポートします(小規模なフレームワークより大きくなったときに書き換える理由)。
- マイクロフレームワークのような単一ファイルwebappsをサポートします。
- セッションが組み込まれています。
- Plone/Zopeに似たイベントをサポートします。
- これは、トランザクション管理を提供します(以前にZopeを使用したことが既にわかっている場合)。
設定
構成は、アプリケーションの動作に影響を与える設定です。 ピラミッドアプリケーションを構成するには、命令型構成と宣言型構成の2つの方法があります。
ピラミッド構成のサポート-
- 必須の構成、またはデコレータベースの構成のオーバーライド
- 構成の競合検出(より多くのローカルvs. より少ないローカル決定)
- 構成の拡張性(複数のアプリに含まれています)
- 柔軟な認証および承認ポリシー
- プログラムによる構成のイントロスペクション(ルートの現在の状態を表示してナビゲーションを生成)
URL生成
ピラミッドでは、ルート、リソース、および静的アセットのURLを生成できます。 URL生成APIを使用するのは簡単で柔軟です。 ピラミッドのさまざまなAPIを介してURLを生成することにより、ユーザーはWebページとのリンクを壊す心配をあまりせずに、構成を任意に変更できます。
要するに、ピラミッドのURL-
- URL生成をサポートしており、リンクを中断しないようにアプリを変更できます。
- アプリケーションの内部または外部に存在する静的リソースへのURLを生成します。
- ルートとトラバーサルをサポートします。
ビュー
ピラミッドの主な仕事の1つは、要求がアプリケーションに到達したときに呼び出し可能なビューを見つけて呼び出すことです。 ビュー呼び出し可能オブジェクトは、アプリケーションで行われた要求に応じて何か面白いことをするコードの一部です。
ビューをURLディスパッチまたはpythonコードにマップすると、あらゆる種類の呼び出しが可能になります。 ビューは関数宣言またはインスタンスにすることができ、ピラミッドのビューとして使用できます。
ビューに関するいくつかの重要な点を以下に示します-
- ビューはすべての呼び出し可能オブジェクトから生成されます。
- レンダラーベースのビューは、単に辞書を返すことができます(webbyスタイルオブジェクトを返す必要はありません)。
- ルートごとに複数のビューをサポート(GET vs. POST対 HTTPヘッダーチェックなど)。
- ビュー応答アダプター(ビューの戻り値の処理方法と処理方法を指定する場合) 応答オブジェクト)。
拡張性
Pyramidは拡張性を考慮して設計されています。 そのため、ピラミッド開発者がアプリケーションの構築中に特定の制約を念頭に置いている場合、サードパーティはソースコードを変更することなくアプリケーションの動作を変更できるはずです。 特定の制約に従うピラミッドアプリケーションの動作は、変更せずにオーバーライドまたは拡張できます。 複数の環境(シングルトンなし)に柔軟に展開できるように設計されています。 Pyramidは「Tweens」ミドルウェアをサポートしています(WSGIミドルウェア、ただしPyramid自体のコンテキストで実行されます)。
Hello、Pyramidプログラムの実行
ピラミッドフレームワークをインストールした後、すべてが正常に機能しているかどうかを確認する最も簡単なプログラムは、単純な「Hello、World」または「Hello、Pyramid」プログラムを実行することです。
以下は8000ポート番号のピラミッド「Hello、Pyramid」プログラムです-
上記の簡単な例は簡単に実行できます。 これをapp.pyとして保存します(この例では、名前pyramid_helloW.pyを指定しています)。
最も単純なプログラムの実行:−
次に、ブラウザーで http://localhost:8000/ を開くと、Hello、Pyramid!が表示されます。 次のようなメッセージ-
以下は、上記のコードの説明です-
行番号 1-3
ファイルの先頭には、インポート文があります。 最初の行は、make_server関数をインポートします。make_server関数は、アプリケーションに渡されるときに単純なWebサーバーを作成できます。 2行目と3行目は、ピラミッドから構成と応答関数をインポートします。 これらの機能は、それぞれ詳細を構成し、アプリケーションのパラメーターを設定し、要求に応答するために使用されます。
行番号 5-6
これで、 hello_world という関数定義ができました。 応答を生成するビューコードを実装します。 ビューの要件を満たす関数は、要求元のエンティティに返されるテキストのレンダリングを担当します。 上記の場合、関数は呼び出されると、先ほどインポートしたResponse関数を使用します。 これは、クライアントに与えられるべき値を返します。
行番号 8
if name == ‘main’:Pythonは、このモジュールがインポートされたときではなく、「コマンドラインから実行するときにここから開始する」と言っています。
行番号 9-11
行番号 9、プログラムの上部でインポートしたconfigurator関数によって作成されたオブジェクトからconfigという変数を作成します。 行10および11は、このオブジェクトのadd_routeおよびadd_viewメソッドを呼び出します。 このメソッドは、アプリケーションで使用できるビューを定義するために使用されます。 ご覧のとおり、前に定義したhello_world関数を渡します。 これは、その機能が実際にビューとして組み込まれる場所です。
行番号 12-14
これでは、実際にconfigオブジェクトのmake_wsgi_appメソッドを呼び出してWSGIアプリケーションを作成します。 これは、追加したビューなどのオブジェクトの属性を使用して、アプリケーションを作成します。 このアプリケーションは、Webサーバーを起動してアプリケーションにサービスを提供できるオブジェクトを作成するために、インポートしたmake_server関数に渡されます。 最後の行は、このサーバーを起動します。
私たちの* hello worldアプリケーション*は、「命令型」に構成された、最もシンプルで簡単なピラミッドアプリケーションの1つです。 構成タスクを実行するときにPythonの全機能を利用できるため、これは必須です。
要約すると、Pyramidは、大規模で活発なコミュニティを持つオープンソースのPython Webフレームワークです。 この大規模なコミュニティは、Python Webフレームワークの人気と関連性を高めることに貢献しています。 Pyramid Webフレームワークは、堅牢な機能とツールのセットを提供することにより、Webアプリケーション開発を簡素化および加速します。
ダッシュフレームワーク
この章では、Dashフレームワークについて詳しく説明します。
Dashは、分析Webアプリケーションの構築に使用されるオープンソースのPythonフレームワークです。 これは、データ駆動型アプリケーションの開発を簡素化する強力なライブラリです。 これは、Web開発にあまり詳しくないPythonデータ科学者にとって特に便利です。 ユーザーはダッシュを使用してブラウザで素晴らしいダッシュボードを作成できます。
Plotly.js、React、およびFlaskの上に構築されたDashは、ドロップダウン、スライダー、グラフなどの最新のUI要素を分析Pythonコードに直接結び付けます。
ダッシュアプリは、HTTP要求でJSONパケットを使用してフロントエンドのReactコンポーネントと通信するFlaskサーバーで構成されます。
ダッシュアプリケーションは純粋にPythonで記述されているため、HTMLやJavaScriptは必要ありません。
ダッシュのセットアップ
端末にDashがまだインストールされていない場合は、下記のDashライブラリをインストールします。 これらのライブラリは活発に開発されているため、頻繁にインストールしてアップグレードしてください。 Python 2および3もサポートされています。
- pip install dash == 0.23.1#コアダッシュバックエンド
- pip install dash-renderer == 0.13.0#ダッシュフロントエンド
- pip install dash-html-components == 0.11.0#HTMLコンポーネント
- pip install dash-core-components == 0.26.0#過給コンポーネント
- pip install plotly == 3.1.0#Plotly graphing library
すべてが正常に機能していることを確認するために、ここでは単純なdashApp.pyファイルを作成しました。
ダッシュまたはアプリのレイアウト
ダッシュアプリは2つの部分で構成されています。 最初の部分は、基本的にアプリケーションがどのように見えるかを説明するアプリの「レイアウト」です。 2番目の部分では、アプリケーションの対話性について説明します。
コアコンポーネント
*dash_html_components* および *dash_core_components* ライブラリを使用してレイアウトを構築できます。 Dashは、アプリケーションのすべての視覚コンポーネントにPythonクラスを提供します。 JavaScriptとReact.jsを使用して独自のコンポーネントをカスタマイズすることもできます。
dash_core_componentsをdccとしてインポート
dash_html_componentsをhtmlとしてインポート
dash_html_componentsは、dash_core_componentsがReact.jsで作成された対話機能用であるすべてのHTMLタグ用です。
上記の2つのライブラリを使用して、以下のコードを記述しましょう-
app = dash.Dash()
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''Dash Framework: A web application framework for Python.''')
そして、同等のHTMLコードは次のようになります-
<div>
<h1> Hello Dash </h1>
<div> Dash Framework: A web application framework for Python. </div>
</div>
Simple Dashアプリの作成
ファイル dashApp.py で上記のライブラリを使用して、ダッシュで簡単な例を作成する方法を学習します。
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''Dash Framework: A web application framework for Python.'''),
dcc.Graph(
id='example-graph',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'Delhi'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Mumbai'},
],
'layout': {
'title': 'Dash Data Visualization'
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
Dashアプリを実行する
Dashアプリの実行中は、次の点に注意してください。
(MyDjangoEnv)C:\ Users \ rajesh \ Desktop \ MyDjango \ dash> python dashApp1.py
- Flaskアプリ「dashApp1」の提供(遅延読み込み)
- 環境:生産
WARNING Do not use the development server in a production environment. +代わりに実稼働WSGIサーバーを使用します。 * デバッグモード:オン * statで再起動する * デバッガーがアクティブです! * デバッガーPIN:130-303-947 * http://127.0.0.1:8050/ で実行(終了するにはCTRL + Cを押してください)
127.0.0.1 - - [12/Aug/2018 09:32:39] "GET/HTTP/1.1" 200 -
127.0.0.1 - - [12/Aug/2018 09:32:42] "GET/_dash-layout HTTP/1.1" 200 -
127.0.0.1 - - [12/Aug/2018 09:32:42] "GET/_dash-dependencies HTTP/1.1" 200 -
127.0.0.1 - - [12/Aug/2018 09:32:42] "GET/favicon.ico HTTP/1.1" 200 -
127.0.0.1 - - [12/Aug/2018 09:39:52] "GET/favicon.ico HTTP/1.1" 200 -
Webブラウザで http:127.0.0.1:8050/ にアクセスします。 次のようなアプリが表示されます。
上記のプログラムでは、注意すべきいくつかの重要な点は次のとおりです-
- アプリのレイアウトは、html.Divやdcc.Graphのような「コンポーネント」のツリーで構成されています。
- dash_html_componentsライブラリには、すべてのHTMLタグのコンポーネントがあります。 html.H1(children = ‘Hello Dash’)コンポーネントは、アプリケーションで<h1> Hello Dash </h1> HTML要素を生成します。
- すべてのコンポーネントが純粋なHTMLではありません。 dash_core_componentsは、インタラクティブで、React.jsライブラリーを介してJavaScript、HTML、およびCSSで生成される高レベルのコンポーネントを記述します。
- 各コンポーネントは、キーワード属性によって完全に記述されます。 ダッシュは宣言的です。主にこれらの属性を使用してアプリケーションを説明します。
- childrenプロパティは特別です。 慣例により、常に最初の属性であるため、省略できます。
- Html.H1(children = ’Hello Dash’)は、html.H1(「Hello Dash」)と同じです。
- アプリケーションのフォントは、ここに表示されているものとは少し異なります。 このアプリケーションは、カスタムCSSスタイルシートを使用して、要素のデフォルトスタイルを変更しています。 カスタムフォントスタイルは許可されますが、現在のところ、以下のURLまたは任意のURLを追加できます- + app.css.append_css(\ {“ external_url”:* [[4]]
HTMLの詳細
dash_html_componentsライブラリには、すべてのHTMLタグのコンポーネントクラスと、すべてのHTML引数のキーワード引数が含まれています。
以前のアプリテキストにコンポーネントのインラインスタイルを追加しましょう-
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
colors = {
'background': '#87D653',
'text': '#ff0033'
}
app.layout = html.Div(style={'backgroundColor': colors['background']}, children=[
html.H1(
children='Hello Dash',
style={
'textAlign': 'center',
'color': colors['text']
}
),
html.Div(children='Dash: A web application framework for Python.', style={
'textAlign': 'center',
'color': colors['text']
}),
dcc.Graph(
id='example-graph-2',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'Delhi'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Mumbai'},
],
'layout': {
'plot_bgcolor': colors['background'],
'paper_bgcolor': colors['background'],
'font': {
'color': colors['text']
}
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
上の例では、html.Divおよびhtml.H1コンポーネントのインラインスタイルをstyleプロパティで変更しました。
次のようにDashアプリケーションでレンダリングされます-
dash_html_componentsとHTML属性の間にいくつかの重要な違いがあります-
- Dashのスタイルプロパティの場合、辞書を指定するだけで済みますが、HTMLの場合はセミコロンで区切られた文字列です。
- スタイル辞書キーは camelCased であるため、テキストの配置は textalign に変更されます。
- DashのClassNameは、HTMLクラス属性に似ています。
- 最初の引数は、childrenキーワード引数で指定されたHTMLタグの子です。
再利用可能なコンポーネント
Pythonでマークアップを記述することにより、コンテキストや言語を切り替えることなく、テーブルのような複雑で再利用可能なコンポーネントを作成できます-
以下は、pandasデータフレームから「テーブル」を生成する簡単な例です。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
df = pd.read_csv(
'https://gist.githubusercontent.com/chriddyp/'
'c78bf172206ce24f77d6363a2d754b59/raw/'
'c353e8ef842413cae56ae3920b8fd78468aa4cb2/'
'usa-agricultural-exports-2011.csv')
def generate_table(dataframe, max_rows=10):
return html.Table(
# Header
[html.Tr([html.Th(col) for col in dataframe.columns])] +
# Body
[html.Tr([
html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
]) for i in range(min(len(dataframe), max_rows))]
)
app = dash.Dash()
app.layout = html.Div(children=[
html.H4(children='US Agriculture Exports (2011)'),
generate_table(df)
])
if __name__ == '__main__':
app.run_server(debug=True)
出力は次のようになります-
視覚化の詳細
dash_core_componentsライブラリには、 Graph というコンポーネントが含まれています。
Graphは、オープンソースのplotly.js JavaScriptグラフ作成ライブラリを使用して、インタラクティブなデータ視覚化をレンダリングします。 Plotly.jsは約35のチャートタイプをサポートし、ベクター品質のSVGと高性能WebGLの両方でチャートをレンダリングします。
以下は、パンダのデータフレームから散布図を作成する例です-
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objs as go
app = dash.Dash()
df = pd.read_csv(
'https://gist.githubusercontent.com/chriddyp/' +
'5d1ea79569ed194d432e56108a04d188/raw/' +
'a9f9e8076b837d541398e999dcbac2b2826a81f8/'+
'gdp-life-exp-2007.csv')
app.layout = html.Div([
dcc.Graph(
id='life-exp-vs-gdp',
figure={
'data': [
go.Scatter(
x=df[df['continent'] == i]['gdp per capita'],
y=df[df['continent'] == i]['life expectancy'],
text=df[df['continent'] == i]['country'],
mode='markers',
opacity=0.7,
marker={
'size': 15,
'line': {'width': 0.5, 'color': 'white'}
},
name=i
) for i in df.continent.unique()
],
'layout': go.Layout(
xaxis={'type': 'log', 'title': 'GDP Per Capita'},
yaxis={'title': 'Life Expectancy'},
margin={'l': 40, 'b': 40, 't': 10, 'r': 10},
legend={'x': 0, 'y': 1},
hovermode='closest'
)
}
)
])
if __name__ == '__main__':
app.run_server()
上記のコードの出力は次のとおりです-
これらのグラフはインタラクティブで応答性があります。 ポイントにカーソルを合わせて値を表示し、凡例項目をクリックしてトレースを切り替え、クリックしてドラッグしてズームし、シフトを押したままにして、クリックしてドラッグしてパンすることができます。
値下げ
dashはdash_html_componentsライブラリを介してHTMLフレーバーを公開しますが、コピーをHTMLで記述するのは面倒です。 テキストのブロックを作成するには、dash_core_componentsライブラリのMarkdownコンポーネントを使用できます。
コアコンポーネント
dash_core_componentsには、ドロップダウン、グラフ、マークダウン、ブロックなどの高レベルのコンポーネントのセットが含まれます。
他のすべてのDashコンポーネントと同様に、それらは完全に宣言的に記述されています。 構成可能なすべてのオプションは、コンポーネントのキーワード引数として使用できます。
以下は、利用可能なコンポーネントのいくつかを使用した例です-
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div([
html.Label('Dropdown'),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value='MTL'
),
html.Label('Multi-Select Dropdown'),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value=['MTL', 'SF'],
multi=True
),
html.Label('Radio Items'),
dcc.RadioItems(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value='MTL'
),
html.Label('Checkboxes'),
dcc.Checklist(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
values=['MTL', 'SF']
),
html.Label('Text Input'),
dcc.Input(value='MTL', type='text'),
html.Label('Slider'),
dcc.Slider(
min=0,
max=9,
marks={i: 'Label {}'.format(i) if i == 1 else str(i) for i in range(1, 6)},
value=5,
),
], style={'columnCount': 2})
if __name__ == '__main__':
app.run_server(debug=True)
上記のプログラムからの出力は次のとおりです-
ヘルプの呼び出し
ダッシュコンポーネントは宣言型です。 これらのコンポーネントの構成可能な要素はすべて、インストール中にキーワード引数として設定されます。 任意のコンポーネントのpythonコンソールでヘルプを呼び出して、コンポーネントとその利用可能な引数について詳しく知ることができます。 それらのいくつかを以下に示します-
>>> help(dcc.Dropdown)
Help on class Dropdown in module builtins:
class Dropdown(dash.development.base_component.Component)
| A Dropdown component.
| Dropdown is an interactive dropdown element for selecting one or more
| items.
| The values and labels of the dropdown items are specified in the `options`
| property and the selected item(s) are specified with the `value` property.
|
| Use a dropdown when you have many options (more than 5) or when you are
| constrained for space. Otherwise, you can use RadioItems or a Checklist,
| which have the benefit of showing the users all of the items at once.
|
| Keyword arguments:
| - id (string; optional)
| - options (list; optional): An array of options
| - value (string | list; optional): The value of the input. If `multi` is false (the default)
-- More --
要約すると、Dashアプリのレイアウトはアプリの外観を説明します。 レイアウトは、コンポーネントの階層ツリーです。 dash_html_componentsライブラリは、すべてのHTMLタグとキーワード引数のクラスを提供し、style、className、idなどのHTML属性を記述します。 dash_core_componentsライブラリは、コントロールやグラフなどの高レベルのコンポーネントを生成します。
より良いフレームワークの選択
Python Webフレームワークの世界には多くの選択肢があります。 考慮すべき著名なフレームワークには、開発者のマインドシェアを競うDjango、Flask、Bottle、Diesel、Web2py、Pyramid、Falcon、Pecanなどがあります。 Pyramid、Django、Web2py、Flaskのようなフレームワークは、長所と短所のリストで理想的です。プロジェクトに1つだけを選択するのは難しい選択です。
Dashは、さまざまなニーズに合わせて完全に設計されています。 そのため、開発者として、オプションを無数に削減して、プロジェクトを予定通りに、完璧に仕上げるのに役立つものにしたいと考えています。
Flask、Pyramid、およびDjangoフレームワークを比較すると、Flaskは主に小規模なアプリケーションを対象としたマイクロフレームワークであり、PyramidとDjangoはどちらも大規模なアプリケーションを対象としています。 Pyramidは柔軟性と自由を念頭に置いて構築されているため、開発者はプロジェクトに適したツールを持っています。 ピラミッドの場合、開発者はデータベース、URL構造、テンプレートスタイルなどを自由に選択できます。 ただし、DjangoにはWebアプリケーションに必要なすべてのバッテリーが含まれているため、Djangoをインストールして作業を開始するだけです。
DjangoにはORMが付属していますが、PyramidとFlaskには開発者がデータを保存する方法(または選択するかどうか)を選択できます。 一般に、非Django Webアプリケーションで最も一般的なORMはSQLAlchemyですが、他のオプションはDjangoDB、MongoDB、LevelDB、およびSQLiteです。
私のプロジェクトでDjangoとWeb2pyを選択する必要がある場合、開発者であること。 フレームワークの利点と制限の両方について、いくつかのアイデアが必要です。 それでは、DjangoとWeb2pyを比較しましょう-
ジャンゴ
Djangoのコミュニティは大きなプラスです。 これは実際、開発者にとってリソースの富が大きくなることを意味します。 具体的には、これは次のようになります-
- ドキュメンテーション
- オープンソースリソース
- サードパーティアプリのサポート
- 展開サポート
- 役に立つ開発者がいるIRCチャンネル
Djangoには、開発チームとドキュメントの非常に大きなコミュニティがあります。 ユーザーのロジック(サインアップ、認証)、非同期タスク、API作成、ブログなどを自動化できる多くのサードパーティアプリを提供するため、複雑なバックエンドの作成を扱う際に適切なフレームワークです。
Web2py
Web2pyは、単純なWebアプリまたはHTTPサーバーの高速開発に適しています。 以下はweb2pyの利点と制限の一部です。
Web2pyの利点
以下は、Web2pyフレームワークの利点の一部です-
- Web2pyは、開発の速度と単純さの点でDjangoおよびFlaskと比較すると、潜在的なフレームワークです。 Web2pyはpythonベースのテンプレート言語を使用するため、Python開発者はテンプレートをビューとして記述する基本を理解した直後にコードの記述を開始できます。
- Web2pyは、実行時間を短縮し、コンパイルされた方法でコードを配布できるようにする最適化としてPythonコンパイル済みコードを実行できます。
Web2pyの制限
以下は、フレームワークの制限の一部です。
- Web2pyはdoctestsをサポートしていますが、ユニットテストはサポートしていません。 現在、doctestsは範囲が限られているため、最適な選択ではありません。
- プロダクションモードと開発モードに違いはありません。 例外が発生した場合、チケットは常に生成されるため、エラーを確認するにはチケットに移動する必要があります。 これは本番サーバーの場合には役立つかもしれませんが、開発者はチケット番号をチェックするのではなく、エラーを即座に確認する必要があるため、開発環境では困難です。
- Web2pyには、多くの種類のデータベースエンジンを抽象化できる優れたデータベース抽象化レイヤー(DAL)がありますが、強力なORMがありません。 比較的大きなモデルを扱っている場合、コードはネストされたすべての定義と属性に散らばってしまい、事態が複雑になります。
- web2pyのIDEサポートは非常に貧弱であるため、修正なしでは標準のPython開発ツールを使用できません。
DjangoとWeb2pyフレームワークはフルスタックフレームワークです。 つまり、フォームジェネレーターからテンプレートレイアウトやフォーム検証まで、必要なすべてのコードを提供し、特定のニーズに応じて物事を書くことができます。
ただし、FlaskやPyramidなどの非スタックフレームワークでは、フル機能のWebサイトを作成する場合、多くのコードと余分なビットを自分で追加する必要があります。 これには多くのスキルと時間がかかります。
Dash
Dashは、ダッシュボード用のリアクティブフレームワークを構築する特定のタスクのために完全に設計されています。 Dash by Plotlyは、Python開発者がJavascriptやフロントエンドのWeb開発を習得しなくてもインタラクティブなWebアプリを作成できる優れた方法です。 Dashは、Flask、Plotly.js、React、React Jsの上に構築されています。
フレームワークの異なるカテゴリに属するため、Dashと他のフレームワーク(上記)の比較はありません。 以下は、他のインタラクティブなダッシュボードフレームワーク(Jupiterダッシュボード、matplotlibなど)よりもダッシュを好む理由の一部です-
- Dashはボイラープラッターをほとんど必要としないため、わずか50行のコードで簡単な「hello world」Dashアプリを作成できます。
- Dashアプリ全体は、世界で最も優先される言語であるpython言語で記述されています。
- 独自のpythonコードで、ドロップダウン、テキスト入力、スライダー、グラフなどのダッシュインタラクティブコンポーネントをリアクティブダッシュ「コールバック」にバインドできます。
- Dashアプリの複雑なUIには、複数の入力、複数の出力、および他の入力に依存する入力を含めることができます。
- 同時に、複数のユーザーがDashアプリで作業できます。
- Reactで独自のDashコンポーネントを作成するために、dashはReact.jsを使用してコンポーネントをレンダリングし、プラグインシステムを備えています。
- DashのGraphコンポーネントはインタラクティブであるため、開発者または作成者は、グラフ上のポイントをクリック、ホバー、または選択することに応答するダッシュアプリを作成できます。
結論
多くの利用可能なpythonフレームワークから適切なフレームワークを選択することは、プロジェクトの種類、複雑さ、小規模またはエンタープライズレベルのプロジェクト、利用可能なコミュニティサポートの種類または利用可能なオンラインリソース、スケーラビリティ、セキュリティなどにのみ依存すると結論付けることができます
上記のPythonフレームワークはクラスで最高ですが、独自の利点と欠点があります(プロジェクトの要件によって異なります)。 したがって、あるタイプのフレームワークは、すべての種類のプロジェクトに適しているわけではありません。