Flask (2)
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)
不思議ですね.ふーん…!
😜 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
Reference
この問題について(Flask (2)), 我々は、より多くの情報をここで見つけました https://velog.io/@majaeh43/Flask-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol