Flask (2)


  • Flashでhtmlドキュメント
  • を使用する方法

    Templates


    フラスコの場合、これらのファイルを識別するにはHTMLドキュメントに個別のディレクトリを作成する必要があります.フォルダの場所はフラスコを実行するコードと同じで、templatesという名前でなければなりません.まずtemplateフォルダでhello.htmlファイルを作成し、次のコードを作成します.
    # hello.html
    
    <!doctype html>
    <html>
       <body>
       
          <h1>Hello {{ name }}!</h1>
          
       </body>
    </html>
    今、app.pyを少し修正すると!
    # app.py
    
    from flask import Flask, render_template
    # render_template import 해주고
    
    app = Flask(__name__)
    
    @app.route('/hello/<user>')
    def hello_name(user):
       return render_template('hello.html', name = user)
    # import해준 render_template를 return 값으로 반환해쥬기
    
    if __name__ == '__main__':
       app.run(debug = True)
    # 앞선 블로깅에서 언급했는데, debug 옵션을 True로 보내주면, 웹 서버가 실행 중에 코드가 변경되어도 해당 작업을 그대로 반영시킨다. 
    # 실제로 개발 중에 구현 현황을 실시간으로 확인할 수 있어 엄청 편리하다. 아무 인자도 주지 않을 경우, False 인자로 보내진다.

  • render_template('hello.html', name = user)
    これがフラスコから外部htmlファイルをロードする方法です.templatesフォルダでパラメータとして受信したhello.htmlファイルを参照した後、nameパラメータを渡してページを実行します.

  • Hello {{ name }}!
    パラメータとして受信したname変数はhtmlドキュメントにこのように出力できます.htmlドキュメントで直接コードを実行するために{}などを使用する構文をTemplate Engineと呼び、このテンプレートエンジンの名前はJinja 2です.

  • Jinja2
    このテンプレートエンジンを使用して、HTMLドキュメントでいくつかのPython構文を作成および実行できます.(if文、for文、およびいくつかの方法が使用可能)コードの用途に応じて適切なカッコを使用します.
  • >> 요렇게!
    {% ... %} for Statements
    {{ ... }} for Expressions to print to the template output
    {# ... #} for Comments not included in the template output
    # ... ## for Line Statements

    ローカル()メソッドの使用


    Webページの性質に応じて、HTMLドキュメントには多くの変数やデータ型が表示される場合があります.したがって,この関数の全領域変数をパラメータとして送信するlocals()法を用いることは非常に便利である.
    # app.py
    
    from flask import Flask, flash, redirect, render_template, request
     
    app = Flask(__name__)
     
    @app.route("/")
    def index():
        return "Flask App!"
     
    @app.route("/user/")
    def hello():
     
        users = [ "Frank", "Steve", "Alice", "Bruce" ]
        var = 1
        return render_template('user.html', **locals())
     
    if __name__ == "__main__":
        app.run(host='0.0.0.0',debug = True)
  • locals()メソッドを使用して、ゾーン内で宣言されたユーザーリストとvar変数をrender template関数に送信します.

  • 不思議ですね.ふーん…!
    😜 FlashでWebを起動すると、それぞれのURL間でHTTPを移動して使う方法を学びます!😜

    直接


    ドラムの中でurlsです.pyという父urls.pyサブurls.pyが既に作成されている場合、FlaskはURL間を簡単に移動できるようにリダイレクト方法を提供します.
    # app3.py
    
    from flask import Flask, redirect, url_for
    app = Flask(__name__)
    
    @app.route('/admin')
    def hello_admin():
        return 'Hello Admin'
    
    @app.route('/guest/<guest>')
    def hello_guest(guest):
        return 'Hello %s as Guest' % guest
    
    @app.route('/user/<name>')
    def hello_user(nmae):
        if name == 'admin':
            return redirect('/admin')
        else:
            return redirect(url_for('hello_guest', guest=name))
            
    if __name__ == '__main__':
        app.run(debug=True)

  • 以上のコードは、/user/URLに入力されたname値に基づいて他のURLを指します!name値がadminの場合、/admin URL(hello admin()を実行し、残りはguest/URL(hello guest)を実行する構造です.

  • return redirect('/admin') == return redirect(url_for("hello_admin"))
    対応するURLでリダイレクトする関数.URLを提供したりurl for()メソッドを使用して実際の関数名をパラメータ形式で提供したりすることができます!😎 前者の方が便利だと思います!

  • return redirect(url_for('hello_guest', guest = name))
    url forの場合、残りのパラメータを渡すと、上記のコードのように変数に分けることができます.Pythonの文字列アクセスはもともと便利なので、実際のURLを与えるのも悪くなく、書くのも便利です~~😎
  • HTTP Methods

    from flask import Flask, redirect, url_for, request
    app = Flask(__name__)
    
    @app.route('/success/<name>')
    def success(name):
        return 'welcome %s' % name
    
    @app.route('/login', methods = ['POST', 'GET'])
    def login():
        if request.method == 'POST':
            user = request.form['nm']
            return redirect(url_for('success', name=user))
        else:
            user = request.args.get('nm')
            return redirect(url_for('success', name=user))
            
    if __name__ == '__main__':
        app.run(debug = True)

  • @app.route('/login',methods = ['POST', 'GET'])
    デフォルトでは、FlashのルーティングはGETメソッドを使用して応答しますが、必要に応じて、特定のメソッドのみに応答すると宣言できます.上記のコードは、POSTとGETの2つの方法に応答することを可能にする.
    分けて置けます!

  • if request.method == 'POST':
    POSTメソッド要求時.

  • user = request.form['nm']
    これは、コードが要求されたフォーム情報からの「nm」フィールド値を取得することを意味する.結果を確認するには、フォームを作成して実行する必要があります.次のhtmlファイルを作成し、そのまま開きます.
  • # asd.html
      
    <html>
       <body>
          
          <form action = "http://localhost:5000/login" method = "post">
             <p>Enter Name:</p>
             <p><input type = "text" name = "nm" /></p>
             <p><input type = "submit" value = "submit" /></p>
          </form>
          
       </body>
    </html>

  • Webサーバに接続するのではなく、ファイルを直接開く必要があります.フォームを含むhtmlドキュメントはflaskに完全に関連付けられていないためです.ただし、フォームのactionフィールドのURLとしてPOST要求がある場合は、結果を表示するためにWebサーバにPOST要求を送信することができる.

  • else: user = request.args.get('nm')
    else文には当然GETメソッドリクエストが残ります.get(「nm」)により、FlashはURLを介して渡されるnmフィールドのパラメータを使用することができる.今回はformを別途作成する必要はなく、URLを直接使ってパラメータを提供すればいいです.
  • http://127.0.0.1:5000/login?nm=eunhye
    ソース:https://blog.naver.com/shino1025/221348321746
    ソース:https://blog.naver.com/shino1025/221348289584