序文これまでの API 開発では、FastApi を使用してうまく実現できました。ただし、実際の使用では、通常、フロントエンド プロジェクトとバックエンド プロジェクトを分離することをお勧めします。今日は、FastApi+Vue+LayUI を使用して、フロントエンドとバックエンドを分離したデモを作成します。 プロジェクト設計後部バックエンドでは、FastApi を使用して新しいテスト ビューでルートを定義し、アプリに登録します。また、フロントエンドが呼び出してレンダリングできるように、データベースからのデータの読み取りをシミュレートするためのインターフェイスをテスト ビューに定義します。 テスト fastapi から FastAPI、Depends、Header、HTTPException、APIRouter をインポートします。 fastapi.param_functionsから本文をインポート starlette.requestsからリクエストをインポート starlette.templating から Jinja2Templates をインポートします スターレットのインポートステータスから uvicorn をインポートする データからインポートデータ fastapi.responses から StreamingResponse をインポートします fastapi.responsesからJSONResponseをインポートします # ルーターをインスタンス化する router = APIRouter() テンプレート = Jinja2Templates('テンプレート') # ビューはルーターを使用してリクエストメソッドとURIを宣言することに注意してください @router.get('/info') ユーザーリスト()を定義します: # vueのレスポンスデータ項目 = [ {'id':'1','name':'フィガー'}, {'id':'2','name':'飛ぶ'}, {'id':'3','name':'エンヘン'}, ] JSONResponse(content=items) を返します @ルーター.get('/') def welcome(): 「テストルートはこちらです」と返します ''' 実際、ここでの home.html も、ユーザーにレンダリングするためにフロントエンド サービスが必要です。 ただし、デモンストレーションの便宜上、フロントエンド サーバーを起動せず、フロントエンド コードを home.html に直接記述しました。 実際、ユーザーが /check を要求すると、フロントエンド コードはデータを取得するために /info インターフェイスを要求します。 これにより、フロントエンド ページでのデータ レンダリングが可能になります。 ''' @router.get('/check') def home(リクエスト:リクエスト): テンプレートを返します。TemplateResponse(name='home.html',context={'request':request,}) フロントエンドフロントエンドでは、Vue、LayUI、Axios の JS および CSS CDN リソースを直接インポートします。Vue インスタンスのマウントフェーズでは、axios を使用してバックエンドインターフェイスを呼び出してデータを取得し、LayUI スタイルを使用してテーブル要素を美しくします。 <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta http-equiv="X-UA-compatible" content="IE=edge"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <script src="https://unpkg.com/vue@next"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <!-- layui.css をインポート --> <link rel="スタイルシート" href="https://www.layuicdn.com/layui/css/layui.css" rel="外部nofollow" /> <!-- layui.js をインポート --> <script src="https://www.layuicdn.com/layui/layui.js" type="text/javascript" charset="utf-8"></script> <title>ホーム</title> </head> <本文> <div id="アプリ"> <テーブルクラス="layui-table"> <tr v-for="p in 情報"> <td>[[ p.id ]]</td> <td>[[ p.name ]]</td> </tr> </テーブル> </div> <テーブル id="test" クラス="layui-table"></テーブル> <script type="text/javascript"> const Vapp = Vue.createApp({ データ() { 戻る { 情報: [{id:1,name:'phyger'}], 情報: 「こんにちは、vue...」 } }, マウント() { this.showinfo(); }, メソッド: { 表示情報(){ axios.get('/test/info') .then(応答=>{ this.infos=レスポンスデータ; console.log(応答); コンソールにログ出力します。 }) ,エラー=>{ コンソールログ(エラー); }; }, }, }) Vapp.config.compilerOptions.delimiters = ['[[', ']]'] Vapp.mount('#app') </スクリプト> </本文> </html> プロジェクトを実行するFastApi バックエンド サーバーを起動し、/test/check インターフェイスにアクセスします。 質疑応答Q: /info インターフェースをリクエストすると、なぜ一時リダイレクトが常に表示されるのですか? A: 理由は、FastApi インターフェイスを定義したときに、URI の形式が標準化されていなかったためです。URI の末尾に / は必要ありませんでした。インターフェイスに / を追加し、ブラウザーを使用して URI にアクセスすると、ブラウザーは末尾の / を無視します。FastApi は、/ のないブラウザー要求を、/ で定義したビュー関数に内部的にリダイレクトします。 FastApi+Vue+LayUI によるフロントエンドとバックエンドの分離を実現するサンプルコードに関するこの記事はこれで終わりです。FastApi+Vue+LayUI によるフロントエンドとバックエンドの分離に関するその他の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: サーバー上の php-cgi.exe プロセスが多数存在し、CPU が 100% 占有される問題の解決方法
>>: CSS が最初のサイクルで画像を読み込むために @keyframes を使用するときに発生するホワイトギャップの問題 (フラッシュ画面) をすばやく解決します。
HTML 仕様書では、画像の crossorigin 属性が導入されています。適切なヘッダー情報 ...
この記事では、ボタン切り替え画像を実現するためのVueの具体的なコードを例として紹介します。具体的な...
序文: MySQL を使用すると、時間の表示が正しくない、タイムゾーンが GMT+8 ゾーンにない、...
エラーを報告するApache\Nginx サービスは正常に起動しましたが、MySQL は起動に失敗し...
MySQL のメンテナンスを容易にするために、エラー情報を収集するためのインターフェースを提供するス...
目次1. はじめに2. ソリューションの実装2.1 実装コード2.2 コードの説明2.3 検証結果1...
目次クロスドメインの理由JSONP Nginxソリューションバックエンドソリューションクロスドメイン...
Linuxシステムでは、dockerを新しくインストールし、次のようなコマンドを入力します。dock...
1. KVM の概要カーネルベースの仮想マシンの略称は、Linux 2.6.20 以降のすべての主要...
コンテナデータボリュームとはデータがコンテナ内にある場合、コンテナを削除するとデータは失われます。例...
nginx は弊社で最もよく使用されるサーバーで、コンテンツ配信やリバース プロキシによく使用されま...
この記事では、Nodejs 開発プロセスで遭遇する配列の特性によって発生する問題と解決策、および配列...
背景最近、複数のプロジェクトを展開する際に、1 つのドメイン名で複数のプロジェクトにアクセスする方法...
今日は、サイトの設定やウェブサイトのアップロードなど、FlashFXP の最も基本的な機能を紹介しま...
ブラウザが IE のどのバージョンであるかを検出するためによく使用される JavaScript コー...