Python Flask教程(一)

HuangZhang_123發表於2017-07-30

作業系統:Windows
Python:3.5
歡迎加入學習交流QQ群:657341423


路由規則

路由,就是我們常說的網址,專業一點就是url。
在Flask裡面,路由的設定是一個裝飾器實現的。如圖:
這裡寫圖片描述

括號裡面就是我們自定義的路由地址。而且為一個字串。皆以/為開頭。上圖就單一個/,就是代表域名主頁。看看執行結果就知道了
這裡寫圖片描述


路由的變數規則
在上圖可以看到這段程式碼

@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % username

這裡的url設定有<username>,而且函式帶引數username,這說明url裡面的<username> 是一個變數,而且通常引數形式傳遞給對應的函式。


路由的/規則
看程式碼
這裡寫圖片描述
會發現沒有註釋的程式碼的url設定裡面,結尾一個有/,一個是沒有的。
先看看執行結果:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
會發現projects在url上無論加不加/都可以調到該網頁上,但是about就不行。
這個細節的設計要值得注意。
題外話:在django也有這個情況。不過和Flask完全是不一樣的情況。


路由的get和post
使用者每次訪問網頁都是http裡面的get方法,Flask裡面設定get,post方法是在路由設定的。

from flask import request
#匯入reques
#設定post和get
@app.route('/projects/',methods=['GET', 'POST'])
def projects():
	#判斷是post還是get
	if request.method=='POST':
		return 'The project page'
	else:
		return 'a'

方法比較簡單。這裡不做詳細解釋。

基本上Flask的路由設定大概就那麼多:
1,路由的變數規則
2,路由的/規則
3,設定http的post和get


Ruturn型別

模板渲染
看完路由的設定,然後看def裡面的return,這個return和Django的一樣功能,都是使用者瀏覽該url後,伺服器通過這個url返回顯示相應的網頁給使用者瀏覽。也就是說url生成的頁面內容。
程式碼

@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)

通過匯入from flask import render_template
然後return render_template即可
注意的是模板(html檔案)在該檔案目錄下templates查詢的。
如圖
這裡寫圖片描述

<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello World!</h1>
{% endif %}

基本上模板的渲染和Django的一樣用法。可參考
此外還有模板繼承,請參考


重定向
在return一個模板之外,還有一個重定向的方法,就是我瀏覽了這個url之後,自動跳轉到另外的一個url上。
程式碼

from flask import redirect
@app.route('/about/aa')
def aa():
    return redirect('/projects/')

這程式碼實現了,當瀏覽器輸入http://127.0.0.1:5000/about/aa後,會自動跳到http://127.0.0.1:5000/projects/。

基本上return的方法就模板渲染和重定向


獲取post和get資料

from flask import request	
@app.route('/projects/',methods=['GET', 'POST'])
def projects():
	if request.method=='POST':
		name=request.form.get('name','aa')
		age=request.form.get('age','b')
		return name+' is '+age
	else:
		a=request.args.get('mytext1','mypassword')
		return str(a)

獲取post方法有2種,官方文件是request.form['username']
這裡是用request.form.get(‘name’,‘aa’)的。
個人比較建議使用第二種,因為第一種如果username不存在的話,會出異常。而第二種的話,就是name不存在的話,值會變成aa。

同理get也是如此
測試結果:
這裡寫圖片描述

此外還有檔案上存功能,請參考


基本上一個簡單的網站就這樣完成了。這個只能算入門級。後面會涉及到admin站點管理,flask_sqlalchemy(ORM)工具使用,flask構建MTV開發模式

相關文章