python之—flask虛擬環境


一、安裝:

輸入以下命令可以檢查系統是否安裝了virtualenv :

$ virtualenv --version

如果結果顯示錯誤,你就需要安裝這個工具。

1、Ubuntu 用戶可以使用下述命令安裝它:

$ sudo apt-get install python-virtualenv

2、如果你的電腦是 Mac OS X 系統,就可以使用 easy_install 安裝 virtualenv :
$ sudo easy_install virtualenv/

3、 Windows 

 1 pip install virtualenv//安裝虛擬環境
 2 virtualenv flask//安裝flask
 3 
 4 //安裝flask擴展
 5 $ flask\Scripts\pip install flask
 6 $ flask\Scripts\pip install flask-login
 7 $ flask\Scripts\pip install flask-openid
 8 $ flask\Scripts\pip install flask-mail
 9 $ flask\Scripts\pip install flask-sqlalchemy
10 $ flask\Scripts\pip install sqlalchemy-migrate
11 $ flask\Scripts\pip install flask-whooshalchemy
12 $ flask\Scripts\pip install flask-wtf
13 $ flask\Scripts\pip install flask-babel
14 $ flask\Scripts\pip install guess_language
15 $ flask\Scripts\pip install flipflop
16 $ flask\Scripts\pip install coverage

 

 

二、環境

1、建立虛擬環境

touch flasky

cd flasky

virtualenv venv

使用 virtualenv 命令在 flasky 文件夾中創建 Python 虛擬環境。創建虛擬環境后,當前文件夾中會出現一個子文件夾,名字就是上述命令中指定的參數,與虛擬環境相關的文件都保存在這個子文件夾中。按照慣例,一般虛擬環境會被命名為 venv 

你使用 bash 命令行(Linux 和 Mac OS X 用戶),可以通過下面的命令激活這個虛擬環境:
$ source venv/bin/activate
如果使用微軟 Windows 系統,激活命令是:
$ venv\Scripts\activate

2、安裝flask

查看是否安裝成功,導入沒有報錯就成功

三、程序的基本結構

3.1初始化

創建一個flask實例

3.2路由和視圖函數

客戶端(例如 Web 瀏覽器)把請求發送給 Web 服務器,Web 服務器再把請求發送給 Flask程序實例。程序實例需要知道對每個 URL 請求運行哪些代碼,所以保存了一個 URL 到

Python 函數的映射關系。處理 URL 和函數之間關系的程序稱為路由。

 

像 index() 這樣的函數稱為視圖函數(view function)。視圖函數返回的響應可以是包含
HTML 的簡單字符串,也可以是復雜的表單。

       動態的URL:

 

          視圖函數的作用是生成請求的響應

 

3.3 啟動服務器

       一個完整的代碼程序

from flask import Flask
app = Flask(__name__)
@app.route('/')
    def index():
        return '<h1>Hello World!</h1>'
if __name__ == '__main__':
    app.run(debug=True

3.4 請求響應循環

1、程序和請求上下文

 


MVC模型

MVC是模型(model)、視圖(view)、控制(controller)這三個單詞上的首字母組成。M是指業務模型,V是指用戶界面,C則是控制器。比如一批統計數據可以分別用柱狀圖餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。

 

  • Model(模型)是應用程序中用於處理應用程序數據邏輯的部分。——業務
     通常模型對象負責在數據庫中存取數據
  • View(視圖)是應用程序中處理數據顯示的部分。——響應視圖
    通常視圖是依據模型數據創建的。
  • Controller(控制器)是應用程序中處理用戶交互的部分。
    通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。

它強制性的使應用程序的輸入、處理和輸出分開。

 

MVC的處理過程是這樣的:對於每一個用戶輸入的請求,首先被控制器接收,控制器決定用哪個模型來進行處理,然后模型通過業務邏輯層處理用戶的請求並返回數據,最后控制器確定用哪個視圖模型,用相應的視圖格式化模型返回數據,並通過顯示頁面呈現給用戶。

  • 視圖

            視圖是用戶看到並與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演着重要              的角色,但一些新的技術已層出不窮,它們包括Macromedia Flash和象XHTML,XML/XSL,WML等一些標識語言和Web services. 

              如何處理應用程序的界面變得越來越有挑戰性。MVC一個大的好處是它能為你的應用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發生,不管這些                 數據是聯機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數據並允許用戶操縱的方式。 

 

  • 模型 
  •        模型表示企業數據和業務規則。在MVC的三個部件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusion Components這樣的構件對象來處理數據          庫。被模型返回的數據是中立的,就是說模型與數據格式無關,這樣一個模型能為多個視圖提供數據。由於應用於模型的代碼只需寫一次就可以被多個視圖重          用,所以減少了代碼的重復性。 
  • 控制器 
  •            控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身不輸出任何東西和做任何                 處理。它只是接收請求並決定調用哪個模型構件去處理請求,然后用確定用哪個視圖來顯示模型處理返回的數據。 

 

 

                      現在我們總結MVC的處理過程,首先控制器接收用戶的請求,並決定應該調用哪個模型來進行處理,然后模型用業務邏輯來處理用戶的請求並返回數據,                         最后控制器用相應的視圖格式化模型返回的數據,並通過表示層呈現給用戶。

 


 

 

四、模板

視圖函數的作用很明確,即生成請求的響應,但一般而言,請求會改變程序的狀態,而這種變化也會在視圖函數中產生。

例如,用戶在網站中注冊了一個新賬戶。用戶在表單中輸入電子郵件地址和密碼,然后點擊提交按鈕。服務器接收到包含用戶輸入數據的請求,然后 Flask 把請求分發到處理注冊請求的視圖函數。這個視圖函數需要訪問數據庫,添加新用戶,然后生成響應回送瀏覽器。這兩個過程分別稱為業務邏輯表現邏輯。

4.1 渲染模板

 1 from flask import Flask,render_template  2 app = Flask(__name__)  3 
 4 @app.route('/')  5 def index():  6     return render_template('index.html')  7 
 8 @app.route('/user/<name>')  9 def user(name): 10     return render_template('user.html',name=name) 11 if __name__=='__main__': 12     app.run()

Flask 提供的 render_template 函數把 Jinja2 模板引擎集成到了程序中。 render_template 函數的第一個參數是模板的文件名隨后的參數都是鍵值對,表示模板中變量對應的真實
值。在這段代碼中,第二個模板收到一個名為 name 的變量。

左邊的“name”表示參數名,就是模板中使用的占位符;右邊的“name”是當前作用域中的變量,表示同名參數的值。

<h1>hello world!!</h1>

<h1>hello,{{name}}!!</h1>

4.2 變量

Jinja2 能識別所有類型的變量,甚至是一些復雜的類型,例如列表、字典和對象。在模板中使用變量的一些示例如下:
<p>A value from a dictionary: {{ mydict['key'] }}.</p>
<p>A value from a list: {{ mylist[3] }}.</p>
<p>A value from a list, with a variable index: {{ mylist[myintvar] }}.</p>
<p>A value from an object's method: {{ myobj.somemethod() }}.</p>
可以使用過濾器修改變量,過濾器名添加在變量名之后,中間使用豎線分隔。例如,

模板以首字母大寫形式顯示變量 name 的值:
Hello, {{ name|capitalize }}

4.3 靜態文件

靜態文件的引用被當成一個特殊的路由,即 /static/<filename>。例如,調用url_for('static', filename='css/styles.css', _external=True) 得 到 的 結 果 是 http://localhost:5000/static/css/styles.css。

1 {% block head %}
2 {{ super() }}
3 <link rel="shortcut icon" href="{{ url_for('static', filename = 'favicon.ico') }}"
4 type="image/x-icon">
5 <link rel="icon" href="{{ url_for('static', filename = 'favicon.ico') }}"
6 type="image/x-icon">
7 {% endblock %}

訪問地址:http://localhost:5000/static/favicon.ico




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM