ニュース - サイトにアクセス
3つの13-オンラインカードゲーム 下のリンクをクリックして招待コードを生成するか、ゲームに参加して、友人と3人の13をプレイします。コードで招待します ゲームに参加します ***
購入してください

による Daisy / ビュー | 買う | 暗号通貨で購入します



オンラインでカラースコークを再生 - 無料のコロードクゲーム これは無料の色の数独(コロードク)ゲームです。 ***

による Daisy / ビュー | 買う | 暗号通貨で購入します


実用的なWebベースの深い学習とセキュリティの例 第3版 シャーロット・ハーパー 2024年7月3日 序文: Web用のソフトウェアの構築におけるセキュリティ上の考慮事項は、信頼できる、安定しており、実用的な目的に役立つプロトタイプを設計しながら、Web開発者の計画と実行の重要な部分です。 HTML、JavaScript、CSSの実装とPython、C/C ++、Java、Bashを実装するバックエンドソフトウェアを実装するだけでなく、HTML、JavaScript、CSSの実装によりDOM(ドキュメントオブジェクトマークアップ)があり、Web開発者に創造性を表現する多種多様なプロジェクトを作成する自由と力を提供し、使いや使いや機能を提供し、謙虚さと機能を描写し、キャラクターを描写し、キャラクターを描写しているため、魅力的なキャラクターを提供するためのさまざまなプロジェクトを提供し、さまざまな創造性を生み出し、さまざまなプロジェクトを提供します。時間を殺したり、インターネットで何かを成し遂げたりするには、通常はタッチスクリーンのスマートフォンデバイスで。ほとんどの人は、ゼロからウェブサイトを構築したいときにどこから始めればいいのかさえ知らないでしょう、彼らは他の人のウェブサイトで開始し、機能、信頼性、使いやすさ、特に創造性が制限されたものを構築する傾向があります。最新の強力なツールをすべて自由に使用できるようにして、時間を押す時間を無駄にせずに有用なものを構築し、特にソフトウェアにお金を払うためにお金を浪費することは、とにかく使用したいと思っています。この本を読んで、私があなたに教えたいことを学び、またはあなたの目標について個人的に話し、正しい方向に何らかのガイダンスを得ることさえ、あなた自身のソフトウェアをコードして書くことを学び、次の影響力のある強力で、合理化された、重要なウェブアプリケーションを構築するための時間を確保し、あなたが聴衆を正確に満たすことを望んでいるものを正確に満たすことを学ぶために何らかの時間を取るためにやる気があります。 私について: 私は幅広いソフトウェア開発者ですf C/C ++、Java、Python、HTML、CSS、JavaScriptの経験。私は人々が使用し、訪問したい、さらには時間を学び、再作成し、殺すために使用することに夢中になりたいウェブサイトを構築し、最も重要なことに、私はソフトウェアを販売しています。あなたがウェブサイトをどのように見て機能させたいかについて正確に考えていたなら、あなたは私をサポートすることをいとわなかったので、私はあなたのニーズを満たしている間、私は自分のニーズを満たすことができ、あなたは自分でウェブサイトを運営するコストを賄うことをいとわないので、次のYouTube、Tiktok、Twitter、Google、またはあなたがアクセスできるハイテックセキュリティアプリのみを構築します。私の時間を売ろうとする代わりに、私はあなたの時間を買おうとしています:私はあなたにすでに存在する情報でアプリ(ウェブサイト)を構築するように話したいと思います。そして、私を明確にさせてください、私があなたに与える教育は非公式になります。あなたは学校に行って、フォーマルでこれらすべてを学ぶことができます学校でこの本を読んだり、この本を読んだり、あなたの課題を完成させ、あなたの教育から多くを取り除いたりしますが、私は正式にあなたを熱い席に置いて、課題を完了するように頼むことはありません。私はあなたの教授ではありません。あなたはあなた自身の個人的な成功に駆り立てられたキャリアに向けてあなたを導きたい友人のように私を考えることができます。そして、私もあなたに成功を売っていません、あなたはあなたの時間とともにそれを買う必要があります。コードの学習には急な学習曲線があり、決して簡単ではなかったか、そうあるはずです。自分でアプリを学び、構築するためにイライラしている場合でも、できる限り一生懸命働き、失敗し、再試行し、再試行する必要があります。それはコード自体の性質です。コードは、プログラマーエラーメッセージを提供するように設計されたコンパイラによって実行されます。これらは、検索エンジンにエラーをコピーして他の人の例を読むだけでも、コードの方法を教えます。そして、私は言わなければなりません、あなたは非常に金持ち、賢く、成功する必要はありません、またはアプリを構築するためにディテール指向または整理されています。コンピューターはあなたのためにその組織の世話をします。試行錯誤を通して忍耐し、焦点を維持し、自分がしていることに一生懸命働く必要があります。そして、あなたはあなたがしていることの全体で非常に成功したキャリアを持っているでしょう。 私という人間: 最後のセクションは学習に関するものであり、あなたがこの本からの方法をとることについてのことを理解しています。私は正確に誰ですか?それは複雑な質問です。私は自分自身が不明です。なぜなら、私が時々この本をコーディングしたり書いたりすることを困難にすることができる医学的状態に苦しんでいる間、私は自分自身を紹介することになると私の人生をより困難にする社会化とアイデンティティの問題に挑戦を提示します。要するに、あなたがこの本を読んでいるなら、あなたはそれをひっくり返してそれが役に立つと思ったので、あなたがそれを家に持ち帰りました、またはあなたがあなたがあなたにあなたがしていることをすべて成功させたいと思っている私はあなたのような心のある個人です。私は自分自身、ソフトウェアですEloperと学生、そして私は、ビジネスのラインに関係なく成功を促進するために、大きなパズルのように一緒に収まるようにコピーするための例をコピーするための例を与えることによって、彼らが生活を楽にすることで自分の生活を楽にしたい他の学生のためにこの本を書いています。主に、これが私がしていることです。私は自分自身や他の人々が成功するのを助けるためにアプリを構築します。私も著者ですが、これは私の最初の出版物であり、ポートフォリオを有用なドキュメントにまとめるために完了するつもりです。私もアーティストです。 私はあなたにこれを認めます、私はちょっと奇妙な人です。私は完璧ではありません。私は、大学を去り、州を去るように私を導いて、より多くの成功を収めて自分の名前を作ろうとする法律にさえ走っていました。私は出生時の女性で、化粧をし、自分の写真を撮り、ドレスや他の女性の服を着て、女性として自分自身を意識し続けていますature。私は過去に他の人たちに、WebAppsの執筆と構築に苦労することにつながる問題がありました。この本を早く手に入れることができなかったことをお詫びします。これが必要でした。私のように見え、私のように機能し、同じことをするコードを読み、書きたいと思うでしょう。同じことをしますが、さらに良いことです。なぜなら、私のようにキーボードをマッシュするのではなく、自分でお金を求める本を作成するのではなく、人生で成功するために必要なリソースを持っているからです。私は家族の育ち、健康状態、医師、メディア、法律にあらゆる種類の問題を抱えており、私のコードは、分裂した欲求不満の世界でフェミニズムと女性の性質である闘争を深く反映しています。しかし、この本は私が深く気にかけているもの、私の赤ちゃん、私のポートフォリオ、そして私の生計を立てるので、私から学ぶためにあなたがテキストを家に持ち帰り、慎重にそれを熟成させるときのあなたの考慮に感謝します。私は完璧ではないことに留意してください、これOOKにはエラー、改訂、新しいエディションがあり、私の執筆を成功させるために、できる限り論理的な脳で考える必要があります。また、あなたが書くときに挑戦に直面しているときでさえ、私はあなたにとって良いことを意味することを理解してください。このように考えてみてください。コンピューターシステムをレンタルして、デジタルスペースで想像できることを実行し、遭遇したすべての情報を保存し、#$%!Yzeと整理し、それを理解することができれば、摂取している情報と公開さえ困難に遭遇するでしょう。私は同じ困難に遭遇したので、私はあなたにこれを言います。この本をあなた自身の責任で使用し、コミュニティやコミュニティと協力して安全な設定内でソフトウェアを構築し、間違った方法で失敗したり成功したりしても個人的に物事を取り入れないでください。私たちが働くネットワークの麻痺性世界規模、インターネットのおかげで、誰もが世界規模で行っている通常の問題に遭遇している間に、吸入され、引き裂かれ、擦り切れました。あなたは私がほんの少しの言葉を持っている人にあまり慣れていないかもしれませんが、私はあなたが読むことをお勧めします、あなたはあなたがあなたの仕事を完了するためにあなた自身のプロジェクトを構築しながら私を読み続けて理解し続けながら私を知るようになります。あなたの教授や教師があなたに割り当てられない限り、この本には宿題はありませんが、あなたが読んだときに自分でプロジェクトのポートフォリオを構築することを強くお勧めします。私のCapstoneプロジェクトは、この本で読むもののほとんどの基礎です。これは、以前のプロジェクトのコード、手作業で系統的に書くことを学んだコード、そして完全に単純なアプリをスピンアップできるポイントに成功するのに役立つ幅広いアイデアやヒントを組み込んだためです。インターネットで、あなたに宣伝されている、またはニュースで、あなたの友人や家族を使っている人気のあるアプリのように、見た目も振る舞いも振る舞います。 この本は何ですか: この本は、例ともチュートリアルです。ここでコード、コードの学習方法、コードのデバッグとエラーの修正に関する情報、手順のトラブルシューティングの手順、コードのバックアップと保存方法の手順、コードを破壊し、コードを展開し、コードを展開し、楽しい、魅力的で、魅力的で、中毒性のあるウェブサイトを構築し、APPの描写をすることができるようになります。あなたが構築するソフトウェアは、あなたのウェブサイトの訪問者であるエンドユーザーにとって、可能な限り最も魅力的であるために絶対的な最善の光になります。この本では、プラットフォームとセキュリティとしてのWebに焦点を当てたソフトウェアデザインの多くの例を示します。基本的なプロジェクトを構築することにより、学習体験を開始しますバックアップとスクリプト機能を備えたUnixシェルを埋めます。次に、基本的なブログWebサイトを調べ、写真とビデオ機能をブログにアップグレードし、これらの機能を使用してフリーソフトウェアを使用してセキュリティソリューションを使用し、プラグ可能な認証モジュール(PAM)を使用してサーバーを保護します。次に、ファイルの処理と処理、ビデオ編集、音声寄付、バーコードスキャン、光学文字認識などの概念を確認します。途中で、無料で有料のオプションを使用して、ソフトウェアをより便利かつ安全にするのに役立つAPIを調べます。途中で、バレルとリピーターの設計、砲塔とドローンの設計、その他のプリンシパルなど、銃器や弾薬の設計と製造などの物理的なセキュリティと過激派のツールを探求します。ゲームを構築するために途中で休憩を取ります、2Dと3Dエンジンを終わらせ、基本​​的な寸法レンダリングソフトウェアとシリコンゴムでそれぞれ電子振動マッサージャー鋳造機のケーススタディの例で埋め込まれたハードウェアを使用します。途中で、ソフトウェアをよりよく保護するために、すでに利用可能な機械学習ソリューションも採用します。また、プロセスを合理化および保護するために、Webで利用可能なストックツールを使用します。この本は、Webアプリケーションを構築し、コンピューターおよび組み込み機械システムの専門的なネットワークと統合することに成功するためのガイドであり、全体的なソフトウェアと埋め込みハードウェアの構築ガイドと、背景知識や以前の経験のないガイドです。 この本はそうではありません: 本当にウェブサイトを持ちたい場合は、単純なストアをセットアップして必要なものを販売したり、ブログを投稿したり、写真やビデオを投稿したり、コードを1行に書いたりすることなく、その他のコードを書くことなく、単純なストアを販売するだけです。この本はそうではありません。この本は、より便利で完全にソフトウェアを構築する方法を教えてくれます、既に見つけられるあらゆるソフトウェアよりも機能的かつ安全であり、まだプロトタイプである最新のソフトウェアを展開しているため、古い企業が運営するスケールで実行するのに費用がかかり、実際に何もしていない人々のためにお金を稼ぐために設定された後方の複雑な企業にアピールしません。この本に密接に従うと、コードを書き、調査コードを作成し、独自のアプリを作成すると、自分がしていることからお金を稼ぐことができます。私はこの本から、人々が必要としたい情報が含まれており、私のアプリを購入または使用するときにすでに購入しているため、この本からお金を稼ぎます。この本はあなたのためのアプリを構築しませんが、正しい方向に向けて、あなたが必要とするツールと、ウェブのソフトウェアの構築におけるあなた自身の成功を促進するスキルとヒントをあなたに指しています。例として、あなたはあなたとあなたのサポーター、ゲスト、顧客、友人、友人、あなたのサポーター、あなたのサポーター、顧客、友人、そしてあなたのコードを書く必要があるすべてのコードを書く必要がありますAmily、訪問者、請負業者、およびインターネットの人々は、使用とサポートを望んでいます。 あなたが学ぶこと: この本は、ソフトウェア、本当に機能的で有用なソフトウェア、メディア記録、顔認識、マシン読み取り可能なゾーンバーコードスキャンなどのセキュリティ機能、ビデオと写真を認証、記録、レンダリングするWeb API、BluetoothやField(NFC)通信などのメッセージを交換する方法を教えてくれます。この本は、ネットワーク化されたコンピューターの使用方法、Debian Linuxに焦点を当てた方法、BASHコードを構築してソフトウェアをシームレスで自動化されたそよ風にする方法、ダイナミックなメッセージを提供するためのバックエンドとしてPythonコードを構築する方法、ブートストラップを使用してCSSスタイルを使用して、ネットワークログインを介したユーザーのログインと対話を介したネットワークを介したネットワークを介したネットワークを介して、ネットワークを介してネットワークを構築できるようにする方法を教えてくれます。目的、IDスキャン、画像およびビデオモデレーション、データソフトウェアを安全に保つためのトランザクション、支払い処理、暗号通貨取引、非同期タスクなど。バッテリー、充電器、マイクロコントローラー、サーキット、モーター、センサーを使用して、はんだ、ワイヤー、3Dプリント、および鋳造材料を使用して、独自のBluetoothデバイスを構築する方法を学びます。添加剤の製造とツールとダイアキングに適用される3D設計プリンシパルを実証します。そのため、統合されたバッテリー、充電器、電子回路、機能出力を備えた独自の埋め込みハードウェアデバイスを製造できます。そして、それらをBluetoothとWebでネットワーク化します。具体的には、2つのケーススタディ、振動するマッサージャーと自家製の銃器を調べます。どちらも、グラフィカルインターフェイスまたはコマンドラインユーティリティとして利用できるOpenSCADでプログラムされ、より迅速な結果のためにWebに統合できます。 あなたは、以前の経験なしでゼロからウェブサイトを構築して展開する方法を学び、それを機能的で、安全で、美しく、最も便利にしますy実用的。機械学習とコンピュータービジョンを使用して、サイトを安全で実用的なものにし、ウェブサイトからビデオとオーディオを記録し、音楽を寄付し、音楽を作成し、有用なサンプルを作成し、他のWebサイトを活用して、あなたが提供するすべての有用な情報を提供し、さらに重要な情報を提供する必要があるすべての有用な情報を共有するために、他のウェブサイトの最良のネットワークを構築することでノイズを突破する方法を学びます。この本は、メディア、セキュリティ、機械学習に最も重点を置いています。これらは、適切なユーザーを引き付け、現実的で実用的で、実用的で、実践的で魅力的な方法で間違ったソフトウェアを外すことで、Web向けのソフトウェアを構築するのに役立つ主要な3つのコンポーネントです。 この本は、Unix、特にDebian(Ubuntu)、Bash Shell、Python、HTML、CSS、JavaScript、およびPythonのような多くの便利なソフトウェアパッケージを教えています。EST、およびGITやFFMPEGなどの便利なBASHソフトウェア。また、暗号通貨を自動的に取引する方法を教え、暗号通貨や通常のデビットカードから支払いを行いながら、そうすることを選択した場合は、訪問者に収益のシェアを支払います。広告を通じてあなたのウェブサイトからお金を稼ぐ方法、検索エンジンのアプリを準備し、迅速にする方法を教えてくれます。顧客が検索するために検索するものの最初のランキングにランク付けされ、できるだけ多くの一般的な検索にランク付けします。ソフトウェアを販売したり、宣伝したり、サービスを探しているクライアントにアピールしたり、すでに存在し、安価でうまく機能する道を通してインターネット上で自分の名前を作る方法を教えます。あなたのために働くクラウドコンピューターにデータを保存し、あなたのデータを安く保存する方法、あなたのユーザーが望むこととあなたが望むことを行うウェブサイトを計画して構築する方法、そしてあなたのサイトを置くことによってあなたのユーザーをエンゲージメントさせる方法を教えます通知、電子メール、テキストメッセージ、電話、その他の通話を使用して電話をタップして、ユーザーをユーザーを自由に使用できるようにして、保護されているボタンをクリックするだけで自由に使用できます。この本は、テキストから写真、写真、音声まで、メディアを大量に公開して配布すること、エンドユーザー(顧客)に良い印象を与え、あなたとあなたのみを代表するアプリであり、あなたのソフトウェア、そしてあなたの会社が可能な限り見栄えを良くするために、自分自身を販売する方法で自分自身を販売することに焦点を当てます。また、コーディングのヒント、メイクアップや写真などの実用的な虚栄心、モデリングや演技など、私からいくつかのヒントとトリックを学びます。これは、自分自身とあなたの会社を、プラットフォームの健全なバランスをとりながら、ソフトウェアを実現するために必要なコンテンツを配布しながら、利用可能なすべてのツールを使用して可能な限り最高の光で描写するために重要です。必要以上に努力、仕事、またはお金がありません。 この本は、理由から「実用的なWebベースのディープラーニングとセキュリティによる例」と呼ばれています。特に、特にWeb専用に、特にセキュリティに焦点を当てて、実用的な観点から、テキストで概説されている実用的な目的を果たす作業コードの例を扱っています。このテキストの学習コンポーネントには、機械学習、コンピュータービジョン、フェイシャル認識、画像とビデオのモデレーション、画像の強化、解像度の強化、画像キャプション、および本物の画像の画像の性質などの画像から供給された予測メトリックなどの他のタスクなどのタスクなどのタスクなどのタスクなどのタスクなどのタスクなど、コンピューターの写真を撮影する予測メトリックなど、Webで実行する方法も含まれます。機械学習は、Webセキュリティとソフトウェアセキュリティに関しては非常に重要です。これは、それ以外の場合は不可能なタスクをプリフォームすることができるためです。あなたのコンピュータはあなたにログを記録するかもしれませんパスコードを使用しますが、顔でログインする場合、使用する方が安全かもしれません。サーバーコンピューターを安全にすることができます。通常、ユーザー名とパスコードを求めてログインするコンピューター、新しいログインまたは新しいIPアドレスの確認トークンを使用して、大規模で使いやすく、基本的に安全で強力なソフトウェアを構築する場合は、これで十分かもしれません。電子メールサービスやテキストメッセージサービスなど、他の人のソフトウェアに密接にソフトウェアを結び付けるだけで、ソフトウェアを安全にしたり、誰か(使用するサイト)を安全にするには十分ではありません。 完璧に安全なソフトウェアを構築する人は誰でも、これが意味することのある程度の感覚を持っています。ソフトウェアは本質的に安全ではありません。なぜなら、アクセスに使用するデバイスとアカウントは、常に自由に自由に使えるとは限らず、ソフトウェアを意図していない人の手に渡る可能性があるため、ソフトウェア自体にリスクをもたらす可能性があるためです。これはこの本の焦点です。ネットワーク化されたコンピューターはデフォルトで保護されていますWebサーバーは、サーバー自体で実行されている最先端のセキュリティツールを提供するため、長いキートークン、SSHまたはSECURE SHERLEキーがあり、Webサーバーでセキュリティが最適です。 Webサーバーは、ユーザーがネットワークソフトウェアにアクセスできる場所であるため、ユーザーのデバイスの最も強力な部分であるユーザーのWebブラウザにアクセスできます。このツールキットは、テキスト、表示されるWebページをレンダリングでき、画像、オーディオ、ビデオ(顔や状態IDの写真など)を録画し、Bluetoothラジオデバイスに読み書きできることもあり、近いフィールドトランスポンダータグ、安価なキーカード、FOBS、ステッカー、リング、さらには、Web sect by con fid con sec by seen sec by cons con sec by s con sec by s con sec by s con s con fire by con fired by s con s con s con s con s con fired by s con fired by cons eman自由に使えるすべてのツールを使用して、この本を使用して、安全なWebサイトを構築するための知識を身に付け、全体的に安全なものになりますあなたのために働き、あなたの入札を行い、見た目も感じたコンピューターシステムも正しいと感じています。 どこから始めるか: 特に、この本で詳細に説明し、そのユースケースとその実用的な例を文書化する前述のツールのコードの経験がある場合、必要な正確なコードで、この本または任意のセクションを開始するセクションをスキップすることを歓迎します。コードを書く経験がない場合は、この本をすべて読むことを強くお勧めします。特に、この本があなたに合っていることを確認するために、前のセクションを読むことをお勧めします。この本があなたに合っていない場合は、ウェブ開発について学ぶことに興味があるかもしれない友人や親relativeに贈ることを検討し、それを借りて、教師として失敗したギャップを埋めるために彼らから学ぶことを検討してください。あなたがするところから始めて、あなたが有用なアプリを構築するつもりなら、この本のすべての部分が役立つでしょう、dエンドユーザーを念頭に置いて...
例による実践的な Web ベースの深層学習とセキュリティ

実用的なWebベースの深い学習とセキュリティの例 第3版 シャーロット・ハーパー 2024年7月3日 序文: Web向けのソフトウェアの構築におけるセキュリティ上の考慮事項は、信頼できる、安定しており、実用的な目的に役立つプロトタイプを設計しながら、Web開発者の計画と実行の重要な部分です。 HTML、JavaScript、およびCSSの実装と、Python、C/C ++、Java、Bashを実装するバックエンドソフトウェアの実装により、Dom(Document Object Markup)は、Web開発者に自由と力を提供し、さまざまなプロジェクトを作成する自由と力を提供します。創造性、使いやすさと機能性を提供し、謙虚さと性格を描写し、使いやすさを提供するだけでなく、平均的なジョーにとって魅力的な利便性と重要なサービスを提供します。時間を殺したり、インターネットで何かを成し遂げたりするには、通常はタッチスクリーンのスマートフォンデバイスで。ほとんどの人は、からウェブサイトを構築したいときにどこから始めればよいかさえ知らないでしょうスクラッチ、彼らは他の人のウェブサイトで開始し、機能、信頼性、使いやすさ、特に創造性に限定されたものを構築する傾向があります。 、特にソフトウェアへの高価なサブスクリプションのためにお金を払うお金を無駄にして、使いやすさと柔軟性の制限を考えると、とにかく使用したい人はほとんどいません。この本を読んで、私があなたに教えたいことを学んだり、あなたの目標について個人的に話したり、正しい方向に何らかのガイダンスを取得したり、自分のソフトウェアをコードして書くことを学ぶ意欲がある場合は、この本を家に持ち帰り、次の影響力のある、強力で、合理化された、重要なWebアプリケーションを構築するために時間を確保します。 私について: 私はソフトウェア開発者ですC/C ++、Java、Python、HTML、CSS、JavaScriptの経験の範囲。私は人々が使用し、訪問したい、さらには時間を学び、再作成し、殺すために使用することに夢中になりたいウェブサイトを構築し、最も重要なことに、私はソフトウェアを販売しています。あなたがウェブサイトをどのように見て機能させたいかについて正確に考えていたなら、あなたは私をサポートすることをいとわなかったので、私はあなたに会っている間、私自身のニーズを満たすことができ、あなたは自分でウェブサイトを運営するコストを賄うことをいとわないでしょう。次のYouTube、Tiktok、Twitter、Google、またはアクセスできるハイテクセキュリティアプリでさえ構築します。私の時間を売ろうとする代わりに、私はあなたの時間を買おうとしています:私はあなたにすでに存在する情報を自分でアプリ(ウェブサイト)の構築に話したいと思います、そしてあなたがあなたが独立したソフトウェア開発者になるために必要なものを教えてください、起業家は、あなたが望むあらゆる分野で成功したキャリアをリードしています。そして、私を明確にさせてください、私があなたに与える教育は非公式になります。あなたは学校に行って、これらすべてをで学ぶことができます正式な教育、または学校でこの本を読んで、あなたの課題を完成させ、あなたの教育から大いに奪うことさえありますが、私は正式にあなたを熱い席に置いて、課題を完了するように頼むことはありません。私はあなたの教授ではありません。あなたはあなた自身の個人的な成功に駆り立てられたキャリアに向けてあなたを導きたい友人のように私を考えることができます。そして、私もあなたに成功を売っていません、あなたはあなたの時間とともにそれを買う必要があります。コードの学習には急な学習曲線があり、決して簡単ではなかったか、そうあるはずです。自分でアプリを学び、構築するためにイライラしている場合でも、できる限り一生懸命働き、失敗し、再試行し、再試行する必要があります。それはコード自体の性質です。コードは、プログラマーエラーメッセージを提供するように設計されたコンパイラによって実行されます。これらは、検索エンジンにエラーをコピーして他の人の例を読むだけでも、コードの方法を教えます。そして、私は言わなければなりません、あなたは非常に金持ちで賢くなる必要はありません、Assful、または詳細指向または整理さえ、アプリを構築するために整理されています。コンピューターはあなたのためにその組織の世話をします。試行錯誤を通して忍耐し、焦点を維持し、自分がしていることに一生懸命働く必要があります。そして、あなたはあなたがしていることの全体で非常に成功したキャリアを持っているでしょう。 私という人間: 最後のセクションは学習に関するものであり、あなたがこの本からの方法をとることについてのことを理解しています。私は正確に誰ですか?それは複雑な質問です。私は自分自身が不明です。私は時々この本をコーディングしたり書いたりすることを困難にすることができる病状に苦しんでいるので、自分自身を紹介することになると私の人生をより困難にする社会化とアイデンティティの問題に課題を提示します。要するに、あなたがこの本を読んでいるなら、あなたはそれをひっくり返してそれが役に立つと思ったので、あなたがそれを家に持ち帰りました、またはあなたがあなたにとってあなたにとって私はあなたが成功するのを見たいと思っているような心のある個人ですあなたがすることすべて。私は自分自身がエンジニアです、開発者と学生、そして私は、ソフトウェアのハンドブックを手に入れたいと考えている他の学生のためにこの本を書いています。 、有用で、大きく、機能的で、まとまりがあり、魅力的なアプリがあり、ビジネスラインに関係なく成功を促進できます。主に、これが私がしていることです。私は自分自身や他の人々が成功するのを助けるためにアプリを構築します。私も著者ですが、これは私の最初の出版物であり、ポートフォリオを有用なドキュメントにまとめるために完了するつもりです。私もアーティストです。 私はあなたにこれを認めます、私はちょっと奇妙な人です。私は完璧ではありません。私は、大学を去り、州を去ることを導いて、より多くの成功を収めて自分の名前を作ろうとする法律にさえ告げました。私は出生時の女性で、化粧をし、自分の写真を撮り、ドレスや他の女性服を着て、自分を意識し続けています本質的に女性。私は過去に他の人たちに、WebAppsの執筆と構築に苦労することにつながる問題がありました。この本を早く手に入れることができなかったことをお詫びします。あなたはこれが必要でした。あなたは私のように見え、私のように機能し、同じことをするコードを読み、書きたいと思うでしょう。それのために、あなたはあなたの人生で成功するために必要なリソースを持っています。私は家族の育ち、健康状態、医師、メディア、法律にあらゆる種類の問題を抱えており、私のコードは、分裂した欲求不満の世界でフェミニズムと女性の性質である闘争を深く反映しています。しかし、この本は私が深く気にかけているもの、私の赤ちゃん、私のポートフォリオ、そして私の生計を立てるので、私から学ぶためにあなたがテキストを家に持ち帰り、慎重にそれを熟成させるときのあなたの考慮に感謝します。私はそうではないことに留意してくださいECT、この本にはエラー、改訂、新しいエディションがあり、私の執筆で成功した経験を積むために、あなたの論理的な脳をできる限り考える必要があります。また、あなたが書くときに挑戦に直面しているときでさえ、私はあなたにとって良いことを意味することを理解してください。このように考えてみてください。コンピューターシステムをレンタルして、デジタルスペースで想像できることを実行し、遭遇するすべての情報を保存し、#$%!Yzeと整理し、それを理解するようになります。必然的に、あなたが摂取している情報や公開さえも困難に遭遇します。私は同じ困難に遭遇したので、私はあなたにこれを言います。この本をあなた自身の責任で使用し、コミュニティやコミュニティと協力して安全な設定内でソフトウェアを構築し、間違った方法で失敗したり成功したりしても個人的に物事を取り入れないでください。 、そしてなぜ私はあなたにこのテキストを持ってきて、あなたが狂気の道を分裂することなく成功するのを助けることができる理由Aves Meは、私たちが働くネットワーク、インターネットのパラレリスティックグローバルスケールのおかげで、誰もが世界規模で行っている通常の問題に遭遇している間、台無しにされ、破れ、擦り切れました。あなたは私がほんの少しの言葉を持っている人にあまり慣れていないかもしれませんが、私はあなたが読むことをお勧めします、あなたはあなたがあなたの仕事を完了するためにあなた自身のプロジェクトを構築しながら私を読み続けて理解し続けながら私を知るようになります。あなたの教授や教師があなたに割り当てられない限り、この本には宿題はありませんが、あなたが一緒に読んだときに自分でプロジェクトのポートフォリオを構築することを強くお勧めします。学んだことを適用してください。私のCapstoneプロジェクトは、以前のプロジェクトのコード、手作業で整然と書くことを学んだコード、そして私を助けた幅広いアイデアとヒントを学んだコードを組み込んでいるため、この本で読むもののほとんどの基礎です。簡単なアプリをスピンアップできるポイントに成功しますインターネットで、あなたに宣伝されている、またはニュースで、あなたの友人や家族を使用している人気のあるアプリのように、完全に機能し、外観と振る舞いをしています。 この本は何ですか: この本は、例ともチュートリアルです。ここでコード、コードの学習方法の手順、コードのデバッグとエラーの修正に関する情報、手順のトラブルシューティング、コードのバックアップと保存方法の手順、コードを破損した場合、コードを保護し、展開し、展開あなたのコードは、面白く、魅力的で、中毒性のあるインタラクティブなWebサイトを構築します。あなたが構築するソフトウェアは、あなたのウェブサイトの訪問者であるエンドユーザーにとって、可能な限り最も魅力的であるために絶対的な最善の光になります。この本では、プラットフォームとセキュリティとしてのWebに焦点を当てたソフトウェアデザインの多くの例を示します。基本を構築することにより、学習体験を開始しますバックアップとスクリプト機能を備えたUnixシェルを使用してOjectを使用します。次に、基本的なブログWebサイトを調べ、写真とビデオ機能をブログにアップグレードし、これらの機能を使用してフリーソフトウェアを使用してセキュリティソリューションを使用し、プラグ可能な認証モジュール(PAM)を使用してサーバーを保護します。次に、ファイルの処理と処理、ビデオ編集、音声寄付、バーコードスキャン、光学文字認識などの概念を確認します。途中で、無料で有料のオプションを使用して、ソフトウェアをより便利かつ安全にするのに役立つAPIを調べます。途中で、バレルとリピーターの設計、砲塔とドローンの設計、その他のプリンシパルなど、銃器や軍需品の設計と製造などの物理的なセキュリティや過激派のツールを探求します。自己防衛と弾力性を示します。ゲームを構築するために途中で休憩を取ります、2Dと3Dエンジンを終わらせ、基本​​的な寸法レンダリングソフトウェアとシリコンゴムでそれぞれ電子振動マッサージャー鋳造機のケーススタディの例で埋め込まれたハードウェアを使用します。途中で、ソフトウェアをよりよく保護するために、すでに利用可能な機械学習ソリューションも採用します。また、プロセスを合理化および保護するために、Webで利用可能なストックツールを使用します。この本は、Webアプリケーションを構築し、コンピューターおよび組み込み機械システムの専門的なネットワークと統合することに成功するためのガイドであり、全体的なソフトウェアと埋め込みハードウェアの構築ガイドと、背景知識や以前の経験のないガイドです。 この本はそうではありません: 本当にウェブサイトを持ちたい場合は、単純なストアをセットアップして必要なものを販売したり、ブログを投稿したり、写真やビデオを投稿したり、コードを1行に書いたりすることなく、その他のコードを書くことなく、単純なストアを販売するだけです。この本はそうではありません。この本は、より便利で完全にソフトウェアを構築する方法を教えてくれますまだプロトタイプである最新のソフトウェアを展開しているため、古い企業が運営するスケールで実行するのに費用がかかり、後方の複雑な企業にアピールしないため、既に見つけられるあらゆるソフトウェアよりも機能的で安全に機能しています。本当に何もしていない人のためにお金を稼ぎます。この本に密接に従うと、コードを書き、調査コードを作成し、独自のアプリを作成すると、自分がしていることからお金を稼ぐことができます。私はこの本から、人々が必要としたい情報が含まれており、私のアプリを購入または使用するときにすでに購入しているため、この本からお金を稼ぎます。この本はあなたのためのアプリを構築するものではありませんが、正しい方向に向けて、必要なツールと、Web用のソフトウェアの構築におけるあなた自身の成功を促進するスキルとヒントをあなたに武装させます。コードあなたは例として記述する必要があり、あなたとあなたのサポーター、ゲスト、顧客、ソフトウェアにまとめる準備ができています、riends、家族、訪問者、請負業者、およびインターネットの人々は、使用してサポートしたいと考えています。 あなたが学ぶこと: この本は、ソフトウェア、本当に機能的で有用なソフトウェア、メディア録音、顔認識などのセキュリティ機能、マシン読み取り可能なゾーンバーコードスキャン、Web APIのようなセキュリティ機能、ビデオと写真を認証、記録、レンダリングする方法、Bluetoothなどのメッセージの交換方法を教えてください。および近接フィールド(NFC)コミュニケーション。この本は、ネットワーク化されたコンピューターを使用する方法、Debian Linuxに焦点を当てた方法、Bashコードを構築する方法、ソフトウェアのインストールとバックアップをシームレスで自動化されたそよ風にする方法、ダイナミックメッセージ、スタイルを提供するためのバックエンドとしてPythonコードを構築する方法を教えてくださいブートストラップを使用してCSSスタイルを使用して、ネットワーク化されたデバイスを介してユーザーログインとインタラクティブ性を有効にし、インタラクティブなメディアや他のWebサイトとネットワークを構築して、検証用のテキストメッセージなどのセキュリティ機能を提供する目的、IDスキャン、画像およびビデオモデレーション、データソフトウェア、支払い処理、暗号通貨取引、非同期タスクなどを安全に保つためのラン作用。バッテリー、充電器、マイクロコントローラー、サーキット、モーター、センサーを使用して、はんだ、ワイヤー、3Dプリント、および鋳造材料を使用して、独自のBluetoothデバイスを構築する方法を学びます。添加剤の製造とツールとダイアキングに適用される3D設計プリンシパルを実証します。そのため、統合されたバッテリー、充電器、電子回路、機能出力を備えた独自の埋め込みハードウェアデバイスを製造できます。そして、それらをBluetoothとWebでネットワーク化します。具体的には、2つのケーススタディ、振動するマッサージャーと自家製の銃器を調べます。どちらも、グラフィカルインターフェイスまたはコマンドラインユーティリティとして利用できるOpenSCADでプログラムされ、より迅速な結果のためにWebに統合できます。 あなたは、以前の経験なしでゼロからウェブサイトを構築して展開する方法を学び、それを機能的で、安全で、美しく、最も便利にしますポータルに実用的です。機械学習とコンピュータービジョンを使用してサイトを安全で実用的なものにし、ウェブサイトからビデオとオーディオを記録し、音楽を寄付し、音楽を作り、有用なサンプルを作成し、ノイズを突破する方法を学びます。他のWebサイトを活用して、提供しなければならないすべての有用な情報を共有し、さらに重要なことに人々をソフトウェアやビジネスに連れて行くために、あなたがあなたのウェブサイトに直接リンクできるウェブサイトの最高のネットワークを構築することです。この本は、メディア、セキュリティ、機械学習に最も焦点を当てています。これは、適切なユーザーを引き付け、現実的で実用的な方法で間違ったソフトウェアを外すことで、Web向けのソフトウェアを構築するのに役立つ主要な3つのコンポーネントです。自動的で頑丈な間、実践と魅力的です。 この本は、UNIX、特にDebian(Ubuntu)、Bash Shell、Python、HTML、CSS、JavaScript、および多くの便利なソフトウェアパッケージを教えています。nリクエストのように、GitやFFMPEGなどの便利なBASHソフトウェア。また、暗号通貨を自動的に取引する方法を教え、暗号通貨や通常のデビットカードから支払いを行いながら、そうすることを選択した場合は、訪問者に収益のシェアを支払います。広告を通じてあなたのウェブサイトからお金を稼ぐ方法、検索エンジンのアプリを準備し、迅速にする方法を教えます。顧客があなたを見つけるために検索するものの最初のランキングにランク付けされ、多くの一般的なランキングでランク付けされます可能な限り検索します。ソフトウェアを販売したり、宣伝したり、サービスを探しているクライアントにアピールしたり、すでに存在し、安価でうまく機能する道を通してインターネット上で自分の名前を作る方法を教えます。私はあなたのために働くクラウドコンピューターにデータを保存し、あなたのデータを安く保存する方法、あなたのユーザーが望むこととあなたが望むことを行うウェブサイトを計画して構築する方法、そしてあなたのユーザーが従事させる方法を教えます通知、電子メール、テキストメッセージ、電話、その他の通路を使用して、電話でサイトをタップして、ユーザーを自由に使用できるようにして、ボタンをクリックするだけでユーザーを自由に戻します。この本は、メディアをテキストから写真、ビデオ、オーディオまで、メディアを大量に公開して配布することの実用性に焦点を当て、エンドユーザー(顧客)に良い印象を与え、作成するために自分自身を販売することに焦点を当てます。あなたとあなたのみを代表し、あなた、あなたのソフトウェア、あなたの会社を可能な限り最高の方法で見栄えを良くするウェブサイト、アプリ。また、コーディングのヒント、メイクアップや写真などの実用的な虚栄心、モデリングや演技など、私からいくつかのヒントとトリックを学びます。プラットフォームの健全なバランスをとる必要があるだけのコンテンツを配布しながら、あなたにEが必要以上に努力、仕事、またはお金のない実を結ぶ。 この本は、「実用的なWebベースの深い学習と例による例」と呼ばれています。理由は、特にWeb向け、特にセキュリティに焦点を当てて、実用的な観点からセキュリティに焦点を当てて、機能するコードの例を使用して、コードをコードすることを扱っています。テキストで概説されている実用的な目的。このテキストの学習コンポーネントには、機械学習、コンピュータービジョン、顔認識、画像とビデオのモデレーション、画像の強化、解像度の強化、画像キャプション、およびその他のタスクを処理するWebで実行する方法を紹介します。本物のコンピューターに伝達された画像、または光学コピー(画像の写真、または印刷された写真)としての画像の性質など、画像から供給された予測メトリック。機械学習は、Webセキュリティとソフトウェアセキュリティに関しては非常に重要です。これは、それ以外の場合は不可能なタスクをプリフォームすることができるためです。あなたのコンピューターパスコードでログインしますが、顔でログインする場合は、使用する方が安全かもしれません。サーバーコンピューターをこの安全なものにすることができます。通常、ユーザー名とパスコードを要求して、新しいログインまたは新しいIPアドレスの確認トークンを使用してログインしますが、大規模に構築している場合は、簡単です。基本的に安全で強力なソフトウェアを使用して、これで十分かもしれません。電子メールサービスやテキストメッセージサービスなど、他の人のソフトウェアに密接にソフトウェアを結び付けるだけで、ソフトウェアを安全にしたり、誰か(使用するサイト)を安全にしたりするには十分ではありません。 完璧に安全なソフトウェアを構築する人は誰でも、これが意味することのある程度の感覚を持っています。ソフトウェアは本質的に安全ではありません。なぜなら、アクセスに使用するデバイスとアカウントは、常に自由に自由に使えるとは限らず、ソフトウェアを意図していない人の手に渡る可能性があるため、ソフトウェア自体にリスクをもたらす可能性があるためです。これはこの本の焦点です。ネットワーク化されたコンピューターはデフォルトですWebサーバーは、サーバー自体で実行されている最先端のセキュリティツールを提供するため、長いキートークンとSSHまたはセキュアーシェルキーで固定されており、Webサーバーでセキュリティが最適です。 Webサーバーは、ユーザーがネットワークソフトウェアにアクセスできる場所であるため、ユーザーのデバイスの最も強力な部分であるユーザーのWebブラウザにアクセスできます。このツールキットは、テキスト、表示されているWebページをレンダリングでき、画像、オーディオ、ビデオ(顔や状態IDの写真など)を録画したり、Bluetoothラジオデバイスに読み書きしたり、近いフィールドに読み書きできることもできます。トランスポンダータグ、安価なキーカード、FOB、ステッカー、リング、さらには、Webサイトに結び付けられたWebサーバーによって生成および検証されたデータで読み書きできる一意のシリアル番号を備えたチップインプラント。自由に使えるすべてのツールを使用して、この本を使用して、安全なWebサイトを構築するための知識を身に付けます。あなたのために働き、あなたの入札を行い、見た目も感じたUREネットワーク化されたコンピューターシステム。 どこから始めるか: 特に、この本でコーディングの経験がある場合、またはこの本で詳細に説明する前述のツールのいずれかで、この本または任意のセクションで必要なコードを開始するセクションをスキップすることを歓迎します。同様に、ユースケースとその実用的な例を文書化します。コードを書く経験がない場合は、この本をすべて読むことを強くお勧めします。特に、この本があなたに合っていることを確認するために、前のセクションを読むことをお勧めします。この本があなたに合っていない場合は、Web開発自体について学ぶことに興味があるかもしれない友人や親relativeにそれを贈ることを検討し、それを借りて、私があなたを失敗させたギャップを埋めるために彼らから学ぶことを検討してください先生、または他の教師は私の前にしました。あなたがするところから始めて、あなたが便利なものを構築するつもりなら、この本のすべての部分が役立つでしょうpp、そして最高のアプリはエンドユーザーを念頭に置いて構築されていることを考えてください:顧客を知る。今、あなたは私を知っています、あなたはこの本を知っていて、あなたは始める準備ができています。まず、コンピューターをつかみます(ボックスストア、Amazon、または古いデスクトップが機能する最も安いラップトップでさえ、あなたのために機能する方法でセットアップします。 この本を読む方法: 強調表示されたテキストは、テキストがコマンドプロンプトに属し、実行するコードを書き込むことを示します。コマンドプロンプトは、キーボードに焦点を当てており、クリックをほとんどまたはまったく必要とせず、ワークフローをスピードアップし、物事を簡単にする必要があります。 はじめる: 飛び込みましょう。ローカルマシンにコードを作成することから始めて、インターネットに接続されたWebサイトを構築せずに開始します。これは、そもそも安全で、費用はかかりません。そしてあなたにとって簡単です。オペレーティングシステムに応じて、バッシュシェルに入ると少し違います。 Mac OSについては、この時点で仮想マシンをインストールすることをお勧めします。仮想マシン。 VirtualBoxやParalellなどのさまざまなプロバイダーは、仮想マシンを実行できますが、高速で合理化されたエクスペリエンスを作成するために推奨されるネイティブ環境を使用する場合は、マシンにUbuntuを直接インストールすることもできます。 LinuxまたはWindowsを使用している場合は、プロジェクトを作成するのは非常に簡単です。端末を開き、フィット感のあるサイズを調整し、ステップ2に従って開始します。Windowsを使用している場合は、ステップ1に従ってください。 ステップ1: - Windowsユーザーのみ Windowsでは、管理者とタイプとしてコマンドプロンプトを開きます WSL –Install ステップ2: - ここを続けるか、Windowsを使用していない場合はステップ1をここまでスキップします オープンターミナル(OSに応じて、WindowsのUbuntu、MacまたはLinuxのターミナル、または同様の名前と呼ばれます)は、プロジェクトを作成することから始めます。これは、ディレクトリを作成するMKDIRコマンドで行います。プロジェクトを保存するためにディレクトリを作成する必要がある場合は、推奨されます。ディレクトリに変更するCDコマンドと cd/path/to/directory-パスは、宛先ディレクトリの前にあるフォルダー(ファイル)です。デフォルトパスは〜または/home/username(ユーザー名がユーザー名)です。デフォルトのディレクトリに変更するには、CDまたはCDを入力してください〜 mkdirの例 - 「例」をディレクトリの名前に置き換えます これで、プロジェクトの作業ディレクトリがあります。別のマシンに切り替えたり、書いたコードを展開してWebの準備が整いたりする必要がある場合に備えて、このディレクトリを保存することが非常に重要であるため、次の数ステップでディレクトリをバックアップするスクリプトを作成します。しかし、スクリプトを構築するには少しコードが必要であり、コードはできるだけ便利になるために自動化する必要があります。スクリプトを作成して、最初にスクリプトを作成しましょう。スクリプトを作成して実行可能にすることから始めましょう。 sudo、chmod、touchを使用して、スクリプトに電話します


sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
これで、スクリプトを作成し、実行可能にし、編集する準備ができています。 Nanoは、クリックせずにテキストを編集できるテキストエディターです。これは、グラフィカルユーザーインターフェイスを使用するよりもはるかに簡単です。 Nanoを使用してファイルを編集するには、Nanoを使用してからファイルへのパスを使用します。スクリプトを作成するスクリプトを作成すると、そもそもスクリプトを作成することにかなり似ています。上記と同じコードを使用して、スクリプトの名前、「アスクリプト」を引数パラメーター1ドルに置き換えます。これにより、単にSudo Ascript Newscriptを入力することでスクリプトを呼び出すことができます。この時点で、「Newscript」をスクリプトの名前に置き換えることで、新しいスクリプトを作成できます。 Nanoのコードは次のように見えます。

sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
また、ナノを閉じるために、コントロールキーを押し続けてXを押し、Yを押して、ファイルを保存していることを示し、リターンを押します。次に、これらの3つのコマンドを入力してスクリプトを編集する代わりに、Sudo ascript scriptを入力してスクリプトを再度編集することができます。これはうまくいきます!また、新しいスクリプトをシェルで呼び出すことで簡単に実行できます。今すぐ保存しましょう。バックアップスクリプトを作成して、新しいスクリプトを保存してから、バックアップスクリプトをバックアップしながら、プロジェクトディレクトリにバックアップしましょう。

sudo ascript backup
今、ナノで:

sudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
ここで、/path/to/directoryは、mkdirで作成したプロジェクトへのパスです。後で、このような繰り返しのパスをループとリストでコピーする方法を学びます。このスクリプトを実行してコードをバックアップするには、コントロール+x、y、returnでファイルをNanoに保存し、以下をシェルに入力します

backup
この本を読んでシェルでフォローしているときにパスワードを求められている場合は、ユーザーパスワードを正しく入力してください。コマンドを再実行する必要がある前に3回トライします。上下矢印を使用してコマンドを再実行して編集できます。コマンドを右、左矢印、キーボードを削除して削除し、returnで実行する前に、コマンドを選択するために断続的に上下に押します。 おめでとう!ワーキングディレクトリに2つの重要なシェルスクリプトをバックアップする素晴らしいバックアップスクリプトを作成できました。プロジェクトが大きくなるにつれて、後で物事を動かしているかもしれませんが、これは今のところ機能します。クラウドのバックアップに進みましょう。これにはgithubを使用します(バックアップ用に他にも多数のgitソリューションがありますが、それらはすべて同じです。)gitは、編集をバックアップできるVerision Controlソフトウェアです。あなたがサーバーにそれらを作るときのソフトウェアまた、パスワードまたはキーの背後にあるソフトウェアのコピー全体をダウンロードすることもできます。ソフトウェアの保存には役立ちます。特に、コードの単一行が故障したときに時々破損する場合があるセキュリティでのLinuxインスタンスに移行するため、ロックアウトしている間は、バックアップの機会がない場合はコードがバックアップされない可能性があります。自動的にアップします。これをカバーします。 この時点でUbuntu仮想マシンをまだ使用していない場合は、この時点でUbuntu仮想マシンを使用して、作業Webサイトを構築してディープラーニングを実施するために必要なすべてのパッケージをインストールするときにライフを楽にすることをお勧めします。コンピューターの操作。近い将来、コードをWebサーバーに移動しますが、フィッシングに耐性のあるWebサーバーの背後に少なくとも数層のセキュリティがあることを確認し、多くのLinuxパッケージを使用するために使用したいと考えています。これ。それでもMac OSを使用したい場合は、検索してインストールできますeオンラインで必要なパッケージですが、この本やシリーズがカバーするすべてのパッケージに代わるものはない場合があります。 コマンドを実行して、バックアップスクリプトで作業をコミットするためにいくつかのコマンドを追加しましょう。
# …
もう一度、Xを制御して保存します。 次に、このプロジェクトの時間構成を1回実行する必要があります。まもなくGITプロジェクトになるため、GITリポジトリから展開するたびにすべてのコマンドを入力する必要はありませんが、展開スクリプトを作成するときにこれを把握できます。まず、正しいディレクトリにいることを確認し、Gitリポジトリを初期化し、SSHキーを生成しましょう。

cd /path/to/directory
git init
git branch -m master
ssh-keygen
SSH-KeyGenを入力した後、.SSHというフォルダーの下のホームフォルダーに新しいキーを保存する必要があります。 id_rsa.pubと呼ばれます。このキーを見つけてコピーしましょう。それを見るために、

cd ~
cat .ssh/id_rsa.pub
SSHキーをアカウントに追加する前に、最後のコマンドによって返されるテキストをコピーし、Gitプロバイダー(理想的にはGitHub)でアカウントを作成します。アカウントを取得したら、右上のメニューをクリックして設定を入力してから、メニューのSSHキーとGPGキーのSSHキーを追加します。 SSHキーを追加し、貼り付けてタイトルを付けることでSSHキーを追加し、GitHubに保存して戻って新しいリポジトリを作成します。これは他のGITプロバイダーでも同様です。ドキュメントを読む必要があります。新しいリポジトリ構成で、リポジトリに説明名を付け、公開するかどうかを決定し、まだ包含用のファイルを構成しないようにしてください。リポジトリが作成されたら、クローンをSSH URLでコピーし、次のコマンドに貼り付けます。

git remote add git://… (your remote URL)
これで、CDを使用してリポジトリに戻ることができます。これに精通しています。バックアップで今すぐバックアップスクリプトを試してください 素晴らしい!今、私たちは本当にコーディングを得ることができます。 BashとGitをよく把握できるようになったので、Djangoをインストールしましょう。 Djangoはソフトウェアを自動的にバックアップできるようにします。Bashはこれを行うこともできますが、Djangoはより安全な実装をする必要があります(無効にしてより簡単に構成できます)。 Ubuntuにソフトウェアをインストールするには、Sudo Apt-Getコマンドを使用します。まず、すでに持っていたソフトウェアを更新してアップグレードしましょう。これは、sudo apt-getアップデートとsudo apt-getアップグレード-yで実行できます。次に、次のコマンドを使用して、PythonとVirtual EnvironmentのホームであるVirtual Environmentをインストールしましょう。sudoapt-getインストールpython-is-python3 python3-venv これは、Ubuntuインスタンスのソフトウェアインストールに関してDjangoを使用するために必要なすべてです。 WindowsとLinuxの場合、これはかなり簡単なはずですが、Macの場合は仮想マシンをインストールしてください。ubuntu環境をセットアップするために、VirtualboxやParalellsデスクトップなどの無料またはParalellsのデスクトップなどの無料または有料の仮想環境を使用してLinuxを使用します。この場合、UbuntuはWebサイトが実行するソフトウェアであり、前述のすべてのソフトウェアでWebサイトをホストできるため、この場合は重要です。 Djangoを掘り下げましょう。 私たちのディレクトリで再び、
python -m venv venv # コードが保存されている仮想環境を作成します
source venv/bin/activate # 仮想環境をアクティブにします
django-admin startproject mysite . # ここで、MySiteは現在のディレクトリから始めています。
DjangoはWebサーバーをホストしており、基本的なローカルWebサイトを稼働させるために必要なすべてを行っているため、Djangoが始めたばかりです。 Djangoがインストールされたので、設定を少し編集して、必要な方法を機能させるようにしましょう。まず、新しいアプリを作成しましょう

python manage.py startapp feed
最初のアプリはフィードと呼ばれていることに気付くでしょう。アプリは好きなものを何でも呼び出す必要があり、新しいアプリを作成しますが、各アプリの名前は、アプリがコードで参照されるたびに一貫している必要があります。新しいアプリを追加するには、常にStartProjectに名前が付けられたアプリが作成した他のディレクトリのsettings.pyを常に編集します。ナノを使用して、

nano app/settings.py
設定で、installed_appsを見つけて、[]を3行に分離します。空の中心線に4つのスペースを使用して、「フィード」またはアプリの名前を追加します。 settings.pyのこのセクションは次のようになります。

INSTALLED_APPS = [
    'feed',
]
忘れる前に、Djangoが機能していることをテストしましょう。コマンドPython manage.py runserver 0.0.0.0:8000を使用して、サーバーを実行してから、コードを実行しているコンピューター上のWebブラウザでhttp:// localhost:8000に移動して、Webページのサンプルを参照してください(動作!)他のコマンドと同じコントロールcでサーバーを終了します。 それでは、いくつかのPythonコードの作成に掘り下げましょう。 Djangoには3つの主要なコンポーネントがあり、それらはすべてコードで完全に実行されています。コンポーネントはモデル、ビュー、およびテンプレートと呼ばれ、それぞれがユーザーに配信される前にそれぞれより高いレベルと低レベルにあります。 このモデルは、取得、並べ替え、レンダリングのためにデータベースに情報を保存するコードです。 ビューは、モデルのレンダリング、操作、および変更された方法を決定します。ほぼすべてのビューがモデルを直接使用します。 テンプレートは、テンプレート言語と呼ばれるいくつかの余分なベルとホイッスルを備えたHTMLコードです。テンプレートは、Pythonコードで満たされているビューによってレンダリングされます。ビューからモデルや情報(usuall文字列や整数)などのコンテキスト。 Djangoには、以下を含むがこれらに限定されない他のコンポーネントもあります。 説明したようにアプリを構成する設定。 URLは、Webアプリケーションの特定の部分にアクセスするためにユーザーが従うパターンです。 サーバーに送信される情報が処理され、データベースとユーザーにレンダリングされる方法を定義するフォーム。これらは、サーバー側の情報を処理する基盤であり、コンピューターが保存しているあらゆる種類の情報、特にテキスト文字列、数字、真の/誤ったブール人(通常はチェックボックス)を受け入れることができます。 HTMLコードとテンプレート言語であり、PythonとHTMLのギャップを埋めるテンプレートは、Python情報をWebにアクセスできるようにしながら、誰でもアクセスできるHTMLコードとして提供できるHTMLコードとして提供できます。そうでないリモートデバイスのさまざまな目的のためにサーバーの近くにいるためにEED。 通常、JavaScriptであり、サーバーが提供し、テンプレートにリンクしているライブラリである静的ファイル。 サーバーがサービスを提供している、外部的にホストされている、またはホスティングのために別のサーバー(バケット)に投稿される前にサーバーに書き込まれるメディアファイル。 ミドルウェアは、すべてのビューと同時に実行され、ビューに「含まれている」と見なされるコードの部分です。 コンテキストプロセッサは、各ビューのコンテキストを処理し、追加のコンテキストを追加するために使用されます。 ビューがレンダリングされる前に、ユーザーまたはリクエストが特定の要件に合格することを検証するテスト。 消費者は、WebSocketsがコミュニケーションにどのように処理し、応答するかを指示します。 adminは、モデルを登録するために使用され、Django管理ページ内で詳細に操作できるようにします。ここでは、グラフィカルインターフェイスを介してデータベースを管理できます。 非同期タスクを定義するセロリは、djangoコードの一部を開始できますすぐに次のタスクまたはコード行に進む前に。 Djangoは他の多くのコンポーネントを持つことができます。これについては、ここで詳しく説明します。 Djangoをより機能的にする方法はたくさんあります。これは、非同期タスクを実行する高速で合理化された通信チャネル、セロリ、特にDjangoを拡張するための他の多くのソフトウェア、特にビュー機能で他の多数のソフトウェアであるWebSocketを追加します。コードが実行されます。ビュー関数は、通常、特定のURLパターンまたはサーバーのセクションに固有のすべてのコードを宣言するため、重要です。 まず、ビュー関数を調べてみましょう。ビュー関数は、ビューで使用されるコードを示すインポートから始まり、通常の関数の定義またはクラスを使用して定義されます。最も単純なビューは、関数定義defで定義され、基本的なテンプレートでHTTPResponseを返します。 「Hello World」というテキストを返すために基本的なビューを定義することから始めましょう。追加するたびに覚えておいてくださいfter def、for、forなどのようなステートメントをfterするには、機能に適用したい事前の定義ごとに4つのスペースを追加する必要があります。これらのそれぞれがすぐに意味することに取り組みます。 当社のサイトのディレクトリから、NANOを使用してFeed/Views.pyファイルを編集し、次の行を最後に追加します

from django.http import HttpResponse

def hello(request):
    return HttpResponse('hello world')
DjangoのHttpresponseは、開閉で示されるテキスト文字列で応答します。リクエストや文字列など、情報やクラスに情報を渡すたびに、括弧(、開閉)を使用する必要があります。 これがまだ私たちの見解を見る必要があるすべてではありません。もちろん、ビューが正確にある場所にサーバーに伝えていませんが、ビューをレンダリングするパスを定義する必要があります。 App/urls.pyで基本的なパスを定義することから始めましょう。後でパスグループに入ります。 App/urls.pyで、作成したばかりのビューをインポートし始めた後、インポートステートメントの後に行を追加します。

from feed import views as feed_views
それでは、ビューパターンを定義しましょう。ビューパターンには、サーバー内にビューが存在するサーバー(ユーザーがナビゲーションバーに入力してWebページに入力するURLパス)、ビューコンポーネントが指定されている場所にある3つのコンポーネント、パスコンポーネントの3つのコンポーネントがあります。ビューのフレンドリーな名前で、テンプレートを使用するときにパターンを簡単に取得できます。特に、必要に応じて別のビュー用のスペースを作成したり、より論理的な名前を取ったりするために、名前を変更および更新できます。あなたのコードベースは、価値があり、作業しやすくするために柔軟性と即興を必要とする絶えず変化する環境になるため、このように物事を行い、柔軟性を持つことは理にかなっています。あなたの見解がどのように見えるかは次のとおりです。これをurlpatterns = [app/urls.pyのセクションに追加できます。ビューパターンは、上記の3つのコンポーネントとパスと呼ばれる関数で定義されます。あなたのURLパターンはリストですので、必ずそれらの各アイテムを終了してくださいコンマで、これはそれぞれを分離するためです。また、各アイテムは、設定のアプリと同じように、その前に4つのスペースを備えた新しいラインに移動する必要があります。 Webサーバーのルートディレクトリで実行されるビューを作成するために、Viewの最初のコンポーネントを空の文字列関数で定義します。あなたのurls.pyは今のように見えるはずです

from feed import views as feed_views

urlpatterns = [
    path('', feed_views.hello, name='hello'),
]
これは、完全に静的なDjangoを使用してWebサイトを作成するための基礎です。画像、ビデオ、オーディオなどのキャッシュ情報を開始できる、よりダイナミックなWebサイトを作成するには、次に探索するモデ​​ルを使用する必要があります。とりあえず、コードを確認してサーバーを実行しましょう。エラーをコードに確認するには、実行してください。

python manage.py check
エラーメッセージがある場合は、アプリに行った変更を慎重に確認し、外部または不足しているスペース、余分なキャラクター、閉じられていない文字列、タイプミス、誤って修正する必要があるものがあるかどうかを確認する必要があります削除された文字など。エラーメッセージを読んで(ある場合)、作成または編集したファイルへのパスを行番号とともに確認できるはずです。そのファイルと行を調べて、そこにあるものを修正できるかどうかを確認してください。問題を修正した場合は、上記のコマンドをもう一度実行します。ソフトウェアが実行され、動作している場合、出力「システムチェックは問題を特定しなかった」が表示されます。今、あなたは行く準備ができています。サーバーを実行します:

python manage.py runserver 0.0.0.0:8000
Webブラウザーを開き、http:// localhost:8000に移動します。括弧内にテキストが返され、httpresponse関数の引用が表示されているのを見る必要があります。これは基本的な例にすぎませんが、ここまで行えば、Linux、Bash、Python、およびDjangoがどのように機能するかの基本を理解しています。いくつかのデータベースモデリングをより深く掘り下げ、情報を保存する際のPythonクラスのパワーを探りましょう。次に、JavaScriptと機械学習を使用して、サイトを完全に紹介し、柔軟で安全にする前に、HTMLとCSSのグリップを取得し始めます。 クラスは、アプリのモデルに保存されます。 nanoを使用して、app/models.pyを編集し、新しいクラスを追加します。クラスはクラス定義で定義され、この場合はモデルから継承するスーパークラスに渡されます。モデル。クラスの名前は、クラスの定義の後に行われ、クラスに関連する属性と関数の定義が以下に示される前に、クラスの定義a :(コロン)が使用されます。私たちのクラスそれを取得して一意に保つために使用できるIDが必要です。また、情報を保存するためにテキストフィールドも必要です。後で、タイムスタンプ、ファイル、ブリアンを追加できます(コードがモデルをどうするかについての決定を下すのに役立ち、それを並べ替えるために使用できる)を追加できます。サーバーなどに。コードを開梱しましょう
from django.db import models # クラスを定義するために使用されるインポートとそれは属性です
class Post(models.Model): # クラス自体の定義
    id = models.AutoField(primary_key=True) # モデルのIDは、モデルをクエリし、一意に保ち、作成したらモデルと対話する必要がある場合に役立つ自動化されたキーです。
    text = models.TextField(default='') # クラスストア、この場合、いくつかのテキストが空の文字列にデフォルトである属性。
前に行ったように、ファイルを閉じて保存します。 このクラスを更新する際にアプリが進化するときに調査する他の多くのフィールドとオプションがありますが、これはテキストを投稿するアプリを作成するための基本的な必需品です。ただし、このモデルは単独では機能しません。前述のように、このモデルを機能させるにはカスタムビューとカスタムURLパターンが必要になります。また、テンプレートとともにフォームも必要です。最初にフォームを調べてみましょう。 フォームを定義するには、nanoでapp/forms.pyを編集し、次の行を追加します。フォームクラスの2つのインポート、作成したモデル(Feed.models.post)、モデルと同様のクラス定義、およびフォームが相互作用するモデルを定義するMetaと呼ばれるサブクラスとともにフィールドが必要です。と。フォームには、リクエスト、モデル、またはその他の情報に基づいて設定する初期化関数を持つこともできます。これを後で検討します。 モデルフォームは、モデルを作成したり、モデルを編集したりできるため、非常に便利です。そのため、両方に使用します。 forms.pyで1つを定義しましょう

from django import forms
from feed.models import Post

class PostForm(forms.ModelForm):
    text = forms.CharField(widget=forms.Textarea)
    class Meta:
        model = Post
        fields = ('text',)
これは、フォームとモデルがどのように見えるかの基本です。このモデルフォームを使用して、投稿をインスタンス化または編集して、含むテキストを変更できます。次に、このフォームをビューに統合することを検討します。まず、移行を行い、データベースを移行して、モデルが実行されたときにモデルと対話できるようにしましょう。これを行うには、次のコマンドを実行します。

python manage.py makemigrations
python manage.py migrate
これには実行に時間がかかりますが、一度実行すると、ビュー、ミドルウェア、またはソフトウェアの他の場所でモデルにアクセスできます。私たちのモデルを見ることができるビューを作成して続けましょう。記載されているように、Feed/Views.pyを編集し、次のコードを追加します。 #signの後に何も追加する必要はありません。そのコードは、コードに関する情報を示すために使用されるコメントです。まず、モデルをビューでインポートし、ディスプレイのリストとしてテンプレートでレンダリングできるコンテキストに追加することから始めます。次に、フォームとモデルをボタンでレンダリングできるテンプレートを追加して、モデルに基づいて新しいオブジェクトを作成してサーバーに投稿できます。これは複雑に聞こえるので、一歩一歩見しましょう。ビューを完了する前に、モデルをレンダリングするだけのテンプレートを作成し、シェルに新しい投稿を作成して確認できることを確認しましょう。その見方は次のとおりです。
    posts = Post.objects.all() # これまでのところ、データベース内のすべての投稿をクエリします
これはすべて、私たちが一番下に到達するまで非常にシンプルに見えます。レンダリング、前の例のようなHTTP応答ではなく関数によって返される値は、常に最初の入力として要求を受け取り、コンテキスト(この場合はデータベースの投稿)を受け入れます。これはテンプレートでレンダリングできます。 、および関数で定義されたテンプレートを返します。このテンプレートは、Jinja2と呼ばれる言語の少しのHTMLドキュメントになり、Python情報をHTMLにレンダリングします。 テンプレートの作成を開始するには、フィードに2つのディレクトリを作成します。

mkdir feed/templates
mkdir feed/templates/feed
次に、上記のディレクトリでテンプレートを編集し、フィード/テンプレート/フィードを編集し、この例のコードを追加します。この例のテンプレートを見てみましょう。
これは非常にシンプルなテンプレートです。 HTMLタグの開閉、ドキュメントタイプのタグ、レジェンドタイトル付きのボディタグ、画面全体に小さな行を追加するブレークタグ、および投稿のリストの各投稿を段落としてレンダリングするループ用のループを定義します。テンプレート。これは投稿をレンダリングするのに必要なすべてですが、データベースにはまだ何もありません。シェルでいくつかを作成しましょう。 manage.pyでシェルを実行できます

python manage.py shell
次に、ポストモデルをインポートしましょう

from feed.models import Post
次に、文字列を使用した簡単な投稿を作成し、シェルを終了します。文字列は、有効なテキストである限り、何でもすることができます。

Post.objects.create(text='hello world')
exit()
最後に、フィードにURLパターンを追加する必要があります。フィードアプリは複数のURLを使用し、ファイルサイズを小さく保ちたいので、このようなフィードアプリでローカルURLS.PYを作成しましょう。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.feed, name='feed'),
]
また、ベースアプリでurls.pyを編集する必要があります。これが何であれ、これが最初に作成したディレクトリでした。 app/app.pyを編集し、URLパターンに次のことを追加します
from django.urls import include # 上に
    # ...ここでの以前のコード
これで、Python Manage.py runserverでサーバーを実行すると、データベース内のアイテムとともにモデル、ビュー、テンプレート、およびURLパターンがあるため、作成したページが表示されます。次に、作成したフォームを実装し、独自の投稿の作成を開始しましょう。しかし、あまりにも多くのコードを書く前に、以前に書いたスクリプトを使用してバックアップを作成しましょう、バックアップ。このスクリプトをシェルで実行し、少し待ってください。すべてのコードがGITリポジトリにバックアップされます。

backup
フォームの実装は比較的簡単です。フォームをインポートし、[[ポスト]リクエストハンドラーをビューに追加し、データベースに投稿を保存してから、同じビューにリダイレクトします。既にインポートしたリダイレクト関数と、ViewパターンのURLを取得するためにReverseと呼ばれる別の関数を使用できます。含まれているパターンの名前空間がフィードであり、ビューはフィードとも呼ばれるため、文字列「フィード:フィード」でこれを照会します。
    posts = Post.objects.all() # これまでのところ、データベース内のすべての投稿をクエリします
    if request.method == 'POST': # POSTリクエストを処理します
        form = PostForm(request.POST) # フォームのインスタンスを作成し、データを保存します
        if form.is_valid(): # フォームを検証します
            form.save() # 新しいオブジェクトを保存します
        return redirect(reverse('feed:feed')) # GETリクエストで同じURLにリダイレクトします
        'form': PostForm(), # レンダリングできるように、フォームをコンテキストに渡すようにしてください。
次に、新しいフォームを考慮してテンプレートを更新する必要があります。これを使用してこれを行うことができます
HTMLにタグを付け、送信ボタンを使用してHTMLテンプレートのフォームをレンダリングします。また、最初にページをロードせずに外部サイトがフォームに投稿するのを防ぐトークンであるCSRFトークンも必要です。
これを分解しましょう。新しいフォームクラス、トークン、フォーム自体、および送信ボタンがあります。非常にシンプルですが、それを見てみると、見た目を良くしたいと思うかもしれません。機能し、フォームで新しい投稿を投稿でき、データベースに保存されます。ここでいくつかのことが起こっています。 HTMLタグを使用して、ドキュメントがHTMLドキュメントであることを宣言し、テンプレートタグ({%…%})を使用して、フォームにトークンをレンダリングし、別の{{…}}をレンダリングします。また、ブロックタグとテンプレートタグを使用してテキストをレンダリングするループもあります。ブロックタグは、テンプレートのセクションがどのようにレンダリングされるかを定義できるため、非常に重要です。テンプレートタグは、変数をコードに入力する方法の基礎です。 これで、アプリの見た目を良くする必要があります。今のところは本当に基本的に見えるからです。これを行うには、インライン、またはドキュメント内の各オブジェクトに結び付けられたクラスのいずれかを使用することで行うことができます。 CSSはページ上のすべてのものをどのように見えるかを伝えているので、本当にいいです、そして、それを本当によく見せることができます。これを行うことができるいくつかのライブラリがありますが、私の個人的な行くことはブートストラップです。 ブートストラップは彼らのウェブサイトからダウンロードできます、getBootStrap.com/。そこに着いたら、ボタンを押してインストールドキュメントを読み取り、cdnセクションを介してincludeからコードをコピーします。 HTMLドキュメントの上部にあるこのコードが、Headと呼ばれるタグが必要です。また、各テンプレートでこれらのリンクを再現する必要がないように、先に進んでベーステンプレートを作成しましょう。 MKDIRテンプレートを使用したテンプレートと呼ばれる新しいディレクトリを作成し、テンプレート/base.htmlを編集します。 このように見えるはずです:
CSSとJavaScript、.CSSおよび.JSファイルをコピーしてください。将来、サイトをより機能的にするためにJavaScriptが必要になるためです。 それでは、Bash Shellに戻り、クイックコマンドを実行しましょう。仮想環境にアクセスする必要がある場合は、Source venv/bin/activateを入力する必要があることを忘れないでください。これにより、DjangoがアクセスできるようにPythonパッケージをローカルにインストールできます。 Django Bootstrapクラスによって生成されたフォームを提供するために、Crispy FormsというPythonパッケージを使用します。これを次のコマンドでダウンロードできます

pip install django-crispy-forms
これがインストールされたら、settings.pyに追加します
    # …以前のコードはここにあります
さて、フィードテンプレートに戻って、いくつかのものを削除できます。ドキュメントの開始と終了を削除し、拡張機能とブロック定義を使用して、ベーステンプレートからの継承に置き換えましょう。また、フォームにテンプレートフィルターインポートとテンプレートフィルターを追加し、テンプレートフィルターを追加します。最後に、フォームのボタンにブートストラップクラスを追加して、ボタンのように見せましょう。それは次のようになります:
美しい!それはすでにかなりのコードです。次に、それをテストし、すべてが見栄えが良いことを確認し、すべてが適切に機能していることを確認する必要があります。以前の指示に従ってサーバーを実行し、サイトが大丈夫になっていることを確認してください。素晴らしい仕事!次のステップに進む準備ができており、同様のURL、フォーム、ビュー、テンプレートを使用してユーザーログイン機能を追加します。ベーステンプレートは重要であり、必要に応じて変更を加えて変更を加え続けますが、ユーザーがユーザー名とパスコードでログインできるようにし、最終的にはさらに重要な情報を使用できるようにすることで、サイトをより安全にすることに焦点を当てましょう。アプリを安全に保つのに役立ち、自分のアカウントにのみアクセスできます。 これを行うには、Djangoに組み込まれたユーザーモデルを使用する必要があります。ユーザーモデルは、私たちの投稿のようなデータベースモデルであり、ユーザーをWebサイトにログインするようにレンダリングできます。将来的には、サイトをインターネットに展開する前に、このモデルを他のモデルに起因するモデルを拡張し、フィッシングに耐性のあるログインのための追加のセキュリティ対策を構築します。まず、Djangoが提供するいくつかの組み込みのログインフォームを使用します。まず、基本ログインページのテンプレートとビューをレンダリングするために使用する新しいアプリを作成しましょう。また、ピンコード、顔認識、近いフィールド通信、外部デバイス、マルチファクター認証、指紋認識など、アプリを保護するために、継続的なログインチャレンジを表す他のアプリを作成します。 私たちはすでにアプリの開始について話しました。私たちのディレクトリから、仮想環境の内部で、pass.pyこれらを

python manage.py startapp users
これで、新しいアプリのディレクトリが必要です。ユーザーログインに対応するディレクトリにビューを作成することから始めましょう。 Djangoはユーザーログインのビューを構築していますが、カスタムビューが必要であるため、これらは適切ではありません。 このビューでは、POSTリクエストをチェックし、Djangoからインポートされたログインフォームへのパスリクエストを確認し、ユーザーアカウントを認証し、ユーザーをログインしてからフィードアプリにリダイレクトします。 ユーザー/views.pyで、次のコードを追加します
        username = request.POST['username'] # 投稿リクエストからユーザー名とパスワードを取得します
        password = request.POST['password'] # ユーザーを認証します
これは、基本的なログインビューに必要なすべてです。それでは、ベーステンプレートを拡張して、ビュー用のフォームを作成しましょう。まず、ユーザーフォルダーにテンプレート用の新しいディレクトリを作成します。

mkdir users/templates
mkdir users/templates/users
これで、ユーザー/テンプレート/ユーザー/login.htmlを編集できるはずです。私たちがそれに取り組んでいる間、ユーザーがサインアップできるようにするテンプレートを作成します。

nano users/templates/users/login.html
さて、テンプレートで、
これがログインテンプレートの基本です。構造の他のテンプレートと同じですが、レンダリングされると少し違って見えます。このコードをコピーして、register.htmlという別の非常に類似したテンプレートを構築します。ここでは、文言を変更し、ビルドする新しいフォームを使用します。最初にテンプレートを作りましょう。ユーザー/テンプレート/ユーザー/register.htmlを編集し、次のコードを追加します。
次に、ユーザー登録用のフォームを作成し、モデルでユーザーログインをアップグレードする前にビューに戻りましょう。このフォームは、最初から基本的になりますが、将来的には契約やCaptchaなどの詳細とセキュリティ機能を組み込みます。 nano users/forms.pyでフォームを編集し、次のコードを追加します。

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']
ここには別のフォームがありますが、これはかなり単純に機能します。これは、ユーザー名、電子メール、パスワードを備えたユーザーレジスタフォーム、およびパスワードの確認フィールドです。このフォームは通常のforms.formクラスを拡張していないことに注意してください。これは、メタがあることを意味するモデルフォームです。 1つのフィールドは同じように定義され、クラスメタはモデルを定義します。フォームはフォームに書き込まれる残りの情報に対応します。これのほとんどは、すでにDjangoの組み込みのユーザーCreationFormに存在しているため、クラスの基礎としてそれを使用します(括弧内に渡されます)。 次に、フォームとテンプレートができたので、ユーザーを登録するビューを調べます。これは、新しい投稿ビューのようなモデルフォームです。ユーザー/views.pyを編集し、次のコードを追加します。
# …輸入
これは、ユーザーを登録するために必要なすべてですが、より多くの情報が必要です。ユーザーが登録した時間、サイトで最後になった時間、伝記、タイムゾーンなどの情報についての情報も知りたいです。また、ユーザーを考慮してフィードモデルの投稿を更新する必要があります。各ユーザーへのモデルと属性の投稿。それを行うために、両方のアプリでModels.pyを更新します。フィードモデルを編集することから始めましょう。今はこのように見えるはずです:
from django.db import models # …輸入
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # この行を追加します
ファイルに追加された2行目に注意してください。これは外部キーであり、各投稿を投稿ごとに1人のユーザーに帰属させるため、ユーザーごとに投稿を保存し、ユーザーに起因することなく投稿を作成できないことを確認できます。この外部キーを表すクラスで定義します。これは、必要に応じてユーザーを削除できることを確認するために、ユーザー、nullおよび空白の引数で投稿が削除されるようにするための削除引数を定義し、すでに投稿にユーザーが不足していることに対応できるようにします。作成された関連名。ユーザーが作成するポストオブジェクトを参照するために使用できます。この関連名は、投稿の著者であるPost.authorとは異なり、投稿自体を投稿したユーザーに提供されます。これで、urning user.posts.all()、またはauthor.posts.all()を実行してユーザーが作成した投稿を取得できます。 それでは、ログインをより回復力のあるものにしましょう。私たちは、ログインを許可する回数を制限するだけで、フィッシングに対してサイトの脆弱性をはるかに脆弱にすることができます。サイト、これは非常に簡単です。また、アプリの開発を続けている間、各ユーザーに関する情報を保存し始めましょう。ユーザー/models.pyを編集して、以下を追加します

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True, related_name='profile')
    account_created = models.DateTimeField(default=timezone.now)
    last_seen = models.DateTimeField(default=timezone.now)
    can_login = models.DateTimeField(default=timezone.now)
    preferred_name = models.CharField(max_length=20,default='', null=True, blank=True)
    bio = models.TextField(blank=True, default='')
このモデルはPOSTモデルとかなり似ていることに注意してください。 DateTimeフィールドにデフォルトを設定できる追加のインポートTimeZoneがあり、投稿のようなCarchersFieldとTextfieldもあります。これらすべてのタイムスタンプを使用すると、サイトを確保し、その使用を理解することができ、テキストフィールドにより、各ユーザーまたは著者に関する情報をWebサイトでレンダリングすることができます。 OnetOonefieldは唯一のマイナーな考慮事項である必要があります。これは、ForeginKeyとまったく同じ動作をしますが、後続のモデルごとに1つしか動作しません。これにより、ユーザーは1つのプロファイルしか持っていませんが、多くの投稿がある場合があります。 次に、プロファイルを考慮してログインと登録ビューを改善しましょう。まず、ユーザー/Views.pyを編集し、レジスタビューに焦点を当てます。
# …輸入
            Profile.objects.create(user=user) # この行を追加して、ユーザーのプロファイルを作成してください
これにより、情報を入力することなく、ユーザーのプロファイルが作成されます。これで、ユーザーアカウントをあまり頻繁にログインできないことを確認するか、少なくともパスワードを頻繁に試すことができないことを確認する必要があるため、ログインビューを更新します。
# …輸入
        if user and user.profile.can_login < timezone.now(): # ユーザーがログインできるかどうかを確認することに注意してください
        else: # ログインが成功しなかった場合、
            user = User.objects.filter(username=username).first() # これはユーザープロファイルを更新する部分です
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # だから彼らは数秒間再びログインすることはできません
これは、セキュリティの基本的な基本です。サイトが、可能なあらゆるパスワードの組み合わせを試したり、同時にいくつかのパスワードの組み合わせを試してみても、サイトが脆弱ではないことを確認してください。これは、パスコードを知っており、いくつかのデバイスにログインする普通のユーザーにとってイライラすることはありませんが、アプリから多数のフィッシングロボットを締め出します。変数Can_Loginを使用したIFステートメントを追加し、過去の時間であるはずであり、同じユーザー名を使用してログインが失敗したごとに更新する必要があることに注意してください。これにより、悪意のあるユーザーは、それほど迅速にパスワードを推測することができません。 datetime.timedelta()の秒数も更新でき、ウェブサイトはより弾力性が高いが、より多くの秒でわずかに使用できるようになります。最初に15をお勧めします。 覚えておいてください、私たちは仕事を保存するためにバックアップスクリプトを作成したので、これまでに持っているものをバックアップして、すべてが保存されていることを確認しましょう。コマンドを実行します:

sudo backup
繰り返しになりますが、これはこれまでのところあなたの仕事を救います。頻繁にバックアップを実行して作業を保存することをお勧めします。バックアップジョブを自動的に実行することもできます。 Cronと呼ばれるUNIXユーティリティを使用してこれを行うことができます。このユーティリティを有効にするには、次のコマンドを実行してパスワードを入力してください。

sudo crontab -e
Nanoのオプション1をまだ選択していない場合は、既に慣れているテキストエディターを使用して、矢印キーを使用してファイルの下部にスクロールします。次の行を追加します。

0 * * * * sudo backup
Cronは、フォーマット分、時間、月、月、曜日を使用します。ここでは、 *または数値がコマンドを実行するタイミングを表します。 1分間に0を使用し、残りのオプションで *を使用すると、1分の開始時に1時間ごとにコマンドを実行できます。これにより、コードを自動的にバックアップできます。 sudoがrootとして実行されたときに実行された場合、Cronのすべての仕事があるため、1時間ごとにパスワードを入力する必要はありません。 パスワードを使用せずにコードを簡単にバックアップできるようにするには、バックアップコマンドのパスワードを無効にしましょう。これを行い、次のコマンドを実行し、パスワードを入力します。

sudo visudo
次に、ファイルの下部にスクロールして、別の行を追加しましょう。

ALL ALL=NOPASSWD: /bin/backup
これにより、パスワードなしでコマンド「バックアップ」をユーザーとして実行できます。このための形式は簡単で、「すべて= nopasswd:/bin/」の行をプレフィックスし、/usr/bin/に存在する/bin/backupなどのコマンドで終了します。 それでは、電子メールの操作を始めましょう。ウェブサイトをより安全に保ち、ユーザーが実在の人物であり、顧客に市場やサービスでさえあることを確認する方法であるため、ウェブサイトにとってメールは本当に重要です。インターネットを頻繁に頻繁に訪れる多くの人が毎日メールをチェックし、興味のある製品やサービスに関するあらゆる種類のマーケティングメールを受け取ります。DjangoのWebサイトで電子メールを有効にすることに関しては、いくつかのオプションがあります。どちらがあなたに最適か。 まず、ドメインから電子メールを送信し、最小限のコードが必要な電子メールサービスの支払いを行うことができます。 Google Workspace、SendInBlue、Mailgunなど、これを提供する多くのサービスがあります。 そうでなければ、あなたは建物から十分に外れていますサーバー内の自分の電子メールサービスはゼロから。このオプションは、より多くのコードであり、特別なホスティングが必要になる場合でもお勧めします。自宅のコンピューターからメールサーバーを起動することはできないようになる可能性が高いため、クラウド内のサーバーを起動して内部で独自のメールサーバーを作成する前に、構成とコードを調べて電子メールを送信してみましょう。 まず、次のようにsettings.pyを編集します

nano app/settings.py
ここで、アプリはStartAppで作成したアプリの名前です。 次の行を追加します。

SITE_NAME = 'Django App'

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_ADDRESS = username@server.com'
EMAIL_HOST_USER = 'username'
EMAIL_HOST_PASSWORD = config['EMAIL_HOST_PASSWORD']
DEFAULT_FROM_EMAIL = '{} <{}>'.format(SITE_NAME, EMAIL_HOST_USER)
アプリを展開する準備ができたら、これらを必ず変更してください。これを後で再検討します。 email_addressの設定は、送信したい電子メールであり、パスワード(email_host_password)をサーバー用に生成するパスワードに設定する必要があります。設定ファイルからパスワードをロードして、次のロジックを使用してコードから締め出さないようにします。

import os
import json
with open('/etc/config.json') as config_file:
    config = json.load(config_file)
次に、次のようにNANOを使用して /etc/config.jsonで構成を備えたJSONファイルを設定しました。 ファイルを編集するには:

sudo nano /etc/config.json
次の行を追加します。

{
	“EMAIL_HOST_PASSWORD”: “<some password here>”
}
[構成ファイルの編集]を引き続き編集し、アプリで使用するすべてのパスワードとキーを追加します。とりあえず、Pythonを使用して電子メールを送信する方法をすばやく調べてみましょう。まず、ユーザーに送信できる検証メールのテンプレートを作成し、ユーザーテンプレートディレクトリに配置しましょう。このテンプレートはHTMLで記述されます。

nano users/templates/users/verification_email.html
このメールはかなり簡単です。ユーザーのコンテキスト、サイトのベースURL、およびユーザーのメールの検証に使用されるユーザーIDとトークンが必要です。テンプレートをレンダリングするためにPythonコードを書く前に、settings.pyでベースURLを定義してください。先に進み、次の行をapp/settings.pyに追加します。

SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'

BASE_URL = PROTOCOL + '://' + DOMAIN
最終的に、サイトがインターネットの準備ができていて、展開すると、サイトを表すために購入するドメイン名としてドメインを定義する必要があります。これは、サイトにアクセスするためにNavbarに入力する名前です。今のところ、ドメインを空白のままにしたり、プレースホルダーを使用したりできます。また、Site_nameを選択した名前に変更する名前に変更する必要があります。 電子メールを送信する前に、トークンジェネレーターを作成して、決して期限切れにならないアカウントアクティベーショントークンを作成できます。これを行うことができます。これは、以下のように見えるアカウントアクティベーショントークンをインポートすることで行うことができます。ファイルを編集します:

nano users/tokens.py
次のコードを追加します。

from django.contrib.auth.tokens import PasswordResetTokenGenerator
import six
class TokenGenerator(PasswordResetTokenGenerator):
    def _make_hash_value(self, user, timestamp):
        return (
            six.text_type(user.pk) + six.text_type(timestamp)
        )
account_activation_token = TokenGenerator()
unsubscribe_token = TokenGenerator()
この基本的なトークンジェネレーターは、ユーザーをURLに送信できるトークンを生成し、ユーザーは電子メールを確認してアカウントをアクティブにするために使用できます。 次に、メールの送信方法を見てみましょう。 nanoを使用して、ユーザー/email.pyを編集します。

nano users/email.py
検証HTMLメールを送信すると、次のようになります。

from django.contrib.auth import get_user_model
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.core.mail import EmailMultiAlternatives
from django.shortcuts import render
from .tokens import account_activation_token
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.template import Template, Context
from django.conf import settings
import traceback

def send_verification_email(user):
    User = get_user_model()
    mail_subject = '[{}] Activate your account.'.format(settings.SITE_NAME)
    html_message = render_to_string('users/verification_email.html', {
        'user': user,
        'domain': settings.DOMAIN,
        'protocol': 'https',
        'uid': urlsafe_base64_encode(force_bytes(user.pk)),
        'token': account_activation_token.make_token(user),
    })
    send_html_email(user, mail_subject, html_message)
これはかなり簡単です。電子メールを送信し、テンプレートと設定で電子メールをレンダリングする必要がある関数をインポートし、テンプレート名で電子メールを定義し、関数を使用してユーザーに送信します。メールを送信する機能を定義していないことがわかります。

def send_html_email(user, mail_subject, html_message):
    to_email = user.email
    username = user.username
    if to_email == '':
        return None
    unsub_link = settings.BASE_URL + user.profile.create_unsubscribe_link()
    html_message = html_message + "<p><a href=\"" + unsub_link +  "\" + title=\"Unsubscribe from " + settings.SITE_NAME + " emails\">Unsubscribe</a></p></body></html>"
    msg = EmailMultiAlternatives(mail_subject, strip_tags(html_message), settings.DEFAULT_FROM_EMAIL, [to_email], headers={'List-Unsubscribe' : '<' + unsub_link + '>'},)
    msg.attach_alternative(html_message, "text/html")
    profile = user.profile
    try:
        msg.send(fail_silently=False)
        if not profile.email_valid:
            profile.email_valid=True
            profile.save()
    except:
        profile.email_valid=False
        profile.save()
これはもう少し複雑であり、このコードのすべてをまだ実行する準備ができていません。 unsub_linkを定義していることに注意してください。ユーザーが電子メールから登録解除に使用できるリンク。これは重要です。なぜなら、ユーザーはいつでもそれらを見たくない限り、ユーザーが私たちのメールをオプトアウトできる必要があるからです。また、メッセージに代わるテキストを追加します。これは、HTMLタグを削除したHTMLメッセージです。最後に、電子メールが送信されたかどうかを確認しましたが、そうでない場合は、ユーザーのプロファイルで、電子メールが有効でないことをマークします。 これをすべて機能させることができるように、ユーザーモデルに戻りましょう。登録解除へのリンクを生成する関数を定義し、ユーザーのメールが無効であることをマークするブールフィールドを定義する必要があります。 まず、ユーザー/models.pyのトップに次のインポートを追加します

nano users/models.py
# …
次に、ユーザーモデルに関数を追加してトークンを作成し、電子メールのアクティブ化に使用されるトークンと、ユーザーがメールを正常に受信しているかどうかを保存するフィールドを確認しましょう。ユーザー/models.pyでは、モデルの最後に次のコードを追加します(インデントコード)
# …
            TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # 30日間有効です
これはかなり簡単です。基本的な暗号化ツールであるタイムスタンプシグナーを使用して、一定の時間後に期限切れになるトークンを作成し、別の関数を使用して有効かどうかを確認します。これらのトークンを2回使用して、メールを検証し、1回は登録解除リンクを使用します。 これらを手に入れたので、私たちがする必要がある最後の仕事は見解です。ユーザー/views.py内で、ビューを追加して、メールアドレスを確認し、登録解除します。

nano users/views.py
まず、次のインポートを追加します。私はいくつかの余分なものを投げたので、後でもう一度アイテムを再度インポートする必要はありません。
from .email import send_verification_email # 確認電子メールの送信機能をインポートしてください
これらの輸入品のいくつかはすでにあるかもしれませんが、それらを繰り返すことは害はありません。他のインポートの中でも、users.tokensからのaccount_activation_tokenだけでなく、確認メールの送信機能をインポートする必要があります。 次に、ファイルの下部に、次のコードを追加します。
        # それらを登録解除します
    # それ以外の場合は、ログインページにリダイレクトします
# sendwelcomemail(リクエスト、ユーザー)
これはたくさんのコードです。それを分解しましょう。最初の機能は、クリーンでシンプルで、メーリングリストからユーザーを登録解除します。 2番目の関数は電子メールをアクティブにし、コメント機能のsendwelcomemailを追加したことに気付くでしょう。メールテンプレートと関数の定義を使用してウェルカムメールを送信できます。まだ行っていません。アクティベーションメールの有効期限が切れるため、私が投げた最後の関数は重要です。したがって、アクティベーションメールをいつか再送信する必要があります。これには基本的なフォームを使用して、関数を呼び出して確認メールを送信できます。これを行う前に、レジスタビューに関数呼び出しを追加して、最初に送信されるようにしましょう。レジスタビューのリダイレクト、DEFレジスタ、ユーザー/Views.pyの直前にこの行を追加します。

nano users/views.py
# …(後)defレジスタ(リクエスト):
# …(前)リダイレクト(
そのコードスニペットに最初と最後の行を追加する必要はありません。レジスタビューが検証メールをユーザーに送信していることを確認してください。このように見えるはずです:
# …輸入
            send_verification_email(user) # この行を追加してください!
次に、アクティベーションメールを再送信するためにフォームを追加する必要があります。ユーザー/forms.pyで、次のフォームを追加します。
# …(輸入)
また、この再送信メールアクティベーションフォームに対応するテンプレートも必要です。このテンプレートを追加しましょう。ファイルを編集します。

nano users/templates/users/resend_activation.html
次に、次のコードをファイルに追加します。

{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Resend activation email</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-secondary" type="submit">Resend activation email</button>
            </div>
        </form>
{% endblock %}
ええ、それはたくさんです!これで、サーバーにコードを展開すると、HTMLメールを送信して、電子メールをクリックしてユーザーアカウントをアクティブ化できます。また、簡単なウェルカムメールを送信したいと思うかもしれませんので、それを行う方法を見てみましょう。ユーザー/email.pyに戻り、次のコードを追加します。

def sendwelcomeemail(user):
    User = get_user_model()
    html = open('{}/users/welcome_email.html'.format(settings.BASE_DIR)).read()
    subject = 'Welcome to ' + settings.SITE_NAME + ', {{ username }}!'
    template = Template(html)
    subjtemplate = Template(subject)
    context = Context({'username': user.username, 'base_url': settings.BASE_URL, 'model_name': 'Daisy Holton, 'site_name': settings.SITE_NAME})
    renderedtemplate = template.render(context)
    subjcontext = Context({'username': user.username})
    subjrenderedtemplate = subjtemplate.render(subjcontext)
    send_html_email(user, subjrenderedtemplate, renderedtemplate)
また、この情報をすべてレンダリングするためのテンプレートが必要です。私のウェブサイトでは、テンプレートは以下のように見えますが、好きなようにフォーマットすることを歓迎します。
HTML Unsubscribeリンクを追加するときにこれらを追加するため、閉じたボディまたはHTMLタグがないことに注意してください。これらは重要ですが、2回定義したくありません。 では、次は何ですか?私たちは長い道のりを歩んできました。本当に、サイトをサーバーに展開する準備ができている必要があります。 @Login_Requiredデコレーターを追加して、ビューを安全にし、ユーザーのサインアップを取得し、準拠した電子メールとキャッシュ情報を送信できます。さらにいくつかの便利な機能を追加し、コードをリモートサーバーに展開し、メールサーバー、ドメイン構成、フィルターを設定してサイトを安全かつ適切にするための基礎を構築します。 また、パスワードリセットビューも必要なので、それを本当に迅速に追加しましょう。 Djangoの内蔵パスワードリセットビューはいくつかの関数で壊れていますが、独自のビュー、電子メールテンプレート、フォーム、およびURLパターンを書く方法について説明します。ユーザー/views.pyでは、ビューがどのように見えるかを次に示します
# ...輸入
このフォームはdjangoに組み込まれていますが、パスワードのリセット、ユーザー/テンプレート/ユーザー/password_reset_confirm.htmlを確認するためのテンプレートが必要です
また、ユーザー/テンプレート/ユーザー/password_reset.htmlで、シンプルなフォームのパスワードリセットメールを送信するテンプレートもあります。
電子メール自体のテンプレートは簡単です。これは、ユーザー/テンプレート/ユーザー/password_reset_email.htmlでパスワードをリセットするためのリンクをレンダリングする基本的なHTMLファイルです。 Djangoはこのファイルを自動的に解釈します。
さらに2つのテンプレートも必要です。 1つ目は、電子メールが送信されたことを確認することです。これらのビューはすでにDjangoにあるので、urls.pyでそれらに対処する必要があります。このテンプレートは、users/templates/users/password_reset_done.htmlにあります
そして最後に、パスワードのリセットが完了していることを確認するために、ユーザー/テンプレート/ユーザー/Password_reset_complete.html
これで、これらのビューにはURLパターンが必要です。ユーザー/urls.pyで、次のURLパターンを追加します。
    # ...以前のURLはここにあります
4つのテンプレート、それはたくさんです!しかし、今では、必要なときに、すべてがWebブラウザーからユーザーのパスワードをリセットできるようにすることができます。 これはたくさんのコードであることを理解しています。それがあなたの頭の上に少し見えるなら、それは大丈夫です。あなたは改善し、あなたの理解が改善され、あなたはすぐにコードにもっと能力を尽くすようになります。あなたが完全に迷子になっている場合は、自己ペースの学習をオンラインでコード化するために学習した後、後でこのソフトウェアに戻ることをお勧めします。これらは通常、自由に始めることができ、このプロジェクトに戻ったときに成功するために必要なすべてを案内します。続行する準備ができていると感じている場合は、読み進めてください。次に、コードの展開をリモートサーバーに展開してメールサーバーを設定し、Bashを使用して展開を自動化して、いつでも新しいプロジェクトを設定できるようにします。いくつかの簡単なコマンド。 リモートサーバーに展開する前に最後に行う必要があることは、サイトをもう少し安全にすることです。あなたはログインビューはユーザー名とパスワードのみを使用し、マルチファクター認証またはワンタイムコードがないことに注意してください。これは簡単な修正であり、同じコードを使用すると、サイトにテキストメッセージを送信し、サーバーに送信されたテキストメッセージに応答することもできます。まず、ユーザーモデルに戻り、各ログインを表すタイムスタンプ署名者を追加します。また、ログインに追加のセキュリティを追加するために使用されるユニークで回転識別子をユーザーモデルに追加します。ユーザーモデル、ユーザー/モデル.pyの編集、以下を追加します
# UUID、タイムスタンプの署名者、URLジェネレーターを必ずインポートしてください(逆)
    # このコードをここに追加します
    # この関数を追加します
            TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # 3分間有効です
コメント(#の行のコード)に加えて、ユーザー/Models.pyがこのように見えることを確認してください。これを分解すると、それは簡単です。いくつかのインポートがあります。これは、安全なコードを生成し、それが有効であることを確認するために検証できる暗号化されたユーティリティであるタイムスタンプシグナーです。また、トークンの署名でユーザーを識別する一意の識別子と、トークンがユーザーに送信されるURLでUUIDを使用します。この基本的な暗号化を使用して、2因子認証ビューを構築します。他のことをする前に、ユーザーモデルが更新されるように移行を実行しましょう。 manage.pyを使用したディレクトリで、次のコマンドを実行して移行を完了します。

source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
これは重要です。モデルを変更するたびに、モデルを実際に使用できるようにする前に、テーブルを作成し、デフォルトでデータベースを更新する必要があるためです。 次に、ログインビューを即興で即興で、二次認証ビューにリダイレクトしましょう。ユーザー/views.pyで、ログイン関数を削除し、ユーザーモデルで生成したばかりのURLにリダイレクトします。
# …輸入
        if user and user.profile.can_login < timezone.now(): # ユーザーがログインできるかどうかを確認することに注意してください
            # ここにあるauth_login関数を削除します
                return redirect(user.profile.create_auth_url()) # 注意してください。ここで新しいURLにリダイレクトします
            else: # ユーザーがマルチファクター認証を使用していない場合は、それらをログインするだけです。
        else: # ログインが成功しなかった場合、
            user = User.objects.filter(username=username).first() # これはユーザープロファイルを更新する部分です
                profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # だから彼らは数秒間再びログインすることはできません
これは非常に簡単です。これは、作成時に2つの要因認証ビューにリダイレクトする方法があります。また、ユーザーが電話番号を追加していない場合に備えて、フォールバックもあります。基本的なビューを追加して電話番号をすぐに追加し、すぐにテキストメッセージでログインします。 まず、コードからテキストメッセージを送信する簡単な方法が必要です。これを行うには、多くのAPIから選択できますが、私の意見で最も簡単なAPIはTwilioです。また、小規模なプロジェクトやバルク割引の優れた価格設定も提供しています。 twilio.comでアカウントを作成し、プロジェクトの詳細を入力し、電話番号を購入し、settings.pyにAPIキーをコピーします。次に、このコードを新しいファイル、ユーザー/sms.pyの下に追加します。

nano users/sms.py
# 必要なすべてのパッケージをインポートします
# このコードは、Twilioでテキストを送信します
# 非常に多くの数字で数字を取得するヘルパー機能
# テキストを送信して、ユーザーを確認します
# この関数のテキストをユーザーに送信します
# この関数でコードを検証します
# 時間を検証します
設定を適切に変更して、これらの行をキーに追加してください。
# Twilioダッシュボードからこれらをコピーしてください
AUTH_VALID_MINUTES = 3 # TFAページがインスタンス化されるとアクティブになります
まず、2つの要因認証ビューにフォームが必要になります。ユーザー/forms.pyの編集、次のコードを追加します。
# …輸入
# 電話番号を入力するためのフォーム
# 認証のためのフォーム
次に、ユーザー/Views.pyでビューを作成しましょう
# …輸入
また、これらのビューの両方にテンプレートが必要です。最初にMFAテンプレートを追加しましょう。

nano users/templates/users/mfa.html
このHTMLコードをテンプレートに追加します
これはかなり自明です。フォームはコードまたは空のコードのいずれかを送信します。つまり、空のコードを受信した場合、コードを送信するビューで表示されます。次に、2つのボタンを2つだけ持っているので、どちらのボタンでコードを送信できます。次に、電話番号を追加する簡単なフォームを追加します。

nano users/templates/users/mfa_onboarding.html
次のHTMLを追加します。
このフォームははるかにシンプルで、作成した電話番号フォームをレンダリングし、ユーザーが電話番号を追加できるようにします。 これは本当によさそうだ!すべてが適切にセットアップされている限り、URLパターンを追加するとすぐに、メッセージを送信し、電話番号でユーザーをログインできるはずです。セットアップする必要がある最後のことはプロファイルビューです。これにより、ユーザーがログインせずに電話番号を変更できることを確認できます。最終的には、「停止する停止」オプションを追加して、ユーザーがテキストできるようにすることをお勧めします。将来のテキストメッセージをオプトアウトする「停止」。 ユーザー/Views.pyにプロファイルビューを追加しましょう。このビューでは、ユーザーのバイオ、電子メール、ユーザー名、電話番号を更新し、マルチファクター認証を有効にすることができます。まず、ユーザー/forms.pyにさらに2つのフォームが必要になります
# ...輸入
次に、これらのフォームの両方を使用するビューを作成できます。ユーザー/views.pyを編集し、ビューを追加します。
# これらのインポートを追加します
また、このビューにはテンプレートが必要です。

nano users/templates/users/profile.html
これはかなりシンプルなフォームであることに気付くが、更新されるフォームの内容を自動的に投稿するJavaScriptが含まれている。これは有用であるため、毎回送信を押すことなく編集を行うことができます。 次に、ユーザーのURLパターンのこれらすべてのビューを表すURLが必要です。ユーザー/urls.pyを編集して、このコードを追加します。
# …以前のコード、インポート
# …以前に入力したURLパターン、次の3行を追加します
今こそ私たちのプロジェクトをテストするのに良い時期です。しかし、最初に、別のバックアップを実行しましょう。

backup
サーバーを実行します。 Linuxサーバーに展開する前に、アカウントで2つの要因認証を有効にすることをお勧めします。これをプロファイルURL、/users/profile/、および電話番号を入力した後に認証を有効にするためにボックスをチェックしてからフォームを送信します。

python manage.py runserver localhost:8000
Webブラウザに移動してWebページにアクセスして、この例ではGoogle Chromeを使用して、url https:// localhost:8000/accounts/profile/を入力しています。 必要に応じてログインし、2つの要因認証を有効にすることができます。 このプロジェクトは、実際にメールを送信できるように、実行するサーバーが必要です。しかし、最初に、エラーを確認する方法が必要です。デバッグモードでサーバーを実行すると、settings.debugがtrueに等しい場合、サーバーはエラーを自動的に表示します。生産サーバーで安全でないデバッグモードを使用せずにエラーを表示するには、ビューを追加する必要があります。処理できる最も重要なエラーは次のとおりです。 エラー500-コードの問題 エラー404-見つからなかったページ(壊れたURL) エラー403-許可が拒否されたエラー エラーと呼ばれるこれらのエラーを処理するための新しいアプリを追加しましょう。

python manage.py startapp errors
これをinstalled_appsの設定で以前と同じようにsettings.pyに追加し、App/urls.pyのいくつかのビューへの参照を追加することから始めます。アプリはdjangoプロジェクトの名前です。

handler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
これは、エラービュー、テンプレート、ミドルウェアの少し以外に必要なすべてです。それらをそう定義しましょう:
# ここであなたの意見を作成します。
次に、これらのエラーを処理するためにミドルウェアを定義しましょう。これは、最初にMiddleware_ClassesにMiddlewareの名前を付けて追加します。
    # ...以前のミドルウェア
次に、ミドルウェアを追加しましょう。

from threading import local
import traceback
from django.utils.deprecation import MiddlewareMixin

_error = local()

class ExceptionVerboseMiddleware(MiddlewareMixin):
    def process_exception(self, request, exception):
        _error.value = traceback.format_exc()

def get_current_exception():
    try:
        return _error.value
    except AttributeError:
        return None

def set_current_exception(exception):
    try:
        _error.value = exception
    except AttributeError:
        print('Attribute error setting exception.')
関数を追加して、ローカルのスレッドを使用して現在の例外を取得します。これにより、コード内のエラーをトレースできます。テンプレートに関しては、ビューでタイトルを動的に定義するため、テンプレートは1つだけが必要です。テンプレートは、タイトルと「トレース」をレンダリングする必要があります。これは、コンテキストからのエラートレースバックです。

nano errors/templates/errors/error.html
これは私たちの最も単純なテンプレートですが、プロジェクトのエラーを見るのは簡単です。次に、設定でデバッグを無効にしましょう。

nano app/settings.py
この行が真実に設定されている場所を見つけて、それをfalseに変更します

DEBUG = False
今すぐアプリをバックアップしてください。リモートLinuxサーバーに展開し、そこから機能を追加し続ける準備ができています。

sudo backup
このコードをサーバーに投稿する前に、コードにいくつかの問題があるかもしれないと考えるべきです。ケースに応じて、彼らに投稿された情報を受け入れるサイトには、スパムが投稿され、スパムの削除が困難になります。これはすぐには発生しないはずですが、それが起こっている場合は、後でサイトのスパムを自動的にモデレートし、ロボットがユーザーアカウントを無効にし、ユーザーの身元を確認する方法とともに、ロボットがサイトにアクセスすることをより困難にする方法を調べます。指紋や顔の認識など、IDまたは生体認証スキャンのスキャン。 生産で調べたマルチファクター認証の例を見ると、物事は異なる場合があります。ログインを制限し、トークンの期限切れにしていることに注意してください。ロボットがサイトにアクセスしている場合、ユーザーが同時にコードを入力する可能性があるため、2つの要因認証がより困難になる可能性があります。これと戦うために、ユーザーモデルのモデルを使用して、私たちがそうであるときにサイトとの対話方法を宣言しましょう電話番号でマルチファクター認証を使用して認証します。また、電子メールで認証するオプションも追加します。ユーザーモデルを編集することから始めます

nano users/models.py
これは、追加しているモデルがどのように見えるかです。 ID、ユーザー、タイムスタンプ、有効期限、長さ、およびマルチファクター認証に対する試行(電話または電子メールに送信された123456などのコード)を保存するための方法だけの方法は必要ありません。
# ウェブサイトにログインするために使用される基本的なトークン
また、ユーザーに特権を追加しましょう。最終的には特権ユーザーの自動的に移住するために移行する前に、今のところ手動で設定します。ユーザーモデルでは、プロファイルにこの行を追加します。

    vendor = models.BooleanField(default=False)
データベースの変更と同様に、DjangoでModels.pyファイルを編集するたびに移行を行い、データベースを移行する必要があります。これを行うには、最初にソースを使用します(ターミナルが開いていたのでまだ使用されていない場合)。次にpython manage.pyで移行を行い、移行します。
cd project-directory-you-named # (必要に応じて)
今のところ、シェルを使用してベンダーとして作成したアカウントを登録できます。

python manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
次に、このトークンを使用するためにマルチファクター認証ビューを進化させましょう。まず、MFAヘルパーユーティリティを変更する必要があります。ナノを使用して、

nano users/mfa.py

from django.utils import timezone
import random
import datetime
from django.conf import settings
from feed.middleware import get_current_request
from django.contrib import messages
from .email import send_html_email
import traceback
from .models import MFAToken

account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER

def send_text(target_phone, text):
    from twilio.rest import Client
    try:
        client = Client(account_sid, auth_token)
        if len(target_phone) >= 11:
            message = client.messages.create(
                to=target_phone,
                from_=source_phone,
                body=text + ' Text STOP to cancel.')
    except:
        messages.warning(get_current_request(), 'There was an error sending the message.')
        print(traceback.format_exc())

def get_num_length(num, length):
    n = ''
    for x in range(length):
        n = n + str(num)
    return int(n)

def send_verification_text(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))

def send_verification_email(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))

def send_user_text(user, text):
    send_text(user.profile.phone_number, text)

def check_verification_code(user, token, code):
    token.attempts = token.attempts + 1
    profile = user.profile
    result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
    if token.attempts < 3 and result:
        profile.verification_code_length = 6
    elif token.attempts > 1 and not result:
        profile.verification_code_length = profile.verification_code_length + 2
        if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
    token.save()
    profile.save()
    return result
# 電子メールまたは電話番号を使用してユーザーを認証します
    token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # URL(uuid)に渡された値によってトークンをフィルタリングします
    if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # このセッションが作成されていない場合は、作成してください
    user = User.objects.filter(id=token.user.id).first() # トークンからユーザーを取得します
    if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # それらがすでに認証されている場合は、それらをログインします
    if not user: raise PermissionDenied() # ユーザーが見つからなかった場合は拒否します
    if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # 認証トークンを確認してください
        auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # 彼らがまだログインしていない場合、ユーザーにログインします
        user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # マルチファクター認証の有効期限を設定します
        return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # ユーザーを次のページにリダイレクトします
    if not user.profile.mfa_enabled: # MFAが有効になっているかどうかを確認してください
        if not check_verification_time(user, token): # 時間を確認してください
            user.profile.mfa_enabled = False # 電話番号をクリアします
            user.profile.enable_two_factor_authentication = True # MFAを有効にします
            user.profile.phone_number = '+1' # 電話番号を無効にします
            user.profile.save() # プロファイルを保存します
            auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # MFAが有効になっていない場合はユーザーにログインします
    if request.method == 'POST' and not fraud_detect(request, True): # リクエストがPOSTリクエストの場合
        form = TfaForm(request.POST) # フォームをインスタンス化します
        code = str(form.data.get('code', None)) # コードを取得します
        if code and code != '' and code != None: # 空でないことを確認してください
            token_validated = user.profile.check_auth_token(usertoken) # 認証トークンを確認してください
            is_verified = check_verification_code(user, token, code) # コードを確認してください
            if token_validated: # すべてがあれば
                if is_verified: # 順番です
                    user.profile.mfa_enabled = True # MFAを有効にする(まだ有効になっていない場合)
                    auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # ユーザーにログインします
                    for key, value in request.GET.items(): # 次のパラメーターのクエリストリングを構築する(存在する場合)
                        return HttpResponseRedirect(next) # リダイレクト
            elif not token_validated: # トークンが無効だった場合
            if p.mfa_attempts > 3: # 試みが多すぎる場合
            if form.data.get('send_email', False): # 電子メール(またはテキスト)を送信する
    # フォームをレンダリングします(Get Requests用)
このコードを追加するときは、電子メールを送信するために関数をインポートしてください。ファイルの上部で、ユーザーは(他のインポート付き)を表示します。

from .mfa import send_verification_email as send_mfa_verification_email
これで、これが機能する前にその関数を書く必要があります。送信メール機能を拡張し、検証コードを使用してユーザーにメールを送信するだけです。

nano users/mfa.py

def send_verification_email(user, token):
    length = user.profile.verification_code_length
    code = random.randint(get_num_length(1, length), get_num_length(9, length));
    token.token = code
    token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
    token.save()
    send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
したがって、これはすべてうまく機能します。現在、電話番号または電子メールに依存する多因子認証システムがあります。ただし、削除する方法も必要です。これらは、スパマー、ロボット、または私たちの仕事を意味しない人である可能性があります。私のウェブサイトでユーザーを監視するためのビューを見てください:
# 輸入
from .tests import is_superuser_or_vendor # このテストを作成する必要があります
    # ユーザーのリストを取得します
    return render(request, 'users/users.html', { # テンプレートでユーザーを返します
このコードはテストを使用していることに注意してください。このテストをtests.pyファイルで宣言してインポートする必要があります。ユーザー/tests.pyの編集、テストを作成しましょう。

def is_superuser_or_vendor(user):
    return user.profile.vendor or user.is_superuser
これは、users/users.htmlテンプレートと組み合わせて、次のようになります。
テンプレートには別のテンプレート、ユーザー/_user.htmlが含まれていることに注意してください。サブテンプレートを持ち、拡張機能を使用しないテンプレートを使用する場合、テンプレートを区別するために、ファイルの名前の前にアンダースコア(_)を追加することをお勧めします。 これは多くのジンジャであり、これらの変数のすべてが定義されているわけではないことに注意してください。しかし、これが私のコードの外観です。
      <small># {{user.id}} </small>
また、別のサブテンプレート、toggle_active.htmlも必要です。このテンプレートは、ユーザーがアクティブであるかどうかを切り替えることができるフォームである必要があります。
また、ユーザーアクティビティと適切なURLパターンを切り替えるビューを追加する必要があります。私たちがそれに取り組んでいる間、それが必要な場合にユーザーを削除するビューを追加しましょう。
# 輸入
    success_url = '/' # 成功URLのリダイレクト
    def test_func(self): # ユーザーがスーパーユーザーであり、削除する許可があるかどうかをテストします
これは必要に応じて実用的ですが、ほとんどの場合、ユーザーを削除する必要はありませんが、却下する必要がある場合は、サイトにアクセスするユーザーの可視性を切り替えることができます。 追加したURLパターンは、このように見えます。 nanoを使用して、ユーザー/urls.pyを編集して、これらの行を追加します。

nano users/urls.py
行は、「]」の前に、「[」[「」の後に、ユーザービューのパスのリストに入力する必要があります。
# …
# …
次に、サイトをバックアップして、作業を続けるWebサーバーにダウンロードできるようにしてください。コマンドラインから、

sudo backup
今、私たちのサイトはバックアップされています。 そのため、いくつかの便利な機能があります。しかし、ここの全体像はどうですか?このコードはまだインターネットからアクセスできないため、メールサーバーはまだありません。また、特権ユーザーを認証するための安全なプロトコルとともに、サイトを探索するための包括的な検証プロセスとスムーズなレイアウトを含めるためにアプリを拡張する必要があります。 。 これらすべてに到達します。今のところ最も重要なことは、このコードをオンラインで取得することです。これは、Ubuntuサーバーでのほんの数行のbashでできます。ただし、自宅にサーバーとポートを開くことができるビジネスインターネットサブスクリプションがない限り、このためにサーバーをレンタルする必要があります。私は個人的に私のアパートにインストールされているHP Z440でウェブサイトを実行していますが、通常、仮想プライベートサーバー(VPS)をレ​​ンタルするための基本的なニーズがはるかに安いです。 私たちが今実行しているコードは比較的薄く、私たちがいる前に維持および改善する必要があることに留意してください製品を構築するために必要なものを使用する準備ができました。インターネットで何をしているかに注意してください。このサイトをLinuxサーバーでWebに公開している場合は、Webサイトとの不要なやり取りをブロックする計画があります。これは最初は問題にならないでしょうが、機械学習、人工知能、コンピュータービジョンなど、これと戦うためのさまざまなソリューションを検討します。問題が発生したら、このテキストをさらに検討して、解決策を確認してください。 VPSを借りるという点では、行くことができる場所がたくさんあります。 Google Cloudには、VPSサーバー、Ionos、Kamatera、Amazon AWS、およびより多くのプロバイダーが私たちのニーズに合ったクラウドサーバーソリューションを提供しています。 フォームをクリックして、開始する計画を選択する必要があります。プロバイダーと一緒に基本プランを使用することはできますが、プロバイダーがポートメールサーバーポートを開いて電子メールを送信できることを確認してください(これはポート587とポート25である必要があります)、一部のプロバイダーはこれらのポートをブロックします。これまでのところ、私は持っていますIonosとKamateraのESTの経験は、どちらも無制限の電子メールを送信することができ、価格はかなり安いです。 SSHまたはSecure Shellというプロトコルを介して新しいサーバーに接続します。これにより、パーソナルコンピューターからパーソナルコンピューターとまったく同じようにサーバーとリモートでインターフェイスできます。サーバーをセットアップすると、ホスティングプロバイダーはSSHキーを追加するように依頼する可能性があります。または、ユーザー名とパスワードが表示されます。 SSHキーは、コマンドラインからサーバーにログインしてコードを編集する方法です。以下のSSH-KeyGenオプションを使用して、SSHを生成します

ssh-keygen
ファイルを保存して、必要に応じて上書きする必要がある場合は、SSHキーをまだ回転させていない場合は良いことです。これで、次のコマンドを使用してSSHキーを表示できます。リモートサーバーにコピーして、使用して認証できるようにする必要があります。

cat ~/.ssh/id_rsa.pub
そのコマンドを入力するときにSSHキーを見ることができなかった場合(「SSH-RSA AAA」から始まる数字と文字の長い文字列)、RSAキーを生成してみてください(より安全なので、使用することをお勧めします。)次のコードは、4096ビットRSA SSHキーを生成します。

ssh-keygen -t rsa -b 4096
Ubuntuを実行しているVPSを作成しますが、これを行う予定です。プロバイダーのWebサイト(kamatera.com、ionos.comなど)のフォームをクリックしてVPSを作成したら、ログインする必要があります。これを行うには、IPアドレス(アドレス)でSSHコマンドを使用します。 xx.xx.xx.xxのように見えます)。また、作成したサーバー上のデフォルトのユーザー名、たとえばubuntuに敏感である必要があります。

ssh ubuntu@XX.XX.XX.XX
パスワードを要求される場合があります。パスワードを求められている場合は、入力してください。デフォルトのユーザー名は使用しません。まず、新しいユーザーを作成してSSHキーをアカウントに追加してください。 まず、SSHの使用方法をサーバーに伝える新しいSSHD_CONFIGファイルを追加します。

nano sshd_config
# これは、SSHDサーバーシステム全体の構成ファイルです。  見る
# SSHD_CONFIG(5)詳細については。
# このSSHDは、path =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/gamesでコンパイルされました
# デフォルトのsshd_configのオプションに使用される戦略
# opensshは、デフォルトの値でオプションを指定することです。
# 可能ですが、彼らにコメントしたままにしておきます。  メントなしのオプションはオーバーライドします
# デフォルト値。
# ポート22
# アドレスファミリー任意
# 聞き取りdress 0.0.0.0
# 聞くことを聞く::
# hostkey/etc/ssh/ssh_host_rsa_key
# hostkey/etc/ssh/ssh_host_ecdsa_key
# hostkey/etc/ssh/ssh_host_ed25519_key
# 暗号とキーイング
# rekeylimitデフォルトなし
# ロギング
# Syslogfacility Auth
# loglevel情報
# 認証:
# logingraceTime 2m
# permitrootloginはパスワードを禁止します
# StrictModesはい
# Maxauthries 6
# 最大10
# .ssh/authorized_keys2が将来デフォルトで無視されることを期待してください。
# 認定principalsfileなし
# 認定KeysCommandなし
# authizedkeyscommanduser誰も
# これを機能させるには、/etc/sssh/ssh_known_hostsのホストキーも必要です
# hostbasedAuthentication no
# 〜/.ssh/nown_hostsを信頼していない場合は、はいに変更します
# hostbasedAuthentication
# IngroreUserknownhosts no
# ユーザーの〜/.Rhostsおよび〜/.shostsファイルを読んではいけません
# IgnorerHostsはい
# Tunneled Clear Textパスワードを無効にするには、ここでNOに変更してください!
# ammitemptypasswords no
# offery-responseパスワードを有効にするには、はいに変更します(問題に注意してください
# いくつかのPAMモジュールとスレッド)
# Kerberosオプション
# Kerberosauthentication no
# kerberosorlocalpasswdはい
# kerberosticketcleanupはい
# Kerberosgetafstoken no
# GSSAPIオプション
# gssapiauthentication no
# gssapicleanupcredentialsはい
# gssapistrictacceptorcheckはい
# gssapikeyexchange no
# これを「はい」に設定して、PAM認証、アカウント処理を有効にします。
# およびセッション処理。これが有効になっている場合、PAM認証は行われます
# KBDINTERACTIVEAUTHENTICIATIONを介して許可されます
# PasswordAuthentication。  PAM構成に応じて、
# KBDINTERACTIVEAUTHENTICATIONによるPAM認証は、バイパスされる場合があります
# 「パスワードのないPermitrootlogin」の設定。
# PAMアカウントとセッションチェックが必要な場合は、
# PAM認証は、これを有効にしますが、PasswordAuthenticationを設定します
# および「いいえ」へのkbdinteractiveauthentication。
# AlowAgentForwardingはい
# Alowtcpforwardingはい
# ゲートウェイポート番号
# x11displayoffset 10
# x11uselocalhostはい
# 許可はい
# printlastlogはい
# tcpkeepaliveはい
# Prituserenvironment no
# 圧縮遅延
# ClientAliveInterval 0
# ClientAliveCountMax 3
# 使用済みno
# pidfile /run/sshd.pid
# Maxstartups 10:30:100
# 浸透材番号
# Chrootdirectoryなし
# versionAddendumなし
# デフォルトのバナーパスはありません
# クライアントがロケール環境変数を渡すことを許可します
# サブシステムなしのデフォルトをオーバーライドします
# ユーザーごとのオーバーライド設定の例
# ユーザーANONCVSを一致させます
# x11forwarding no
# Allowtcpforwarding no
# 許可番号
# ForceCommand CVSサーバー
ファイルを保存するには、ctrl+xおよびyを覚えておいてください。次に、Initialize(すべてユーザーのデフォルトのホームディレクトリにあるすべて)という基本的なスクリプトを書きましょう。

nano initialize
これらの行をファイルに追加し、置き換えますSSHキーを使用して、CATを使用して見つかりました。 (.ssh/id_rsa.pub)
# !/bin/bash
このファイルを紹介するには、行ごとにスタートしましょう。最初の行は、これがバッシュスクリプトであることをコンパイラに伝えます。次に、依存関係をインストールし、sshd_configを正しいディレクトリにコピーし、sshの再起動、rootのsshキーの生成、ユーザー「チーム」を追加することができます(これに好きな名前を選択できます。今)。また、Sudoグループにチームを追加し、SSHキーを生成し、承認されたキーとそれらのキーにもキーを追加し、キーを印刷します。この新しいユーザーは、サイトへのログイン方法です。 新しい端末で、先に進んでサーバーを再度開きます。

ssh team@XX.XX.XX.XX
SSHキーがあるので、今回はパスワードを必要としません。また、サイトを安全に保つために、パスワードでログインを無効にしました。 これで、このサーバーは情報がなく、完全に空白に起動します。 Gitからプロジェクトをクローニングして、リモートマシンでダウンロードして実行できるようにしましょう。 SSHに接続されたリモートサーバーで、最初にSSHキーを印刷します。

cat ~/.ssh/id_rsa.pub
次に、このキーをGitリポジトリをセットアップするために前に行ったように、GIT設定に貼り付けます。これで、プロジェクトをサーバーに直接クローンすることができます。最初にプロジェクトをローカルでバックアップしていることを確認して、Gitサーバー上にダウンロードしてください。

git clone git://github.com/you/yourproject.git
完璧。これで、すべてのファイルがここにあります。 LSでそれらを見ることができます

ls
それでは、サーバーのセットアップを始めましょう。まず、プロジェクトディレクトリをプロジェクトに使用するシンプルで記憶に残る名前にコピーします。

cp -r yourproject whatyoucalledit
ここで、「Whatyoucalledit」はあなたのプロジェクトの新しい名前です。次に、サーバーをセットアップするには、基本的なユーティリティを構築する必要があります。このユーティリティを保存し、将来使用します。このユーティリティを構築するには、ユーザーバイナリを作成して、スクリプトの編集方法を定義します。 BASHを使用して、編集/usr/bin/ascript

sudo nano /usr/bin/ascript
ファイルを編集する権限があるように、そこにsudoを使用してください。ファイルに、これらの行を追加します。
# !/bin/bash
    echo "# !/bin/bash ">>/usr/bin/$ 1
このスクリプトは、スクリプト名を1ドルとすることを忘れないでください。最初に、ファイルが存在するかどうかを確認するか、その他の方法で作成し、最初の行を追加してスクリプトがバッシュであると宣言し、その権限を変更し、編集し、その名前を /etc /ascriptsに追加して、スクリプトの名前を保存できるようにします。作成しています。ファイルが既に存在する場合は、権限を変更して編集するだけです。ファイルを保存すると、次にその権限を変更します。このスクリプトを使用している限り、それをもう一度行う必要はありません。

sudo chmod a+x /usr/bin/ascript
完璧。次に、セットアップというスクリプトを作成しましょう。まず、あなたを圧倒するのではなく、私のセットアップスクリプトがどのように見えるかを見てみましょう。私たちはあなたのプロジェクトでこのスクリプトがどのように見えるべきかを説明します、あなたは私のスクリプト内のすべてを最初から必要とすることはありません。
# !/bin/bash
# sudo chmod a+x scripts/usersetup
# ./scripts/usersetup
# ssh-keygen
# プロジェクトディレクトリ
# ログコマンド
# nano config
# git config
# 更新してインストールします
# クラマブアンチウイルスを有効にします
# ホスト名を設定します
# Postgresをセットアップします
# データベースのバックアップをセットアップします
# iptablesを無効にします
# BitDefenderをインストールします
# ポストフィックスをセットアップします
# 監督を作成します
# virtualenvをセットアップします
# 依存関係を取得して構築します
# ファイアウォールルールを設定します
# PYPI依存関係をインストールします
pip3 install --upgrade opencv-python # == 4.5.4.60
pip3 install --upgrade opencv-contrib-python # == 4.5.4.60
# PIPインストールopencv-python == 4.5.5.64
# PIPインストールopencv-contrib-python == 4.5.5.64
# certbotをインストールします
# certbotを実行します
# メールサーバーをリロードします
# 証明書をコピーします
# sudo cp /etc/letsencrypt/live/femmebabe.com/privkey.pem privkey.pem
# sudo cp /etc/letsencrypt/live/femmebabe.com/cert.pem cert.pem
# パッチvenv
# ユーザー設定を設定します
# 設定権限
# sudo chown -rチーム:ユーザー/var/run/
# sudo chownルート:root/run/sudo/ts -r
# sudo chmod 664 db.sqlite3
# sudo chown www-data:ユーザーdb.sqlite3
# 設定をコピーしてアクセス許可を設定します
# データベースのセットアップ
# PAM構成を注入し、故障したSSH構成を削除します
# sudo sed -i '' -e '$ d'/etc/pam.d/sshd
# sudo sed -i '' -e '$ d' /etc /プロファイル
# ビンスクリプトをコピーしてアクセス許可を設定します
# サービスをリロードおよび有効にします
# Apacheモジュールを有効にします
# sudo a2dismod mpm_event
# sudo a2dismod mpm_worker
# sudo a2enmod mpm_prefork
# デフォルトサイトを無効にします
# 当社のサイトを有効にします
# デーモンをリロードし、アパッチ、ポストフィックス、opendkimを再起動します
# 設定権限
# 構成を交換します
# INITキャプションエンジン
# Gitをセットアップします
# ドメイン構成のIPv6とOpendKimを表示します
# セットアップが完了しました
それはたくさんのセットアップです!要するに、このコードはコマンドを記録し、NANOとGITを構成し、ファイルをコピーし、Ubuntu APTパッケージ、Python依存関係をダウンロードしてインストールし、Postfixを構成し、PostgreSQL(データベースサーバー)を構成し、データベースをロードし、UFW(不整合のFireWall)を構成します。 iptablesを無効にし、ウイルス対策をダウンロードし、ディレクトリを作成し、クローン依存関係を作り、証明書をインストールし、サーバーをセットアップし、構成をインストールし、SEVERを開始して有効にし、スワップを割り当て、アクセス許可を設定し、IP、IPv6アドレス、OpenDKIMキーを印刷します。かなり簡単ですが、多くのコードのように見えます。依存関係がないため、セロリ、セロリビート、ダフネを使用していないため、これは多く必要ありませんが、とにかくいくつかをインストールして開始します。このコードにはドメインが数回宣言されていることに注意してください。 また、ドメイン名を購入する必要があります(これは年間少額の料金です)。ドメインを購入するためにSquarespaceをお勧めします。レイアウトは直感的で使いやすい。お好みのドメインは任意のドメインを購入できますが、この例ではdomain femmebabe.comを使用しています。ドメインを購入したら、Squarespace DNS構成パネルに移動し、IPアドレスでサーバーにドメインを指すレコードを追加します。このように見えるはずです: @ a xx.xx.xx.xx @ operatorをホストとして、つまり、このドメインとルートドメインの下のすべてのサブドメインを意味します。すべてサーバーにリダイレクトされます。宣言するレコードはもっとありますが、メールを送信する準備ができたら、これらに進むことができます。サーバーからメールを正常に送信できるようになるまでに数日かかる場合があります。設定しているDNSレコードは、伝播するのに時間がかかります。 とにかく、開始する必要がある唯一のレコードはAレコードです。そのため、プロジェクトに従って以下のスクリプトに記入して実行できます。 より小さなセットアップスクリプトから始めて、基本的な進捗に必要なものをインストールするだけです。私たちはまだ多くの依存関係やpostgresqlを使用しません、私たちはただ基本的なHTTPサーバーを上げて、それが完了したときにそれを認証することを心配します。 HTTPS証明書を取得し、サーバーを安全に実行するには、サーバーをレンタルすることとともにドメインを購入する必要があります。今のところ、このファイルの「チーム」をユーザーの名前に置き換え、プロジェクトのディレクトリに「dir」を置き、<>タグにメールとドメインを提供します。 さらに、このコードを実行する前に、ホスティングプロバイダーがサポートしている場合、設定をファイアウォールに変更する必要があります。通常、これはホスティングプロバイダーの「ネットワーク」タブにあります。また、セルフホスティングの場合は、ルーターの「ポート転送」セクションにあります。また、セルフホスティングを使用している場合は、サーバーマシンのアドレスを使用してルーターを介して静的IPをセットアップする必要があります。読み取り/書き込みアクセスのために、次のポートを開く必要があります。 22(SSH) 25(メール) 587(メール) 110(メールクライアント) 80(http) 443
# !/bin/bash
# ログコマンド
# nano config
# git config
# 更新してインストールします
# クラマブアンチウイルスを有効にします
# ホスト名を設定します
# データベースのバックアップをセットアップします
# iptablesを無効にします
# virtualenvをセットアップします
# certbotをインストールします
# certbotを実行します
# ユーザー設定を設定します
# 設定権限
# sudo chown -rチーム:ユーザー/var/run/
# sudo chownルート:root/run/sudo/ts -r
# サービスをリロードおよび有効にします
# Apacheモジュールを有効にします
# デーモンをリロードし、アパッチ、ポストフィックス、opendkimを再起動します
# ドメイン構成のIPv6とOpendKimを表示します
このコードを実行する前に、購入したドメインがサーバーに接続されていることを確認してください。これを行うには、ローカルマシンで端末を開き、ドメインでこのコマンドを実行します。
ping femmebabe.com # pingの後、ここにドメインを挿入します
すべてがうまく見える場合、サーバーが応答を送信している場合、スクリプトを実行してパッケージをインストールし、Apacheサーバーを開始、有効化、証明する準備ができています。 これは、Postfixの構成に必要なすべてのセットアップではありません。後でそのセットアップを詳しく調べます。とりあえず、このセットアップコードを実行すると、サーバーのインストールと証明に数分かかるはずです。もう一度、購入した名前に従ってスクリプト内の名前、電子メール、ドメイン名を必ず置き換えてください。 サーバーがプロビジョニングされたので、任意のWebブラウザのURLに移動し、サーバーがHTTPSを実行していることを確認することができます。そうでない場合は、DNSレコードが追いつくのを少し待ってから、次のコマンドを実行してCertBot認定を再試行してください。

sudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
すべてを正しく構成している限り、コードが機能していることを知るために、Apacheのデフォルトページにアクセスできるはずです。次に、settings.pyを編集して、デフォルトのデバッグモードを生産に変更しましょう。また、内部IPSだけでなく、設定のドメインも構成します。

nano yourproject/settings.py
設定で、これらの行を変更/追加します。
# サイト構成
これで、apache2を構成する必要があります。この行で展開する構成ファイルを編集しましょう。

sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
この構成ファイルには、ドメイン名とユーザーとプロジェクトの名前があります。ドメイン名Femmebabe.com、ユーザー名チーム、およびプロジェクト名Femmebabeを使用しています。

ServerSignature Off
ServerTokens Prod
<IfModule mod_ssl.c>
<VirtualHost *:80> 
	Redirect permanent / https://femmebabe.com/
</VirtualHost>
<VirtualHost *:443>
	ServerName femmebabe.com
	ServerAdmin team@femmebabe.com
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	
	Alias /static /home/team/femmebabe/static
	<Directory /home/team/femmebabe/static>
		Require all granted
	</Directory>

Alias /media/icons /home/team/femmebabe/media/
<Directory /home/team/femmebabe/media>
Require all granted
</Directory>

	<Directory /home/team/femmebabe/femmebabe>
		<Files wsgi.py>
			Require all granted
		</Files>
	</Directory>

	WSGIScriptAlias / /home/team/femmebabe/femmebabe/wsgi.py
	WSGIDaemonProcess femmebabe python-path=/home/team/femmebabe/ python-home=/home/team/femmebabe/venv header-buffer-size=100000000000 user=team
	WSGIProcessGroup femmebabe
	WSGIApplicationGroup %{GLOBAL}
	
	<Directory /home/team/femmebabe/static>
                Options Indexes FollowSymLinks
                AllowOverride All
	</Directory>

	<IfModule mod_rewrite.c>
		RewriteEngine on
		RewriteCond %{REQUEST_URI} \.(css|webp|webm|gif|png|mp3|wav|jpeg|jpg|svg|webp)$ [NC]
		RewriteCond %{HTTP_REFERER} !^https://femmebabe.com/media/.*$ [NC]
		RewriteRule ^(.+?)/$ /media/$1 [F,L]
	</IfModule>

	Include /etc/letsencrypt/options-ssl-apache.conf
	SSLCertificateFile /etc/letsencrypt/live/femmebabe.com/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/femmebabe.com/privkey.pem

	Header set X-Frame-Options: "SAMEORIGIN"
	Header set Access-Control-Allow-Origin "https://femmebabe.com"

	TimeOut 60000
	LimitRequestBody 0

	<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|webp|JPG|JPEG|wav|mp3|mp4|public|js|css|swf|webp|svg)$">
		Header set Cache-Control "max-age=30, public"
	</FilesMatch>
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:80>
	ServerName femmebabe.com
	ServerAdmin team@femmebabe.com
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	RewriteEngine on
	RewriteCond %{SERVER_NAME} =femmebabe.com
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
</IfModule>
サーバーを構成するときは、この例コードのプロジェクト、ディレクトリ、およびドメインの名前を必ず置き換えてください。これで、デフォルトのサイトを無効にする必要があります。これは、bashを使用して実行できます。

sudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
次に、bashを使用して、デフォルトのサイトを有効にし、apache2をリロードできます。 femmebabeを、/etc/apache2/sites-abaible/で編集するときに宣言したファイルの名前に置き換えることを忘れないでください。

sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Navbarのドメインに戻ります。 Webブラウザで構成したサイトが表示されます。おめでとう!表示されない場合は、いくつかの変更を加える必要がある場合があります。プロジェクトの設定、Apache Configurationを慎重に確認し、エラーがないことを確認し、次のコマンドを実行してプロジェクトにエラーを確認します。

cd projectname
source venv/bin/activate
python manage.py check
Pythonプロジェクトにエラーがある場合は、それらをどこにいるかまでトレースして修正します。エラーがどこにあるかに応じてすべてのエラーを表示できない場合があるため、単に「copulateがリエントラントではない」というエラーがある場合は、仮想環境で次のファイルを編集して、registry.pyで編集して、エラー。

nano venv/lib/python3.12/site-packages/django/apps/registry.py
このランタイムエラーが発生する83行目にスクロールし(RuntimeError(“ Populate()resentrant "ではない」)、この行の前にコメントを追加してから、同じインデントでself.app_configs = {}を追加します。これは次のようになります:
                # appconfig.ready()の実行を避けるためにリエントラントコールを防ぐ
                # 方法は2回。
# RuntimeErrorをRaise( "Populate()は再入力していません")
その後、プロジェクトをもう一度確認して、エラーを公開できます。

python manage.py check
次に、エラーを確認して修正できます。修正して、コードがエラーなしでコンパイルされたら、ファイルを必ず変更して、次のようになります。
                # appconfig.ready()の実行を避けるためにリエントラントコールを防ぐ
                # 方法は2回。
# self.app_configs = {}
サーバーがオンラインである場合、さらに変更を加えると、次のコマンドを使用してサーバーをリロードする必要があります。

sudo systemctl reload apache2
素晴らしい!しかし、メールを送信するのはどうですか?メールの送信を開始するには、最初にドメイン構成を更新する必要があります。これは、SquarespaceのDNSパネル、または選択したドメイン名レジストラにある必要があります。また、設定をインストールして追加し、いくつかのコマンドを実行する必要があります。 まず、サーバーのIPv6アドレスを取得しましょう。その後、DNSを開き、レコードを追加します。 サーバーのIPv6アドレスを取得するには、このコマンドを使用します。

ip -6 addr
これで、次のレコードをDNS設定に追加できます。私のレコードはこのように見えます。ただし、レコードの場合、IPアドレスをIPに置き換える必要があります(75.147.182.214ではなく、それが私のものです)。また、Femmebabe.comの代わりにドメインを追加し、前のコマンドで見つかったIPv6アドレスを追加します(Mine、FE80 :: 725A:FFF:FE49:3E02を使用できません)。今のところDomainKeyについて心配しないでください。これは、Postfix、Mail Server、OpendKimを使用してキーを印刷するときに作成されます。最後に構成します。 @ a n/a 75.147.182.214 @ MX 10 femmebabe.com @ Ptr n/a femmebabe.com @ TXT n/a Txt @ V = SPF1 MX IP75.147.182.214IP6:FE80 :: 725A:FFF:FE49:3E02〜ALL default._bimi TXT n/a v = bimi1; l = https://femmebabe.com/media/static/femmebabe.svg _dmarc TXT n/a V = DMARC1; p =なし sendonly._domainkey TXT n/a次に、Postfixに持続的な構成を追加する必要があります。必要なのは、ドメイン名、Femmebabe.comを使用しているドメイン名に置き換えることです。すべての構成ファイルを1つずつ見て、OSにインストールするために、プロジェクトのConfig Configというディレクトリにインストールします。

nano config/etc_postfix_main.cf
このテキストをファイルに追加します
# /usr/share/postfix/main.cf.distを参照してください
# Debian固有:ファイル名を指定すると、最初のものが発生します
# そのファイルの行は、名前として使用されます。  Debianデフォルト
# /etc /mailNameです。
# myorigin = /etc /mailName
# Appling .DomainはMUAの仕事です。
# 次の行を解除して、「遅延メール」警告を生成します
# delay_warning_time = 4h
# http://www.postfix.org/compatibility_readme.htmlを参照してください - デフォルトは3.6オンです
# 新鮮なインストール。
# TLSパラメーター
# Milter構成
次の構成!

nano config/etc_postfix_master.cf
これらの行を追加します:
# 
# Postfixマスタープロセス構成ファイル。  フォーマットの詳細については
# ファイルについては、マスター(5)マニュアルページ(コマンド: "Man 5 Master"または
# オンライン:http://www.postfix.org/master.5.html)。
# 
# このファイルを編集した後、「ポストフィックスリロード」を実行することを忘れないでください。
# 
# =========================================================== ======================
# サービスタイププライベートUNPRIV Chroot WakeUp MaxProc Command + Args
# (はい)(はい)(いいえ)(決して)(100)
# =========================================================== ======================
# smtp inet n -y -1ポストスクリーン
# SMTPDパス -  Y-SMTPD
# dnsblog unix-- y -0 dnsblog
# tlsproxy unix -y -0 tlsproxy
# 1つを選択します。Loopbackクライアントのみ、またはクライアントに送信を有効にします。
# 127.0.0.1:submission inet n -y- smtpd
# -o syslog_name = postfix/submission
# -o smtpd_tls_security_level = encrypt
# -o smtpd_sasl_auth_enable = yes
# -o smtpd_tls_auth_only = yes
# -o smtpd_reject_unlisted_recipient = no
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o SMTPD_HELO_RESTRICTIONS = $ MUA_HELO_RESTRICTIONS
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
# -o smtpd_recipient_restrictions =
# -o SMTPD_RELAY_RESTRICTIONS = permit_sasl_authenticated、拒否
# -o milter_macro_daemon_name = originating
# 1つを選択します。Loopbackクライアントのみ、またはクライアントのSMTPSを有効にします。
# 127.0.0.1:SMTPS INET N -Y- SMTPD
# smtps inet n -y- smtpd
# -o syslog_name = postfix/smtps
# -o smtpd_tls_wrappermode = yes
# -o smtpd_sasl_auth_enable = yes
# -o smtpd_reject_unlisted_recipient = no
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o SMTPD_HELO_RESTRICTIONS = $ MUA_HELO_RESTRICTIONS
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
# -o smtpd_recipient_restrictions =
# -o SMTPD_RELAY_RESTRICTIONS = permit_sasl_authenticated、拒否
# -o milter_macro_daemon_name = originating
# 628 inet n -y- qmqpd
# Qmgr unix n -n 300 1 oqmgr
# -o smtp_helo_timeout = 5 -o smtp_connect_timeout = 5
# 
# =========================================================== =================
# 非ポストフィックスソフトウェアへのインターフェイス。必ずマニュアルを調べてください
# 非Postfixソフトウェアのページでは、必要なオプションを確認します。
# 
# 次のサービスの多くは、ポストフィックスパイプ(8)配達を使用しています
# エージェント。  $ {受信者}についての情報については、パイプ(8)女性ページを参照してください
# その他のメッセージエンベロープオプション。
# =========================================================== =================
# 
# メールドロップ。詳細については、postfix maildrop_readmeファイルを参照してください。
# また、main.cf:maildrop_destination_recipient_limit = 1で指定します
# 
# 
# =========================================================== =================
# 
# 最近のCyrusバージョンは、既存の「LMTP」Master.CFエントリを使用できます。
# 
# Cyrus.confで指定します:
# lmtp cmd = "lmtpd -a" listen = "localhost:lmtp" proto = tcp4
# 
# main.cfで指定します。
# Mailbox_transport = lmtp:inet:localhost
# virtual_transport = lmtp:inet:localhost
# 
# =========================================================== =================
# 
# サイラス2.1.5(Amos Gouaux)
# また、main.cf:cyrus_destination_recipient_limit = 1で指定します
# 
# Cyrus Unix -N N-パイプ
# flags = drx user = cyrus argv =/cyrus/bin/derivial -e -r $ {sender} -m $ {endixt} $ {user}
# 
# =========================================================== =================
# サイラスを介した配達の古い例。
# 
# オールドサイラスUnix -n n  - パイプ
# flags = r user = cyrus argv =/cyrus/bin/derivie -e -m $ {endoxt} $ {user}
# 
# =========================================================== =================
# 
# 構成の詳細については、Postfix uucp_readmeファイルを参照してください。
# 
# 
# その他の外部配信方法。
# 
およびOpendKim構成。 OpendKimは、ドメインキーを備えた電子メールサーバーを識別して、より安全にします。それがなければ、メールは署名されておらず、受信トレイに登場しない可能性があります。

nano config/etc_default_opendkim
これらの行を追加します:
# 注:これはレガシー構成ファイルです。 OpendKimで使用されていません
# SystemDサービス。対応する構成パラメーターを使用してください
# /etc/opendkim.conf代わりに。
# 
# 以前は、ここでデフォルト設定を編集してから実行します
# /lib/opendkim/opendkim.service.generate systemd override filesを生成します
# /etc/systemd/system/opendkim.service.d/override.conf and
# /etc/tmpfiles.d/opendkim.conf。これはまだ可能ですが、今です
# /etc/opendkim.confで設定を直接調整することをお勧めします。
# 
# daemon_opts = ""
# /var/spool/postfix/run/opendkimに変更して、unixソケットを使用します
# chrootのポストフィックス:
# rundir =/var/spool/postfix/run/opendkim
# 
# 代替ソケットを指定するための障害
# これを設定すると、opendkim.confのソケット値がオーバーライドされることに注意してください
# デフォルト:
# ポート54321のすべてのインターフェイスで聞く:
# Socket = INET:54321
# ポート12345のループバックで聞く:
# socket = inet:12345@localhost
# ポート12345で192.0.2.1で聞く:
# Socket = inet:12345@192.0.2.1

nano config/etc_dovecot_conf.d_10-master.conf
これらの行を追加します:
# default_process_limit = 100
# default_client_limit = 1000
# サービスプロセスのデフォルトVSZ(仮想メモリサイズ)制限。これは主にです
# 彼らが食事をする前にメモリを漏らすプロセスをキャッチして殺すことを意図した
# すべて。
# default_vsz_limit = 256m
# ログインユーザーは、ログインプロセスで内部的に使用されます。これは最も信頼されていないものです
# dovecotシステムのユーザー。何にもアクセスできないはずです。
# default_login_user = dovenull
# 内部ユーザーは、特権のないプロセスで使用されます。それは別にする必要があります
# ログインユーザー、ログインプロセスが他のプロセスを妨害できないようにします。
# default_internal_user = dovecot
    # ポート= 143
    # ポート= 993
    # SSL =はい
  # 新しいプロセスを開始する前に処理する接続の数。通常
  # 唯一の有用な値は0(無制限)または1。1の方が安全ですが、0
  # より速いです。 <doc/wiki/loginprocess.txt>
  # service_count = 1
  # 常により多くの接続を待ち続けるプロセスの数。
  # process_min_avail = 0
  # service_count = 0を設定した場合、おそらくこれを成長させる必要があります。
  # vsz_limit = $ default_vsz_limit
    # ポート= 110
    # ポート= 995
    # SSL =はい
    # ポート= 587
  # 上記のUNIXソケットを使用できない場合にのみINETリスナーを作成します
  # inet_listener lmtp {
    # インターネット全体にLMTPを表示しないでください
    # アドレス=
    # port =
  # }
  # ほとんどのメモリは、MMAP()ingファイルに移動します。これを増やす必要があるかもしれません
  # 巨大なメールボックスがある場合は制限します。
  # vsz_limit = $ default_vsz_limit
  # マックス。 IMAPプロセスの数(接続)
  # process_limit = 1024
  # マックス。 POP3プロセスの数(接続)
  # process_limit = 1024
  # マックス。 SMTP提出プロセスの数(接続)
  # process_limit = 1024
  # auth_socket_pathは、デフォルトでこのuserdbソケットを指しています。通常です
  # dovecot-lda、doveadm、おそらくimapプロセスなどが使用しているユーザー
  # このソケットへの完全な権限は、すべてのユーザー名のリストを取得できます。
  # 全員のuserDBルックアップの結果を取得します。
  # 
  # デフォルトの0666モードを使用すると、誰でもソケットに接続できますが、
  # userdbルックアップは、userdbが「uid」フィールドを返す場合にのみ成功します。
  # 発信者プロセスのUIDに一致します。また、発信者のUIDまたはGIDが一致する場合
  # ソケットのuidまたはgid lookupが成功します。他のものは失敗を引き起こします。
  # 
  # すべてのユーザーを検索するために発信者に完全な権限を与えるには、モードをに設定します
  # 0666以外の何かとdovecotを使用すると、カーネルが強制されます
  # 権限(たとえば、0777を使用すると、全員が完全な権限を許可します)。
  # Auth Workerプロセスはデフォルトでルートとして実行されるため、アクセスできるように
  # /など/影。これが必要ない場合、ユーザーはに変更する必要があります
  # $ default_internal_user。
  # user = root
  # DICTプロキシを使用する場合、メールプロセスはソケットにアクセスできるはずです。
  # 例:mode = 0660、group = vmail、およびglobal mail_access_groups = vmail
    # モード= 0600
    # ユーザー=
    # グループ=
もう一度、これらのすべてのファイルのドメイン、Femmebabe.comを選択したドメインに置き換えるようにしてください。次のファイル、dovecotの構成を編集します。

nano config/etc_dovecot_dovecot
これらの行を追加します
## dovecot構成ファイル
# 急いでいる場合は、http://wiki2.dovecot.org/quickconfigurationを参照してください
# 「doveconf -n」コマンドは、変更された設定のクリーンな出力を提供します。使用してください
# dovecotメーリングリストに投稿するときにファイルをコピーして貼り付ける代わりに。
# '# 'キャラクターとそれがコメントとして扱われた後のすべて。余分なスペース
# タブは無視されます。これらのいずれかを明示的に使用したい場合は、
# value inside quotes, eg.: key = "# チャーとトレーリングホワイトスペース」
# ほとんどの(すべてではありませんが)設定は、異なるプロトコルおよび/または
# セクション内に設定を配置して、ソース/宛先IPSなど:
# プロトコルIMAP {}、ローカル127.0.0.1 {}、リモート10.0.0.0/8 {}
# 各設定のデフォルト値が表示され、除外する必要はありません
# それらの。ただし、これらの例外です:セクションなし(例:名前空間{})
# または、プラグインの設定がデフォルトで追加され、それらは例としてのみリストされています。
# パスは単なる例であり、実際のデフォルトは構成に基づいています
# オプション。ここにリストされているパスは、configure  -  -prefix =/usrです
# -sysconfdir =/etc -localStatedir =/var
# インストールされたプロトコルを有効にします
# 接続のために耳を傾ける場所またはホストのコンマ分離されたリスト。
# "*"すべてのIPv4インターフェイスで聴きます "::"すべてのIPv6インターフェイスで聴きます。
# 非デフォルトポートなどを指定する場合は、より複雑なものを指定したい場合は、
# conf.d/master.confを編集します。
# 聞く= *、::
# ランタイムデータを保存するベースディレクトリ。
# base_dir =/var/run/dovecot/
# このインスタンスの名前。 Multi-InstanceのセットアップDoveadmおよびその他のコマンド
# -i <intance_name>を使用して使用するインスタンスを選択できます(代替案
# -c <config_path>へ)。インスタンス名もdovecotプロセスに追加されます
# PS出力で。
# instance_name = dovecot
# クライアントへの挨拶メッセージ。
# login_greeting = dovecot ready。
# 信頼できるネットワーク範囲のスペース分離リスト。これらからの接続
# IPはIPアドレスとポートをオーバーライドすることができます(ロギング用と
# 認証チェック用)。 disable_plaintext_authも無視されます
# これらのネットワーク。通常、ここでIMAPプロキシサーバーを指定します。
# login_trusted_networks =
# ログインアクセスチェックソケットのスペース分離リスト(TCPWRAPなど)
# login_access_sockets =
# proxy_maybe =はい、プロキシ宛先がこれらのipsのいずれかに一致する場合、しないでください
# プロキシ。これは正常に必要ではありませんが、目的地の場合は便利かもしれません
# IPは例えばロードバランサーのIP。
# auth_proxy_self =
# より多くの冗長プロセスタイトル(PS)を表示します。現在、ユーザー名と
# IPアドレス。誰が実際にIMAPプロセスを使用しているのかを見るのに便利です
# (たとえば、共有メールボックスまたは複数のアカウントに同じUIDが使用されている場合)。
# verbose_proctitle = no
# DoveCotマスタープロセスがシャットダウンすると、すべてのプロセスが殺される場合。
# これを「いいえ」に設定することは、DoveCotをなしでアップグレードできることを意味します
# 既存のクライアント接続を強制することを強制します(ただし、
# アップグレードがたとえばの場合の問題セキュリティ修正のため)。
# shutdown_clients =はい
# ゼロ以外の場合は、DoveAdMサーバーへのこの多くの接続を介してメールコマンドを実行します。
# 同じプロセスで直接実行する代わりに。
# doveadm_worker_count = 0
# UNIXソケットまたはホスト:DOVEADMサーバーへの接続に使用されるポート
# doveadm_socket_path = doveadm-server
# dovecotに保存されている環境変数のスペース分離リスト
# スタートアップとそのすべての子プロセスに渡されました。あなたも与えることができます
# key = valueペア常に特定の設定を設定します。
# import_environment = tz
## 
## 辞書サーバー設定
## 
# 辞書は、key = valueリストを保存するために使用できます。これはいくつかで使用されます
# プラグイン。辞書には直接または
# 辞書サーバー。次のDICTブロックマップ辞書名はURISに
# サーバーが使用されるとき。これらは、urisを使用して形式で参照できます
# 「プロキシ:: <Name>」。
  # quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
# 実際の構成のほとんどは以下に含まれます。ファイル名はそうです
# 最初にASCII値でソートされ、その順序で解析されます。 00-prefixes
# ファイル名では、注文を理解しやすくすることを目的としています。
# 設定ファイルは、エラーを与えずに含めることもできました
# 見つかりません:
# dovecotがすべての入力接続を聴くことができます(IPv4 / IPv6)
dovecotユーザーのパスワードを追加します。

nano config/etc_dovecot_passwd
コロンの前のファイルの最初の部分はユーザー名です。最後の部分「YourPassWord」は、メールサーバーを提供するパスワードを示します。

team:{plain}yourpassword
次に、opendkim config

nano config/etc_opendkim.conf
これらの行を追加します:
# これは、署名と検証のための基本的な構成です。簡単にすることができます
# 基本的なインストールに合わせて適応します。 opendkim.conf(5)および
# /usr/share/doc/opendkim/examples/opendkim.conf.sampleを完全に
# 使用可能な構成パラメーターのドキュメント。
# logwhy no
# 一般的な署名と検証パラメーター。 Debianでは、「From」ヘッダーです
# それは多くの場合、評判システムが使用するアイデンティティキーであるため、オーバー署名しました
# したがって、ややセキュリティに敏感です。
# 署名ドメイン、セレクター、およびキー(必須)。たとえば、署名を実行します
# セレクター「2020」(2020.domainkey.example.com)を備えたドメイン「embler.com」
# /etc/dkimkeys/example.privateに保存されている秘密鍵を使用します。もっと粒状
# セットアップオプションは/usr/share/doc/opendkim/readme.opendkimにあります。
# domain emple.com
# セレクター2020
# keyfile /etc/dkimkeys/example.private
# Debianでは、OpendKimはユーザー「OpendKim」として実行されます。 007のumaskが必要です
# SocketにアクセスしていないMTAを備えたローカルソケットを使用していない
# ユーザー(たとえば、postfix)。ユーザー「Postfix」をグループに追加する必要がある場合があります
# その場合の「Opendkim」。
# MTA接続用ソケット(必須)。 MTAがChroot刑務所の中にある場合、
# ソケットにアクセスできるようにする必要があります。 Debianでは、Postfixが実行されます
# /var/spool/postfixのchroot、したがって、unixソケットは
# 以下の最後の行に示されているように構成されています。
# ソケットローカル:/run/opendkim/opendkim.sock
# Socket Inet:8891@localhost
# ソケットINET:8891
# 検証するのではなく署名するホスト、デフォルトは127.0.0.1です。を参照してください
# 詳細については、OpendKim(8)の操作セクション。
# 内部ホスト192.168.0.0/16、10.0.0.0/8、172.16.0.0/12
# トラストアンカーはDNSSECを有効にします。 Debianでは、Trust Anchorファイルが提供されます
# パッケージDNS-ROOT-DATAによって。
# 名前サーバー127.0.0.1
# アドレスからメッセージに署名するために使用されるキーまでのドメインをマップする
# メールに署名すべき内部ホストのセット

nano config/etc_default_opendkim
これらの行を追加します
# 注:これはレガシー構成ファイルです。 OpendKimで使用されていません
# SystemDサービス。対応する構成パラメーターを使用してください
# /etc/opendkim.conf代わりに。
# 
# 以前は、ここでデフォルト設定を編集してから実行します
# /lib/opendkim/opendkim.service.generate systemd override filesを生成します
# /etc/systemd/system/opendkim.service.d/override.conf and
# /etc/tmpfiles.d/opendkim.conf。これはまだ可能ですが、今です
# /etc/opendkim.confで設定を直接調整することをお勧めします。
# 
# daemon_opts = ""
# /var/spool/postfix/run/opendkimに変更して、unixソケットを使用します
# chrootのポストフィックス:
# rundir =/var/spool/postfix/run/opendkim
# 
# 代替ソケットを指定するための障害
# これを設定すると、opendkim.confのソケット値がオーバーライドされることに注意してください
# デフォルト:
# ポート54321のすべてのインターフェイスで聞く:
# Socket = INET:54321
# ポート12345のループバックで聞く:
# socket = inet:12345@localhost
# ポート12345で192.0.2.1で聞く:
# Socket = inet:12345@192.0.2.1
Postfixサーバーを設定する準備ができたら、適切なドメイン名が組み込まれて、以下のコードを実行します。スクリプトを作成することから始めます

touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
現在、テキストエディターのNanoで、このファイルを編集して、femmebabe.comの代わりにドメイン名を含めます。
# !/bin/bash
# ポストフィックスをセットアップします
次に、完了したスクリプトを実行して、Postfix、OpendKim、DoveCotを構成します。

./scripts/postfixsetup
このスクリプトが実行されたら、最後に印刷する行をコピーして、sendonly._domainkeyの値としてDNS構成に貼り付けます。これは、安全なメールを送信するときにドメインを識別するために使用されるOpendKimキーです。 素晴らしい!数日以内に、すべてが正しく構成されている場合、サーバーからメールを送信できるはずです。 メールサーバーのDNSを構成しただけで、レコードが更新されるまで72時間未満かかるはずです。通常、はるかに速いです。このコマンドを使用してサーバーが機能しているかどうかを確認でき、メールを提供しました。

echo “test” | mail -s “Test Email” youremail@gmail.com
すべてが正しく機能しているように見える場合は、サーバーで電子メールを送信できるはずです。動作していない場合は、ログを見て、エラーが何であるかを確認してください。

tail –lines 150 /var/log/mail.log
これにより、サーバーによって送信されているメールに関する冗長な情報と、適切に機能しているかどうかが提供されます。受信トレイに電子メールも表示できるはずです。そこにない場合は、スパムフォルダーを確認してください。 また、電子メールサーバーがDjangoアプリ、プロジェクトに通信できるように、設定で設定を設定する必要があります。これらの行を設定に追加または交換します
EMAIL_HOST_USER = 'team' # 「love@mamasheen.com」
パスワードを取得するために構成ファイルを使用していることに注意してください。ファイルの最初に、このファイルを設定にロードしましょう。
# 設定を開いてロードします
このファイルを作成して、秘密の鍵とメールのパスワードを追加しましょう。秘密の鍵を生成するには、最後に好きな長さでこのコマンドを使用してください。

openssl rand -base64 64
ここで、openSSL生成されて編集されたテキストをコピーして /etc/config.json

sudo nano /etc/config.json
OpenSSLが秘密の鍵として生成されるキーを使用して、次の行をファイルに追加します。

{
	"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
	"EMAIL_HOST_PASSWORD": "yourpassword"
}
JSON形式はシンプルで使いやすいです。このようにしてプロジェクトで使用したい他のキーを宣言し、他のユーザーがそれらに書き込むことができないようにプロジェクトディレクトリとは別に保管しておくことができます。プロジェクトディレクトリだけから。これは、APIキーに推奨される練習です。この練習では、ここではいくつか使用します。 また、プロジェクトをバックアップして、すべてが保存されていることを確認し、サーバーをレンタルしたくない場合でも、後で作業を回復できるようになります。

sudo backup
次に、コマンドラインから送信している場合は、WebサーバーからHTMLメールを送信してみてください。シェルでユーザーインスタンスをクエリし、Djangoを介してそのユーザーにHTMLメールを送信します。コードのCharlotteの名前をユーザー名に変更します。

python manage.py shell
from django.contrib.auth.models import User
u = User.objects.get(username='Charlotte')
from users.email import send_welcome_email
send_welcome_email(u)
exit()
最初のコマンドが機能しない場合は、必ず使用してください

source venv/bin/activate
すべてが正しくセットアップされている場合は、Webアプリから送信されたメールボックスに歓迎のメールを受け取るようになりました。よくやった!あなたは長い道のりを歩んできました。 このようなプロジェクトに取り組んでいる間にエラーに苦労している場合は、回答を検索して助けを求めることをheしないでください。 Googleは、他の検索エンジンの中でも、プログラミングヘルプを検索するための優れたリソースです。あなたが得ているエラーを単に検索するだけで、他の人が問題をどのように解決するかを見ることができます。また、私に連絡してください、あなたの教育者(教師、教授、家庭教師)、インターネット上のピアプログラミングヘルプに利用できるか、この本または他のリソースを再度参照して、あなたが経験している問題の解決策を見つけてください。これは簡単ではないことを理解していますが、これまで読んでいて、コードを書いていなくても、Webアプリをゼロから構築することについて多くのことを学んでいます。背中を軽くたたいてください、あなたは素晴らしいことをしています仕事。 この第3版のWeb開発ガイドをお読みいただきありがとうございます。将来のエディションでは、ドキュメントの冒頭で説明した重要な例をもっと含め、ソフトウェアとハ​​ードウェア開発の世界に深く掘り下げます。今後のことをお楽しみに、信じられないほどのソフトウェアを構築する方法を教えてくれることを楽しみにしています。次は会いましょう






近い
ページ 1
ジャンプ
完全な記事を参照してください
読み続けます

による Daisy / ビュー | 買う | 暗号通貨で購入します


オンラインで2人のプレイヤーカラーSudoku無料 友達と無料で共同色の数独をプレイしてください。友達を招待してください ゲームに参加します ***
購入してください

による Daisy / ビュー | 買う | 暗号通貨で購入します


暗号市場はどのように急速に成長していますか?


暗号通貨市場の急速な成長に貢献するいくつかの要因があります。 


1.意識と採用の増加:暗号通貨と潜在的な利益に気付くと、暗号通貨投資の需要が大幅に増加しました。この関心の高まりにより、市場に参加するユーザーと投資家の数が急増しました。


2。制度的関与:過去数年にわたって、ヘッジファンド、銀行、その他の金融機関などの機関投資家が増加しており、暗号通貨市場に参加しています。これにより、市場に信頼性が追加され、さらに多くの投資家が集まりました。


3。テクノロジーの進歩:ブロックチェーンスペースの技術開発により、新しい暗号通貨が作成および取引されることが容易になりました。さらに、セキュリティ対策と規制の枠組みの進歩により、市場は投資家にとってより魅力的になりました。


4。市場のボラティリティ:暗号通貨市場の非常に不安定な性質により、価格の変動を活用し、比較的短期間で大幅な利益を上げようとするトレーダーと投資家が集まりました。


5。グローバルな受け入れ:暗号通貨は、世界中の多くの商人や企業によって支払いの形として受け入れられています。これは、暗号通貨を従来のフィアット通貨の実行可能な代替品として正当化するのに役立ちました。


全体として、これらの要因は暗号通貨市場の急速な成長に貢献しており、将来の拡大を促進し続ける可能性があります。


による Daisy / ビュー | 買う | 暗号通貨で購入します


自宅からWebサーバーをホストするにはどうすればよいですか?


自宅からWebサーバーをホストすることは、次の手順に従うことで実行できます。


1.サーバーソフトウェアを選択する:Apache、Nginx、Microsoft Internet Information Services(IIS)などのさまざまなサーバーソフトウェアオプションから選択できます。要件に合ったものを選択します。


2.静的IPアドレスを設定する:インターネットサービスプロバイダー(ISP)に連絡し、インターネット接続の静的IPアドレスをリクエストします。これにより、IPアドレスが変更されても、Webサイトがアクセスできるようになります。


3.ルーターの構成:ルーターの管理パネルにログインし、サーバーの内部IPアドレスにポート80(httpトラフィックのデフォルトポート)にログインします。これにより、外部トラフィックがWebサーバーに届くことができます。


4.サーバーソフトウェアのインストールと構成:サーバーソフトウェアをサーバーマシンにインストールし、仮想ホスト、SSL証明書などのセットアップなど、ニーズに応じて構成します。


5。ウェブサイトをテストする:静的IPアドレスをWebブラウザーに入力して、Webサイトにアクセスできるかどうかを確認します。 PingdomやGtmetrixなどのオンラインツールを使用してテストすることもできます。


6。ドメイン名とDNSのセットアップ:ウェブサイトのドメイン名を登録し、DNSレコードをセットアップして静的IPアドレスを指すようにします。


7。セキュリティ対策:ファイアウォール、暗号化、通常のバックアップなどのセキュリティ対策を実装して、サイバー脅威からWebサーバーを保護します。


8。監視とメンテナンス:パフォーマンスの問題、セキュリティの脅威、ソフトウェアの更新について、サーバーを定期的に監視します。サーバーのソフトウェアとアプリケーションを最新の状態に保ち、スムーズな機能を確保します。


自宅からWebサーバーをホストすることは、セキュリティリスクや帯域幅が限られているため、交通量の多いWebサイトや機密データには適していない場合があることに注意してください。このような要件に対してプロのWebホスティングサービスを使用することを検討してください。


による Daisy / ビュー | 買う | 暗号通貨で購入します


ウェブサイトの宣伝とオーガニックトラフィックを取得するにはどうすればよいですか?


1。検索エンジン最適化(SEO):検索エンジンのウェブサイトを最適化して、検索エンジンの結果ページでの可視性とランキングを改善します。


2。コンテンツマーケティング:ターゲットオーディエンスを引き付けて関与させる貴重で関連するコンテンツを作成します。これには、ブログ投稿、記事、ビデオ、インフォグラフィック、その他のコンテンツ形式が含まれます。


3。ソーシャルメディアマーケティング:Facebook、Twitter、Instagram、LinkedInなどのソーシャルメディアプラットフォームでWebサイトを宣伝して、より多くの視聴者にリーチし、ウェブサイトへのトラフィックを推進します。


4。有料広告:検索エンジン(Google Adwords)、ソーシャルメディアプラットフォーム、およびその他の関連するWebサイトで有料広告キャンペーンを実行して、ターゲットトラフィックをWebサイトに駆り立てることを検討してください。


5。インフルエンサーマーケティング:ニッチのインフルエンサーとパートナーであり、ウェブサイトを宣伝し、より多くの視聴者にリーチします。


6.メールマーケティング:サブスクライバーのメールリストを作成し、定期的な更新、プロモーション、コンテンツを送信して、トラフィックをWebサイトに戻します。


7。ネットワーキング:業界の他のウェブサイトの所有者、ブロガー、インフルエンサーとつながり、リンクを協力してリンクを交換して、ウェブサイトの可視性を向上させます。


8.広報:ジャーナリスト、ブロガー、メディアに連絡して、宣伝とトラフィックを生み出すために、あなたのウェブサイトに関連するニュースに値するストーリーまたは発表を売り込みます。


9。ゲストブログ:他のWebサイトに高品質のゲスト投稿を作成し、著者のバイオまたはコンテンツにWebサイトにリンクを含めてトラフィックを促進します。


10。オンラインコミュニティとフォーラム:ニッチに関連するオンラインコミュニティやフォーラムに参加し、貴重な洞察を共有し、質問に答え、関連する場合はウェブサイトを宣伝することでメンバーと関わります。

による Daisy / ビュー | 買う | 暗号通貨で購入します


なぜ人々はNFCインプラントを手にインプラントするのですか?


人々がNFC(近いフィールドコミュニケーション)インプラントを手にインプラントすることを選択する理由はいくつかあります。


1.利便性:NFCインプラントにより、個人は情報に簡単にアクセスしたり、ドアを開けたり、支払いをしたり、手の波で他のタスクを実行したりできます。これは、キー、IDカード、またはスマートフォンを持ち歩くよりも便利です。


2。セキュリティ:NFCインプラントは、アクティブ化するために個人の身体への物理的なアクセスが必要なため、セキュリティの追加層を提供できます。これは、デバイスや機密情報への不正アクセスを防ぐのに役立ちます。


3。技術実験:一部の人々は、新興技術を実験し、日常生活に統合する方法として、NFCチップをインプラントすることを選択します。


4.個人識別:NFCインプラントは、緊急時に簡単にアクセスできる医療情報や連絡先の詳細を保存するなど、個人識別目的で使用できます。


5。バイオハッキング:一部の個人は、NFCインプラントをバイオハッキングの形態と見なし、そこでは技術で体を増強して能力や経験を強化します。


全体として、NFCチップを手に埋めるという決定は、個々の好みや信念に基づいて人によって異なる個人的な選択です。


購入してください

による Daisy / ビュー | 買う | 暗号通貨で購入します


砂糖は本当に不健康ですか?


砂糖の過度の消費は、体重増加、肥満、糖尿病、心臓病、歯の問題など、さまざまな健康問題につながる可能性があります。健康を維持するために、私たちの食事中の追加糖の摂取を制限することをお勧めします。しかし、果物や野菜に見られる天然糖は、中程度の量で有害とは見なされず、健康的な食事の一部になる可能性があります。砂糖の消費に関しては、節度が重要です。


による Daisy / ビュー | 買う | 暗号通貨で購入します



Web開発中小企業の顧客を見つけるにはどうすればよいですか?


Web開発ビジネスの顧客を引き付けるために使用できるいくつかの戦略を以下に示します。


1.強力なオンラインプレゼンスを構築する:サービス、ポートフォリオ、クライアントの声を紹介するプロのウェブサイトを作成します。ソーシャルメディアチャネルを使用して、ビジネスを促進し、潜在的な顧客と関わりましょう。


2。ネットワーク:業界イベント、会議、およびミートアップに参加して、この分野の他の専門家や潜在的なクライアントとつながります。 Web開発に関連するオンラインコミュニティとフォーラムに参加して、ネットワークを拡大します。


3.紹介インセンティブの提供:紹介を成功させるために割引やその他のインセンティブを提供することにより、満足しているクライアントに他の人にサービスを紹介するよう奨励します。


4。他のビジネスとの協力:クライアントにWeb開発サービスを必要とする可能性のあるデジタルマーケティング機関、グラフィックデザイナー、または他の専門家とのパートナー。


5.広告:Google Adwords、ソーシャルメディア広告、または広告を表示して、より多くの視聴者にリーチする広告を介してオンライン広告に投資します。


6。コールドアウトリーチ:電子メールまたは電話を介して潜在的なクライアントに直接手を差し伸べ、サービスと以前の作業を紹介します。


7。コンテンツマーケティング:ブログ投稿、ホワイトペーパー、またはWeb開発の専門知識を実証し、検索エンジンやソーシャルメディアを通じて潜在的なクライアントを引き付けるなどの貴重なコンテンツを作成します。


8。展示会やイベントに参加する:潜在的なクライアントとつながり、サービスを紹介するために、業界のトレードショーやイベントに参加します。


9.無料相談を提供する:潜在的なクライアントに無料の相談を提供して、彼らのニーズと、あなたのサービスが彼らが彼らの目標を達成するのにどのように役立つかを議論します。


10.レビューと証言を求めてください:満足しているクライアントに、信頼性を構築し、新しい顧客を引き付けるために、あなたのウェブサイトまたは他のレビュープラットフォームにレビューと証言を残すように奨励します。


による Daisy / ビュー | 買う | 暗号通貨で購入します


プロのブログ投稿を書くにはどうすればよいですか?


プロのブログ投稿を書くことには、よく作られた魅力的なコンテンツを作成するためのいくつかの重要な手順が含まれます。プロのブログ投稿を書くのに役立つヒントを次に示します。

1.関連する魅力的なトピックを選択します。視聴者に関連するトピックを特定することから始めます。トピックが興味を持ち、読者に共鳴するものであることを確認してください。

2。徹底的な調査を実施する:執筆を始める前に、選択したトピックについて徹底的な調査を実施してください。これは、関連する情報、統計、事実を収集して、ポイントをサポートし、ブログ投稿をより信頼できるようにするのに役立ちます。

3.アウトラインを作成する:ブログ投稿のアウトラインを作成して、アイデアとキーポイントを整理します。これにより、コンテンツを論理的かつ一貫性のある方法で構築するのに役立ち、読者がフォローしやすくなります。

4。説得力のある紹介を書く:読者の注意を引く強力で魅力的な紹介からブログ投稿を始めてください。フックを使用して読者を引き付け、読み続けたいと思うようにします。

5.明確で簡潔な言語を使用する:ブログ投稿で専門用語や過度に専門的な言語の使用を避けないでください。すべての読者にとってコンテンツを理解しやすくするために、明確で簡潔な方法で書いてください。

6。ビジュアルを含める:画像、インフォグラフィック、ビデオなどのビジュアル要素は、テキストを分割し、ブログ投稿を視覚的に魅力的にするのに役立ちます。また、重要なポイントをサポートし、コンテンツをより魅力的にすることもできます。

7.校正と編集:ブログ投稿を公開する前に、文法、スペル、フォーマットエラーについては、徹底的に校正および編集してください。同僚や友人に、それを公開する前にフィードバックについてあなたの投稿をレビューするように頼むことを検討してください。

8.行動を促す呼び出しを追加:ブログへの購読、コメント、ソーシャルメディアでの投稿の共有など、読者があなたのコンテンツに関与することを奨励する強力な行動への呼びかけでブログ投稿を終了します

これらのヒントに従うことで、視聴者と共鳴し、あなたの分野での権威としてあなたを確立するプロフェッショナルで魅力的なブログ投稿を作成できます。

による Daisy / ビュー | 買う | 暗号通貨で購入します


Postfixでメールサーバーを構築するにはどうすればよいですか?


Postfixを使用してメールサーバーを構築するには、次の手順に従ってください。


1.ポストフィックスのインストール:パッケージマネージャーを使用して、サーバーにポストフィックスをインストールします。たとえば、Debian/Ubuntuでは、 `sudo apt-get install postfix」を実行できます。


2。postfixの構成:postfix構成ファイルは `/etc/postfix/`にあります。メイン構成ファイルは「main.cf」です。このファイルを編集して、要件に応じてメールサーバーを設定できます。設定する必要がある一般的な構成には、ドメイン名、メールリレー設定、仮想ドメインなどが含まれます。


3. DNSレコードの設定:メール配信を確保するには、ドメインに必要なDNSレコード(MXおよびSPFレコード)を設定する必要があります。必要に応じて、ドメインレジストラまたはDNSプロバイダーにお問い合わせください。


4.仮想ドメインとユーザーの構成:メールサーバーで複数のドメインをホストする場合は、仮想ドメインとユーザーを構成する必要があります。これは、postfix構成ファイルの「virtual_alias_maps」および `virtual_mailbox_maps`設定を使用して実行できます。


5.メールサーバーのセキュア:ファイアウォールルールをセットアップし、受信および発信メールにTLS暗号化を使用し、メールサーバーに推奨されるその他のセキュリティ対策を実装して、メールサーバーが保護されていることを確認します。


6.メールサーバーのテスト:すべてがセットアップされたら、テストメールを送信および受信してメールサーバーをテストする必要があります。 TelnetやMailxなどのツールを使用して、電子メールを手動で送信し、正常に受信したかどうかを確認します。


メールサーバーがスムーズかつ安全に実行されるように定期的に更新および維持することを忘れないでください。また、問題や疑わしいアクティビティについてメールサーバーログを監視することもお勧めします。

による Daisy / ビュー | 買う | 暗号通貨で購入します


卵を沸騰させる最良の方法は何ですか?


卵をゆでる簡単な方法は次のとおりです。


1.卵を鍋に入れて、冷水で覆います。

2。強火で水を沸騰させます。

3.水が沸騰したら、熱を低くし、卵を9〜12分間煮込みます。

4。卵を火から取り出し、すぐに氷水のボウルに移してすぐに冷却します。

5.冷却したら、完全にゆでた卵を剥がして楽しむことができます。


による Daisy / ビュー | 買う | 暗号通貨で購入します


良い本を書くにはどうすればよいですか?


1.明確なアイデアや概念を開発する:執筆を始める前に、本の堅実なアイデアを持っていることを確認してください。これは、あなたがあなたの執筆で探求したいプロット、キャラクター、テーマ、または設定かもしれません。


2。概要を作成します。執筆を開始する前に、本のメインプロットポイント、キャラクター、テーマの概要を説明します。 This will help you stay organized and focused as you write.


3. Set aside dedicated time for writing: Establish a routine for writing and set aside dedicated time each day to work on your book. This will help you stay motivated and make progress on your writing.


4。書き始めるだけ:本を書くのが最も難しい部分が始まっていることがあります。この段階で完璧を心配しないでください。書き始めて、紙にアイデアを下げてください。


5。ライティンググループまたはコミュニティに参加する:サポート、フィードバック、および動機付けのために、ライティンググループまたはコミュニティに参加することを検討してください。執筆は孤独な追求である可能性があるため、仲間の作家のコミュニティを持つことは非常に貴重です。


6。編集と修正:本のドラフトを完了したら、戻って修正して編集して、文章の明確さ、構造、流れを改善します。これには、本が公開される前に、複数のドラフトと改訂が含まれる場合があります。


7.フィードバックを求める:ベータリーダー、ライティンググループ、プロの編集者などの他の人と仕事を共有して、執筆に関するフィードバックを得ます。これにより、改善のための領域を特定し、本をより強くするのに役立ちます。


8。書き続ける:本を書くことはマラソンであり、スプリントではありません。前進し続け、献身的なままで、それが完了するまであなたの本に取り組み続けてください。


による Daisy / ビュー | 買う | 暗号通貨で購入します


準拠したメーリングリストとサブスクライブリンクを使用して電子メールを送信するにはどうすればよいですか?


準拠リストとよりタイトなサブスクライブリンクを含むメールを送信するには、次の手順に従う必要があります。


1.メーリングリストが、CAN-SPAM ActやGDPRなどのすべての関連する規制に準拠していることを確認してください。これは、すべての受信者があなたの電子メールを受け取るためにオプトインしている必要があり、彼らに連絡するという明示的な同意があることを意味します。


2。電子メールに明確で顕著な登録リンクを含めてください。見つけてクリックしやすいことを確認し、メーリングリストから簡単に登録できるページに受信者を直接連れて行くようにしてください。


3. [登録解除]リンク「タイト」を作成するには、シングルクリックの登録解除オプションを使用できます。つまり、受信者は、追加のフォームに記入したり、個人情報を提供したりせずに、1回のクリックで電子メールを登録解除できます。


4.メールを送信するときは、メッセージをパーソナライズし、可能であれば受信者を名前でアドレス指定してください。これは、エンゲージメントを増やし、電子メールを受信者により関連させるのに役立ちます。


5.メールを送信する前に、それをテストして、登録解除リンクが適切に機能していること、およびすべてのデバイスとメールクライアントで電子メールが良く見えることを確認します。


これらの手順に従うことにより、準拠リストとよりタイトな登録リンクを備えたメールを送信して、受信者が肯定的な経験を持ち、あなたからのさらなる電子メールを簡単に受信できるようにすることができます。

による Daisy / ビュー | 買う | 暗号通貨で購入します


デッドロックを着るにはどうすればよいですか?


1.髪を希望の長さまで伸ばすことから始めます。最良の結果を得るには、髪が少なくとも2〜3インチの長さでなければなりません。


2。髪を小さな、偶数の部品に包みます。セクションのサイズは、ドレッドヘアのサイズを決定するため、快適なサイズを選択してください。


3.髪の各セクションをねじり、根に向かってしっかりと引っ張ってバックコムを始めます。これにより、髪に結び目が生じ、最終的にはドレッドヘアになります。


4.髪の各セクションにワックスまたはジェルを塗り、結び目を所定の位置に保持し、髪を一緒にマットするように促します。


5.頭全体を完成させるまで、髪の各セクションをバックコムに続けてねじれます。このプロセスは時間がかかる可能性があるため、忍耐強く、必要に応じて休憩を取得してください。


6.すべての髪がねじれてバックコム化されたら、数日間放置して、結び目を締めてドレッドロックに形成します。


7.数日後、残留物のないシャンプーで洗浄し、かぎ針編みのフックを使用してゆるい結び目を締めることにより、ドレッドヘッドロックのスタイルと維持を開始できます。


8。ドレッドロックをきちんと整頓しているようにするには、スカーフまたはバンダナを使用して、睡眠中や汚れた環境で覆うことを検討してください。定期的なメンテナンスと維持は、あなたのDreadLockが健康で活気に満ちた状態を維持するのに役立ちます。

による Daisy / ビュー | 買う | 暗号通貨で購入します


なぜLワードでApple Lを使用する必要があるのですか?


LワードでApple Lを使用すると、いくつかの方法で視聴体験を向上させることができます。 Apple Lは、高品質のビデオとオーディオでお気に入りの番組を簡単にアクセスして視聴できる人気のあるストリーミングデバイスです。 L WordでApple Lを使用することで、アクションの真っin中にいるように感じるようになる、鮮明で明確なビジュアルと没入感のある音を楽しむことができます。


さらに、Apple Lはユーザーフレンドリーなインターフェイスを提供し、エピソードを簡単にナビゲートし、シーンを一時停止して巻き戻し、視聴体験をカスタマイズできます。また、音声検索やパーソナライズされた推奨事項などの機能を活用して、新しいコンテンツを楽しむことができます。


全体として、L WordでApple Lを使用すると、ショーの魅惑的な世界に完全に没頭できるプレミアムストリーミングエクスペリエンスを提供できます。

による Daisy / ビュー | 買う | 暗号通貨で購入します



片頭痛の原因とそれらはどのように扱われますか?


片頭痛は重度の頭痛であり、吐き気、光や音に対する感受性、視覚障害などの他の症状をしばしば伴うものです。片頭痛の正確な原因は完全には理解されていませんが、脳の血流と化学物質の変化に関連していると考えられています。


片頭痛の治療には、通常、ライフスタイルの変化、薬、および代替療法の組み合わせが含まれます。一般的な治療オプションには次のものがあります。


1.イブプロフェンやアセトアミノフェンなどの市販の鎮痛剤を服用する

2。トリプタンやエルゴタミンなどの片頭痛を治療するために特別に設計された処方薬

3.特定の食品、ストレス、睡眠不足、ホルモンの変化などのトリガーを避ける

4。深い呼吸や瞑想などのリラクゼーション技術の実践

5。ヘッドまたはネックにホットパックまたはコールドパックを適用する

6.定期的な運動をして健康的な食事を維持します


片頭痛に苦しむ個人が医療提供者と協力して、特定のニーズとトリガーに合わせた治療計画を開発することが重要です。場合によっては、片頭痛を効果的に管理し、生活の質を向上させるために治療の組み合わせが必要になる場合があります。

による Daisy / ビュー | 買う | 暗号通貨で購入します


なぜ公の場でマスクを着用する方が安全なのですか?


公共の場でマスクを着用することは、Covid-19などのウイルスを含む呼吸液の拡大を防ぐのに役立つため、より安全です。ウイルスを持っている人がマスクを着用すると、呼吸器滴が空中に放出され、他の人に感染する可能性があります。さらに、マスクを着用すると、感染している可能性のある他の人からの呼吸液滴を吸入することから着用者を保護することもできます。これは、混雑した屋内スペースや公共交通機関など、社会的距離を維持するのが困難な状況では特に重要です。全体として、マスクを着用することは、ウイルスの伝播を減らし、自分自身とあなたの周りの人々の両方を保護するためのシンプルで効果的な方法です。


による Daisy / ビュー | 買う | 暗号通貨で購入します


DjangoでフルスタックWebアプリを構築するにはどうすればよいですか?


DjangoでフルスタックWebアプリを構築するには、いくつかのステップが必要です。プロセスの一般的な概要は次のとおりです。


1. Djangoのセットアップ:最初に、コマンドラインに「PIPインストールDjango」を実行してDjangoをインストールします。次に、「django-admin startproject myproject」を実行して、新しいDjangoプロジェクトを作成します。


2。Djangoアプリの作成:Djangoアプリは、特定の目的に役立つプロジェクトのモジュラーコンポーネントです。プロジェクト内で複数のアプリを作成して、さまざまな機能を処理できます。


3。モデルの定義:Djangoのモデルは、データベーステーブルの構造を定義するために使用されます。各アプリのModels.pyファイルでクラスを定義してモデルを作成します。


4。ビューの作成:Djangoのビューは、ユーザーの要求を処理して応答を返すPython関数です。各アプリのViews.pyファイルで機能を作成して、アプリのビューを定義します。


5。URLSのセットアップ:DjangoのURLは、ユーザー要求を特定のビューにマッピングするために使用されます。各アプリでurls.pyファイルを作成し、プロジェクトのメインファイルにそれらを含めることにより、アプリのURLパターンを定義します。


6.作成テンプレートの作成:Djangoのテンプレートは、ユーザーのブラウザに送信されるHTMLページを生成するために使用されます。各アプリにテンプレートフォルダーを作成し、別のテンプレートファイルでHTMLコードを書き込むことにより、アプリのHTMLテンプレートを作成します。


7.静的ファイルの提供:CSS、JavaScript、画像などの静的ファイルは、Djangoの動的コンテンツとは別に提供されます。プロジェクトのsettings.pyファイルに静的ファイル設定を構成して、各アプリの静的フォルダーから静的ファイルを提供します。


8。データベースの構成:データベースエンジン、名前、ユーザー、パスワード、ホストなど、プロジェクトの設定.pyファイルにデータベース設定を設定します。


9。データベースの移行:「python manage.py makemigrations」を実行し、コマンドラインで「python manage.py移行」を実行して、モデルに基づいてデータベース移行を作成および適用します。


10。サーバーの実行:コマンドラインで「python manage.py runserver」を実行して、django開発サーバーを起動します。ブラウザでは、 `http://127.0.0.1:8000/`でWebアプリにアクセスできるようになりました。


これらは、Djangoを使用してフルスタックWebアプリを構築するための基本的な手順です。ここから、認証、承認、APIエンドポイント、テストなどを追加することにより、さらにカスタマイズおよび拡張できます。


による Daisy / ビュー | 買う | 暗号通貨で購入します


セキュリティカメラを持っていることの利点は何ですか?


1。犯罪行為の抑止 - セキュリティカメラは、視聴されていることを知っていれば犯罪を犯す可能性が低いため、潜在的な犯罪者の抑止力として機能する可能性があります。


2。監視と監視 - セキュリティカメラを使用すると、財産を監視し、盗難、破壊行為、またはその他の犯罪を防ぐのに役立ちます。


3。犯罪の場合の証拠 - 不幸な場合、犯罪があなたの財産で発生した場合、セキュリティカメラ映像は法執行および保険請求の重要な証拠を提供できます。


4。リモートアクセス - 多くのセキュリティカメラがリモートビューイング機能を提供し、スマートフォンまたはコンピューターを使用してどこからでもプロパティをチェックインできるようになりました。


5。心の安らぎ - セキュリティカメラを設置することは、あなたの財産が監視されており、潜在的な脅威が検出および記録されていることを知って、安心をもたらすことができます。


による Daisy / ビュー | 買う | 暗号通貨で購入します


避妊を始めたばかりです。最も一般的な副作用は何ですか?


避妊薬の最も一般的な副作用には次のものがあります。


1。吐き気

2。乳房の柔らかさ

3。頭痛

4。体重増加

5。気分の変化

6。スポッティングまたはブレークスルー出血

7。性欲の変化 

8。にきび 

9。膨満 


すべての人が異なる副作用を経験する可能性があり、一部の個人はまったく経験しない場合があることに注意することが重要です。避妊の副作用について懸念がある場合は、医療提供者と話すのが最善です。

による Daisy / ビュー | 買う | 暗号通貨で購入します




https://glamgirlx.com -


(クリックまたはタップして画像をダウンロード)
プロのエンターテイメント、写真、ビデオ、オーディオ、ライブストリーミング、カジュアルなゲームプレイ、IDスキャン、Web開発、代理出産サービス。

このアドレスを使用して、ビットコインにヒントを残してください。 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE

© Glam Girl X 2025

利用規約