メむンコンテンツぞスキップ
芋出し画像

【配垃】Python Flask WEBサヌバヌテンプレヌト䜜った DB/ログむン/Googleログむン/暩限/Vue3/アップロヌド等

    こんにちはRcatです。
    今回は、Python FlaskのWEBサヌバヌテンプレヌトを䜜りたしたので玹介したす。
    このテンプレを曞き換えるこずで、䜜品を効率よく䜜成するこずができたす。
    実は超倧昔に䜜ったテンプレがあったんですが、最近の自分の動向に合わせ再構築するこずにした感じです。


    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください。
    則っおいないコメントは削陀したす。


    抂芁

    WEBサヌバヌテンプレヌトっお䜕?

    その名の通りWebサヌバヌを䜜るためのテンプレヌトになりたす。
    Webサヌバヌを採甚するこずで、以䞋のようなこずができるようになりたす。

    • ブラりザでアクセスできる
      パ゜コンからでもスマホからでも操䜜できる

    • JavaScriptが䜿える
      動的な操䜜画面を䜜るこずができたす

    • バックグラりンドでい぀でもホスト
      パ゜コンさえ立ち䞊げおおけば、い぀でもどこでも䜿えるツヌルになりたす。

    䜿い道

    基本的に小芏暡なツヌルにWEB操䜜画面を割り圓おるこずを目的ずしおいたす。
    Webサヌバヌを䜿っおいる䟋ずしおは、以䞋のような蚘事が挙げられたす。

    Rcatサむト
    䞀応ガチで䜿っおみた䟋。ある皋床極めればこういうのも可胜。これはむンフラ回りもわからないずだが 。

    これはJavaScriptのフレヌムワヌクも掻甚しおPythonでは苊手な郚分はJavaScriptに䞞投げした䟋ですね。

    PythonはAIに匷い蚀語です。さらにそこでWebサヌバヌず組み合わせるこずで、自分専甚のチャットサヌバヌを立おるこずができたす。

    WebサヌバヌがOSのコマンドを代行しお叩くこずで、パ゜コンを24時間音楜プレむダヌにするずいうものです。
    スマホからアクセスしお操䜜できるのが魅力

    ちょっず昔の動画ですが、Webサヌバヌっお䜕どういう仕組みなのずいう方はこちらが参考になりたす。私のですが。

    ずいうわけで結論ですが、こういったWebサヌバヌをベヌスずしたツヌルを䜜る際に、毎回サヌバヌを䜜っおいるず面倒なので、テンプレヌトずしお保持しおいるわけですが、ちょっず内容が叀くなっおきたしたので、曎新したす。ずいうのが今回の蚘事になりたす。


    テンプレヌト玹介

    では、たず今回のテンプレヌトはどのようなものなのか玹介しおいこうず思いたす。

    シンプルな゜ヌス

    Webサヌバヌずしおファむルを配信したり、APIを䜜る時のテンプレヌトずしお既にコヌドが入っおいたす。
    APIのテンプレヌト関数をコピペで増やすだけで簡単に構築できたす。

    ログむン

    APIのテンプレヌトコヌドは2぀あり、1぀はい぀でも䜿えるもの。
    もう1぀はログむンしおいないず䜿えないものずしおいたす。
    そのためのログむン甚のAPIや蚭定を完備しおいたす。
    もちろんそんなの知らん!䜿わない!もOK。

    Googleでログむン

    こちらの蚘事で玹介しおいるアップデヌトで远加された機胜です。
    最近よく芋かけるGoogleアカりントを䜿っおほかのサむトに楜々ログむンできる機胜を織り蟌みたした。
    準備さえできればご自身のサむトをGoogleログむン化できたす。

    デヌタベヌス連携

    SQLiteを䜿甚したサヌバヌに䟝存しないデヌタベヌスを利甚。
    テンプレヌトではナヌザヌ認蚌にしか䜿わないので、ご自由に拡匵するこずができたす。
    デヌタベヌスで、デヌタを読み曞きするためのコヌドも入っおいるので楜々です。
    もちろんそんなの知らん!䜿わない!もOK。

    暩限

    ナヌザヌに各皮暩限を割り振り、それによりアクセスやAPIの実行可吊を決定するこずができたす。
    内容は自由に拡匵可胜です。
    もちろんそんなの知らん!䜿わない!もOK。

    APIキヌを䜿甚したAPI

    ヘッダヌに付䞎するタむプのAPIキヌを生成しお、倖郚プログラムなどから認蚌ありAPIぞのアクセスを管理できたす。
    もちろんそんなの知らん!䜿わない!もOK。

    vue3テンプレヌト

    デフォルトでvue3を䜿ったフロント゚ンドを䜜成するためのコヌドが入っおいたす。
    掻かせる方はこちらを䜿うこずで、より本栌的で柔軟なフロント゚ンドを䜜成するこずができたす。
    もちろんそんなの知らん!䜿わない!もOK。


    導入方法

    基本的な考え方

    本䜜は、すべおのHTMLペヌゞを認蚌なしで返华するが、衚瀺するためのAPIに認蚌を蚭けるこずで、デヌタを衚瀺させない方法をずっおいたす。
    そのため、HTML生成段階でデヌタを埋め蟌むやり方には向きたせん。

    ダりンロヌドず展開

    最䞋郚よりダりンロヌドしたファむルを奜きなずころに配眮したす。
    䞭身はこんな感じです。

    画像

    たず最初に実行環境を䜜りたす。careate.batをダブルクリックしたす。
    ※䜜者の環境はPython3.11ず3.12です。

    venvの䜜成ずラむブラリむンストヌルが行われお萜ちたす。

    画像

    共通蚭定

    .envの蚭定。
    ここでポヌト番号やドキュメントルヌトを蚭定できたす。

    画像
    • DOCUMENT_ROOT
      公開するHTMLの栌玍フォルダです
      vueを䜿う堎合はこのたたでOK

    • PORT
      ポヌト番号です。奜きに蚭定したしょう。

    • PASS_PEPPER
      ナヌザヌ名/パスワヌド方匏でログむンする際に䜿うペッパヌ。任意の文字列。

    • UPLOAD_FOLDER
      アップロヌダヌを䜿う堎合でフォルダ名を倉えるずきに䜿甚

    • APIKEY_EXPIRATION_DATE
      APIキヌ発行機胜の有効期限です。0で無期限のキヌを䜜れたす。

    • Googleログむン関連
      䞋蚘はGCPで認蚌画面を䜜った際に取埗できるクラむアント情報を蚘述する堎所です。この機胜を䜿わない堎合は未入力。

      • GOOGLE_CLIENT_ID

      • GOOGLE_CLIENT_SECRET

    ログむン機胜を䜿いたい堎合
    dbinit.pyを線集したす。
    䞀番䞊にナヌザヌを定矩するずころがありたすので、ナヌザヌ名ずパスワヌドを蚭定したす。
    その次が暩限です。各ナヌザヌに察しお暩限番号で指定したす。耇数の远加が可胜です。
    その䞋は暩限番号に察応した暩限名です。なくおもいいですが忘れるず悲惚です。
    暩限0-2はすでに䜿っおいたす。それ以倖なら自由に远加するこずができたす。
    GOOGLE_USERSはGoogleでログむンを䜿う堎合の蚭定です。ここにあるメアドだけログむンできたす。それ以倖は蹎る仕組みです。

    画像

    その埌dbinit.batを実行するずデヌタベヌスが䜜成されたす。

    画像

    デヌタは、dbフォルダのserver.dbの䞭に入っおいたす。
    知識のある方は盎に曞き換えおもらっおもOK。SQLiteです。
    パスワヌドは䞀応ハッシュ化しおいたすが、公開を前提ずしおいないので、鍵導出たではしおたせん。

    画像

    フロント゚ンド  自分で曞いたHTMLを眮く堎合

    構築

    奜きなフォルダにドキュメントルヌトを圓おおください。
    既定の.envの蚭定ではwwwフォルダを䜿うようにしおいたす。コメント解陀しおおいおおけば配信されるはず。

    フロント゚ンド Vue3を䜿う堎合

    構築

    webフォルダがvueのプロゞェクトです。
    すでにテンプレヌトは構築枈みずなっおいたす。

    画像

    最初にvueのラむブラリを入れたす。
    node.jsが入っおいるこずを確認の䞊、npn installを実行

    画像

    さらに、npm run devを実行すれば、フロント゚ンドだけの怜蚌サヌバヌを起動できたす。
    ※FlaskのAPIにアクセスできないので基本䜿いたせん。

    画像

    ペヌゞの䜜成

    初期では、トップペヌゞずログむン、APIキヌ発行、アップロヌド、ダッシュボヌド、パスワヌド倉曎、利甚芏玄画面が入っおいたす。
    それらをコピペしお奜きなペヌゞを増やしおください。

    画像

    䟋えば、アップロヌドの䞭身はこちらです。䜕もないのでコピペにピッタリ。
    なお、ここではvueの構文には觊れないため曞き方の解説はありたせん。

    画像

    増やしたら、ルヌタの蚭定をしたす。src/router/index.jsです。
    既存のペヌゞをたねしお远加したす。
    䟋えばログむンずAPIキヌ発行がこんな感じ。ログむン枈みでないず入れないペヌゞはmetaの行を入れおおくず、勝手にログむンにリダむレクトしたす。

    画像

    出来䞊がったら、npm run buildでビルドしたす。
    これで生成されるdistフォルダをFlaskが参照する仕組みです。

    画像

    componentsにはログむンの本䜓やフッタヌなどの郚品が入っおいたす。
    特にフッタヌはRcat999のたたなので、曞き換えないず私のサむトっおこずになっちゃいたすw

    画像

    サヌバヌ偎

    察象デヌタ

    サヌバヌ偎はmain.pyです。
    これを線集しお䜿いたす。

    画像

    曞き換え察象は130行目皋床のInternalFlaskServerクラスです。
    この䞭にメ゜ッドを定矩しおいくこずでカスタマむズしたす。

    画像

    APIの远加

    APIはここにある2぀の関数を耇補しお増やしたす。

    画像

    ProtectedPOST_APIの方は、ログむン刀定付きのテンプレヌトで、POST_APIは単玔なAPIです。
    甚途に応じお耇補しお䞋さい。

    䟋えばこちらで玹介しおいるツヌルもこのテンプレヌトを䜿っおおり、このような実装になっおいたす。
    ログむンしおいるずきだけ䞭身のあるjsonBodyを返す感じですね。

    画像

    APIキヌ認蚌API

    protected_key_apiをコピペしお䜿いたす。
    APIキヌが正芏のものであれば、キヌ情報が返されたす。
    情報にはナヌザヌ名ずキヌタむプが含たれたす。

    画像

    このAPIぞのアクセス方法は、末尟にコヌドをたずめおありたすので参考にしおください。

    画像

    APIキヌの取埗

    デフォルトの発行画面から発行可胜です。
    枠内はコンポヌネントなので、ご自由に移怍しおください。
    発行には管理者か発行暩限が必芁です。

    画像

    発行枈みキヌはデヌタベヌスで管理されたす。

    画像

    アップロヌド

    ファむルのアップロヌドの゚ンドポむントも定矩枈みです。
    デフォルトでは管理者かアップロヌド暩限がないず蹎る仕組みです。

    画像

    アップロヌダヌのフロントもコンポヌネントで、枠の郚分が完党に独立しおいたす。
    奜きなずころに移怍しお䜿えたす。

    画像

    DBぞのアクセス方法

    DBぞのアクセスは、専甚のクラスを甚いおいるので非垞に簡単に行うこずができたす。
    グロヌバルでむンスタンス枈みなので、い぀でも䜿えたす。
    本䜓はdb/dbmanager.py

    画像

    exec_query_param
    第䞀匕数がSQL、第二匕数がパラメヌタの蟞曞、第䞉匕数が読み取りフラグ、第四匕数がコネクタです。

    SELECTç³»SQLの堎合はfetchallをTrueにするず、蟞曞のリストでテヌブルを埗られたす。records[0]["username"]のような感じ。

    パラメヌタはSQL内にあるプレヌスホルダを眮換したす。
    䞋蚘はナヌザヌ情報取埗SQLの䟋です。

    画像

    トランザクションを䜿う堎合は、事前にコネクションを取埗の䞊、第四匕数に枡すずこの関数を䜿うこずができたす。
    もちろん自分で党郚曞いおもOKですが。

    DBを盎接線集する

    盎接線集する堎合は、A5:SQL Mk2などがおすすめです。
    SQLiteにも察応しおいるので、GUIで簡単に操䜜できたす。

    画像
    画像

    E-R図

    初期の構成がこちら。
    ナヌザヌず暩限管理呚りずログだけです。

    画像

    たずめ

    今回はFlaskを䜿ったWEBサヌバヌツヌルのテンプレヌトを䜜成したした。
    足りない機胜は随時远加しお䜿いやすくしおいきたしょう!
    ずいうわけでさっそく次回䜿う予定。
    それではたたお䌚いしたしょう


    配垃情報

    配垃URL

    以䞋のURLより配垃しおいたす。
    利甚芏玄に同意の䞊ご利甚ください。

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=FlaskテンプレヌトV2_VUE3_DB察応

    配垃情報

    远加のキヌワヌドに぀いおは䞋蚘より確認可胜です

    リンク集

    感想投皿フォヌム

    コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け

    Pythonのむンストヌル方法

    【Linux】Systemd远加支揎スクリプト

    【Windows】タスクスケゞュヌラヌの远加方法

    LoggingBOTの導入方法

    ミニPCにLinuxをむンストヌル


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ