【Python】Flask系列-URL和視圖筆記

一、學習目標

  1. 熟悉Flask相關知識。
  2. 熟悉web開發流程。
  3. 能獨立開發Flask項目。

二、環境配置

Python虛擬環境安裝

  1. 由於python的框架更新迭代太快了,有時候須要在電腦上存在一個框架的多個版本,這時候虛擬環境就能夠解決這個問題。
  2. 經過如下命令安裝虛擬環境:前端

    pip install virtualenvpython

  3. 開闢新的虛擬環境:web

    virtualenv [virtualenv-name]flask

  4. 激活虛擬環境:
    • [類Linux]:source [虛擬環境的目錄]/bin/activate
    # 進入Python虛擬環境
    cd C:\ProjectCode\PythonScript\python2venv\Scripts\
    • [Windows]:直接進入到虛擬環境的目錄,而後執行activate瀏覽器

    • 退出虛擬環境:deactivate服務器

pip安裝Flask

  1. 執行activate腳本,進入指定的虛擬環境。
  2. 在該虛擬環境中,執行如下命令安裝:pip install flask
  3. 驗證flask是否安裝成功:
* 進入python命令行。
    >>> import flask
    >>> print flask.__version__

三、基礎知識

url 基礎知識

  1. 若是使用的是http協議,那麼瀏覽器就會使用80端口去請求這個服務器的資源。
  2. 若是使用的是https協議,那麼瀏覽器會使用443端口去請求這個服務器的資源。

一個URL由如下幾部分組成:app

scheme://host:port/path/?query-string=xxx#anchor

scheme:表明的是訪問的協議,通常爲http或者https以及ftp等。
host:主機名,域名,好比www.baidu.com。
port:端口號。當你訪問一個網站的時候,瀏覽器默認使用80端口。
path:查找路徑。好比:www.jianshu.com/trending/now,後面的trending/now就是path。
query-string:查詢字符串,好比:www.baidu.com/s?wd=python,後面的wd=python就是查詢字符串。
anchor:錨點,後臺通常不用管,前端用來作頁面定位的。框架

WEB服務器和應用服務器以及web應用框架

WEB服務器:負責處理HTTP請求,響應靜態文件,常見的有Apache,Nginx以及微軟的IIS.函數

應用服務器:負責處理邏輯的服務器。好比PHP、Python的代碼,是不能直接經過Nginx這種WEB服務器來處理的,只能經過應用服務器來處理,常見的應用服務器有uwsgi、Tomcat等。學習

WEB應用框架:通常使用某種語言,封裝了經常使用的WEB功能的框架就是WEB應用框架,Flask、Django以及Java中的SSH(Structs2+Spring3+Hibernate3)框架都是WEB應用框架。

四、第一個flask程序

  1. Pychrm要添加flask的虛擬環境。添加虛擬環境的時候,選擇建立豪的虛擬環境中python執行文件。
C:\ProjectCode\PythonScript\python2venv\bin\python.exe
  1. flask程序代碼的詳細解釋:

01app_hello

# 從flask這個框架中導入Flask這個類
from flask import Flask

# 初始化一個Flask對象
# Flaks()
# 須要傳遞一個參數__name__
# 1. 方便flask框架去尋找資源
# 2. 方便flask插件好比Flask-Sqlalchemy出現錯誤的時候,好去尋找問題所在的位置
app = Flask(__name__)

# @app.route是一個裝飾器
# @開頭,而且在函數的上面,說明是裝飾器
# 這個裝飾器的做用,是作一個url與視圖函數的映射
# 127.0.0.1:5000/   ->  去請求hello_world這個函數,而後將結果返回給瀏覽器
@app.route('/')
def hello_world():
    return 'Hello World!'

# 若是當前這個文件是做爲入口程序運行,那麼就執行app.run()
if __name__ == '__main__':
    # app.run()
    # 啓動一個應用服務器,來接受用戶的請求
    # while True:
    #   listen()
    app.run()

設置debug模式

  1. 在app.run()中傳入一個關鍵字參數debug,app.run(debug=True),就設置當前項目爲debug模式。
  2. debug模式的兩大功能:
    • 當程序出現問題的時候,能夠在頁面中看到錯誤信息和出錯的位置。
    • 只要修改了項目中的python文件,程序會自動加載,不須要手動從新啓動服務器。

02Debug_Mod

#encoding: utf-8

from flask import Flask
import config

app = Flask(__name__)
app.config.from_object(config)

@app.route('/')
def hello_world():
    return '我是知了課堂'

if __name__ == '__main__':
    app.run(DEBUG = True)

使用配置文件

  1. 新建一個config.py文件
  2. 在主app文件中導入這個文件,而且配置到app中,示例代碼以下:
import config
app.config.from_object(config)
  1. 還有許多的其餘參數,都是放在這個配置文件中,好比SECRET_KEYSQLALCHEMY這些配置,都是在這個文件中。

url傳參數

  1. 參數的做用:能夠在相同的URL,可是指定不一樣的參數,來加載不一樣的數據。
  2. 在flask中如何使用參數:
    @app.route('/article/<id>') def article(id): return u'您請求的參數是:%s' % id
    • 參數須要放在兩個尖括號中。
    • 視圖函數中須要放和url中的參數同名的參數。

03url_params

#encoding: utf-8

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/article/<id>')
def article(id):
    return u'您請求的參數是:%s' % id

if __name__ == '__main__':
    app.run(debug=True)

反轉URL

  1. 什麼叫作反轉URL:從視圖函數到url的轉換叫作反轉url
  2. 反轉url的用處:
    • 在頁面重定向的時候,會使用url反轉。
    • 在模板中,也會使用url反轉。

04url_reverse

#encoding: utf-8

from flask import Flask,url_for

app = Flask(__name__)

@app.route('/')
def index():
    # 做用於登陸、註冊的跳轉
    print url_for('my_list')
    print url_for('article',id='123')
    return 'Hello World!'

@app.route('/list/')
def my_list():
    return 'list'

@app.route('/article/<id>/')
def article(id):
    return u'您請求的id是:%s' % id

if __name__ == '__main__':
    app.run(debug=True)

頁面跳轉和重定向

  1. 用處:在用戶訪問一些須要登陸的頁面的時候,若是用戶沒有登陸,那麼可讓她重定向到登陸頁面。
  2. 代碼實現:
    from flask import redirect,url redirect(url_for('login'))

05redirect

#encoding: utf-8

from flask import Flask,redirect,url_for

app = Flask(__name__)

@app.route('/')
def index():
    login_url = url_for('login')
    return redirect(login_url)
    return u'這是首頁'

@app.route('/login/')
def login():
    return u'這是登陸頁面'

@app.route('/question/<is_login>/')
def question(is_login):
    if is_login == '1':
        return u'這是發佈問答頁面'
    else:
        return redirect(url_for('login'))

if __name__ == '__main__':
    app.run(debug=True)

五、參考

《Flask Web開發——基於Python的Web應用開發實踐》 《Python Flask系列(1)——基礎》 https://study.163.com/course/courseMain.htm?courseId=1004091002#/courseDetail?tab=1

相關文章
相關標籤/搜索