flashkフレームurlとリダイレクト操作例詳細
本明細書の例は、flashkフレームurlとリダイレクト動作を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
1.urlと関数のマッピング
flashkプロジェクトを新規作成すると、デフォルトでハローがあります。world関数は、次のようになります。
私たちはapp.route()のパラメータを'/hello/'に変更すると、このビューにアクセスするには、URLを入力して127.1.0.1:5000/hello/を入力してから、私たちのこのビューにアクセスできます。
これはflashkのurlと関数のマッピングです。
2.url着信パラメータ urlにはパラメータ が含まれています。
CSDN、ブログ園、略書などのウェブサイトの記事の詳細を訪問すると、各記事の開始ページのurlの前に封緘しないのは同じです。後ろの部分だけが違っています。この異なる部分は一つのパラメータとしてビューに入ることができます。そして、対応するパラメータをビューで入手して対応する操作を行い、該当するデータを返します。flashkではこの機能はどうやって実現されますか?
そしてアイテムを起動し、ブラウザに127.1.0.1:5000/articale_を入力します。detail/3/など似たようなurlは、それなりの効果が見られます。
上記の例では、urlを介して関数ビューにパラメータを入力することができますが、私たちはurlに対してタイプ制限をすることはできません。IDは必ず一つのintデータである必要があります。ユーザが入ってきたパラメータがint型のデータではない場合、彼は私たちのこの関数ビューにアクセスできません。404ページが現れます。flashkではどうやってこのような要求を実現しますか?
flashkでは、urlに対してタイプを指定できます。
flashkでは、intタイプに加えて、以下のタイプがサポートされています。 string:デフォルトのデータタイプは、任意のスラッシュ/文字列を受け入れます。 int:整形 float:浮動小数点型。 path:stringと似ていますが、スラッシュを渡すことができます。 uuid:uuidタイプの文字列。何がuuidですか?) any:複数のパスを指定できます。これは一例で説明します。 urlにおいて、パラメータ(get要求) を照会文字で送る。
ある時、私達は上のようにパラメーターを渡す必要がありません。通過しますか?xxx=xxxという形でパラメータを伝えます。
flashkでは、このパラメータの値はどうやって得られますか?
もし私達のurlの中でnameというパラメータが入っていないならば、私達のプログラムも間違いなく報告して、Noneを得るだけで、私達のコードの運行に影響しません。
3.構造url、url_forの使用
上のコードでは、ブラウザにurlを入力することにより、私たちのビュー関数を見つけます。逆にしてもいいですね。ビュー関数を知って、それに応じてurlを得ることができます。
この時は私達はurl_を使う必要があります。forです。まず私たちの先に導入します。
url_にいますforという関数では、私たちもキーワードパラメータに入ることができます。urlのパラメータに対応するだけでいいです。
もし私たちがウルルにいたらforからurlにはないキーワードパラメータが入ってきましたが、どうなりますか?
つまり、私達がurlに入ってきた時にはない鍵となるパラメータです。forは検索文字で逃げればurlに追加されます。
私たちの関数に対応するurlは何のために使いますか?
クルクルforは普通リダイレクトと一緒に使うので、単独で使うのは普通ではないです。だから、次にリダイレクトします。
4.リダイレクト
リダイレクトは、永久リダイレクトと一時リダイレクトに分けられます。恒久的リダイレクト:httpの状態コードは301で、古いアドレスが破棄されたため、新しいアドレスに移動してユーザーのアクセスを確保する必要があります。例えば京東のサイトです。私たちはジンドング.comを入力すると、ブラウザは私たちにjd.comというウェブサイトにジャンプします。ジンドング.comはこのウェブサイトがすでに廃棄されていますので、jd.comにもう一度ジャンプしてください。これは永久リダイレクトです。 一時的なリダイレクト:httpの状態コードは302で、ページの一時的なジャンプを表しています。例えば、あるウェブサイトで直接に個人センターページにアクセスしますが、ログインしていないので、直接にログインページにジャンプします。 flashkでは、リダイレクトを使うにはdirectという関数が必要です。
リダイレクトの使用を一例で説明した。
需要:私達は個人の中心に訪問する時、もし上陸していないならば、上陸のページにジャンプしなければならなくて、ここで私達はurlの中でnameパラメーターに入ったと仮定して、上陸したのだと思っています。コードは以下の通りです
この時、「redirect関数」では、url cuuを使わなくてもいいです。for、直接手動構造urlを構築しても、特に面倒ではないです。例えば、このように。
ここではざっとurl_を使うと言います。forのメリットですね私達のプロジェクトがとても大きい時、もしある日社長が私達を必要とするならば、urlを修正します。例えば、/index/を/xxx/index/に変更したら、私達はap.routeの中で修正しました。もし私達のプロジェクトで大量に使われているredirectが私達のこの関数ビューにリダイレクトすれば、コードの中の一つを探しに行かなければなりません。コードを修正します。もし私達がurl_を使ったら。for、じゃこのような問題はないです。直接に@app.routeを修正すればいいです。他のところは私達が使っているのはurl_です。forが生成されたので、私達が修正する必要はありません。 私たちのurlに特殊な文字がある場合、'/'などのように直接手動でこのパラメータを構築すると、意味が違ってくる可能性があります。これ'/'はurlの'として認識しますか?それとも普通の文字として認識しますか?forなら、url_forは'/'を符号化して、私たちが使う時に割引して復号してきますので、翔の上のような状況は出ません。 5.HTTP要求方法の指定
いくつかの場合、我々のビューはPOSTメソッドのみにアクセスすることができます。一方、
本稿で述べたいのですが、flashkフレームに基づくPythonプログラムの設計に役立ちます。
1.urlと関数のマッピング
flashkプロジェクトを新規作成すると、デフォルトでハローがあります。world関数は、次のようになります。
@app.route('/')
def hello_world():
return 'hello world'
上記の関数の中で、app.route()のパラメータは私達のurlです。プロジェクトを開始する時、私達はブラウザに127.1.0.1:5000を入力して、私達のこのビューにアクセスできます。私たちはapp.route()のパラメータを'/hello/'に変更すると、このビューにアクセスするには、URLを入力して127.1.0.1:5000/hello/を入力してから、私たちのこのビューにアクセスできます。
これはflashkのurlと関数のマッピングです。
2.url着信パラメータ
CSDN、ブログ園、略書などのウェブサイトの記事の詳細を訪問すると、各記事の開始ページのurlの前に封緘しないのは同じです。後ろの部分だけが違っています。この異なる部分は一つのパラメータとしてビューに入ることができます。そして、対応するパラメータをビューで入手して対応する操作を行い、該当するデータを返します。flashkではこの機能はどうやって実現されますか?
@app.route('/article_detail/<article_id>/')
def article_detail(article_id):
return " id %s" % article_id
上の関数ビューでは、app.route()
でこのパッケージを使用して私たちが定義したパラメータです。ここでは、articale gauを定義します。idのようなパラメータです。私たちはurlにパラメータを定義した後、このパラメータを関数にも書き込む必要があります。パラメータ名はurlのパラメータ名と一致していなければなりません。そして、私たちは図の中でアートを手に入れることができます。IDというパラメータの値が出ました。そしてアイテムを起動し、ブラウザに127.1.0.1:5000/articale_を入力します。detail/3/など似たようなurlは、それなりの効果が見られます。
上記の例では、urlを介して関数ビューにパラメータを入力することができますが、私たちはurlに対してタイプ制限をすることはできません。IDは必ず一つのintデータである必要があります。ユーザが入ってきたパラメータがint型のデータではない場合、彼は私たちのこの関数ビューにアクセスできません。404ページが現れます。flashkではどうやってこのような要求を実現しますか?
flashkでは、urlに対してタイプを指定できます。
@app.route('/article_detail/<int:article_id>/')
def article_detail(article_id):
return " id %s" % article_id
このようにして、私たちは入ってきたパラメータに対して、タイプ制限をしました。パラメータの前にタイプを書いてください。flashkでは、intタイプに加えて、以下のタイプがサポートされています。
@app.route('/<any(blog,article):url_path>/<int:id>/')
def detail(url_path,id):
if url_path == 'blog':
return 'blog detail is ' + str(id)
else:
return 'article detail is ' + str(id)
このように、私達はブラウザに127..0.1:5000/blog/3/または127..0.1:5000/articale/3/いずれもこのビューにアクセスできます。では、どのように現在のurlでアクセスしているかを知ることができますか?この値を受け入れるためにpathパラメータを使用して、そして私たちもビューにこのパラメータを書き込みます。そして私たちはこの値を手に入れることができます。ある時、私達は上のようにパラメーターを渡す必要がありません。通過しますか?xxx=xxxという形でパラメータを伝えます。
flashkでは、このパラメータの値はどうやって得られますか?
from flask import request
@app.route('/search/')
def search():
name = request.args.get('name')
return " %s" % name
例えば上記のビュー関数の中に、name=xxxを入力して、文字を検索して逃げ込みたいです。そうすると、私達は直接ブラウザに127.1.0.1:5000/search/?name=xxxを入力して、関数ビューの中でrequest.args.get()
方法でこの値を得ることができます。もし私達のurlの中でnameというパラメータが入っていないならば、私達のプログラムも間違いなく報告して、Noneを得るだけで、私達のコードの運行に影響しません。
3.構造url、url_forの使用
上のコードでは、ブラウザにurlを入力することにより、私たちのビュー関数を見つけます。逆にしてもいいですね。ビュー関数を知って、それに応じてurlを得ることができます。
この時は私達はurl_を使う必要があります。forです。まず私たちの先に導入します。
from flask import url_for
@app.route('/url_for/')
def url_for_demo():
return 'url_for_demo'
@app.route('/index/')
def index():
#
return url_for('url_for_demo')
クルクルforのパラメータは関数の名前ですが、入ってきた関数が存在しないとエラーが発生します。ブラウザに127.1.0.1:5000/index/を入力してみましょう。私たちはurl_を見ることができます。for_デモという関数に対応したurlです。パラメータのないurlで覚えましたが、urlの中にパラメータを持ってきたらどうなりますか?url_にいますforという関数では、私たちもキーワードパラメータに入ることができます。urlのパラメータに対応するだけでいいです。
@app.route('/article/<int:article_id>/')
def article_detail(article_id):
return "article id is " + str(article_id)
@app.route('/index/')
def index():
# key , url
url = url_for('article_detail',article_id=2)
return url
これで、私達もurl_にいることができます。forからurlのパラメータが入ってきました。もし私たちがウルルにいたらforからurlにはないキーワードパラメータが入ってきましたが、どうなりますか?
@app.route('/article/<int:article_id>/')
def article_detail(article_id):
return "article id is " + str(article_id)
@app.route('/index/')
def index():
# key , url
url = url_for('article_detail',article_id=2,name='xxx')
return url
私たちはこのurlを訪問すると、このようなurlに戻ります。つまり、私達がurlに入ってきた時にはない鍵となるパラメータです。forは検索文字で逃げればurlに追加されます。
私たちの関数に対応するurlは何のために使いますか?
クルクルforは普通リダイレクトと一緒に使うので、単独で使うのは普通ではないです。だから、次にリダイレクトします。
4.リダイレクト
リダイレクトは、永久リダイレクトと一時リダイレクトに分けられます。
リダイレクトの使用を一例で説明した。
需要:私達は個人の中心に訪問する時、もし上陸していないならば、上陸のページにジャンプしなければならなくて、ここで私達はurlの中でnameパラメーターに入ったと仮定して、上陸したのだと思っています。コードは以下の通りです
from flask import redirect,url_for
@app.route('/login/')
def login():
return 'login'
@app.route('/profile/')
def profile():
name = request.args.get('name')
if name:
return 'profile '
else:
return redirect( url_for('login') )
上のコードは私達の需要を実現しました。この時、「redirect関数」では、url cuuを使わなくてもいいです。for、直接手動構造urlを構築しても、特に面倒ではないです。例えば、このように。
return redirect('login')
です。これで私も直接ロゴページにジャンプできます。ここではざっとurl_を使うと言います。forのメリットですね
いくつかの場合、我々のビューはPOSTメソッドのみにアクセスすることができます。一方、
@app.route()
はデフォルトではGET方法のみを許可しますが、どうやって要求を許可する方法を指定しますか?@app.route()
において、本方法によってサポートされるHTTP方法を指定するキーワードパラメータmethodsが導入され得る。
# POST
@app.route('/post_demo/',methods=['POST'])
def post_demo():
return 'post'
# , get ,
@app.route('/get_demo/',methods=['GET'])
def get_demo():
return 'get'
# GET,POST
@app.route('/all_demo/',methods=['POST','GET'])
def all_demo():
return 'all'
注意:@app.route('/index')
と@app.route('/index/')
からは対応する二つのurlがあります。普通はプロジェクトの中で後ろの一つを使っています。いくつかのブラウザの中には、私たちの一番後ろに'/'が追加されていない場合、ブラウザは自動的に私たちに追加されます。このようなurlがありますか?だから、ページが見つからないかもしれません。だからプロジェクトの中で、私達は普通はいずれも後のような形に書きます。本稿で述べたいのですが、flashkフレームに基づくPythonプログラムの設計に役立ちます。