1. 程式人生 > >flask 高級編程-基礎

flask 高級編程-基礎

release return 就是 mysq lose 報錯 ecc ice def

1、安裝python3的虛擬環境   which python   /usr/local/bin/python3   virtualenv -p /usr/local/bin/python3 env 2、查看版本   python -V   pip -V 3、安裝flask   pip install flask 4、常用virtual命令   virtualenv env 創建虛擬環境   deactivate 退出虛擬環境   pip freeze > requirements.txt 自動生成requirements.txt文件 5、mysql安裝(centos7)   su root  # 切換到root用戶   wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm # 下載mysql安裝包   yum -y install mysql57-community-release-el7-10.noarch.rpm # 安裝mysql源   yum -y install mysql-community-server # 安裝mysql   systemctl start mysqld.service # 啟動   systemctl status mysqld.service # 查看狀態,有active (running)   grep "password" /var/log/mysqld.log # 查找root密碼   mysql -uroot -p # 登錄客戶端,輸入密碼   設置     set global validate_password_policy=0;     set global validate_password_length=1;     ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘123456‘;   exit   yum -y remove mysql57-community-release-el7-10.noarch  # 卸載更新,因為安裝了Yum Repository,以後每次yum操作都會自動更新,需要把這個卸載掉 6、mysql基礎用法   systemctl start mysqld.service # 啟動   systemctl status mysqld.service # 查看狀態,有active (running)   mysql -uroot -p # 登錄 7、fisher.py 技術分享圖片
# -*- coding=utf-8 -*-
 
from flask import Flask
 
app = False(__name__)
 
 
@app.route(/hello)
def hello():
return Hello, World!
 
 
app.run()
View Code      其中,MVC中的controller就是這裏面的hello函數   python fisher.py 8、兼容兩種訪問方式,帶/和不帶/   8.1 瀏覽器中輸入http://127.0.0.1:5000/hello就能訪問     要想輸入http://127.0.0.1:5000/hello/也能訪問,@app.route(‘/hello‘)-->@app.route(‘/hello/‘)   8.2 原理:重定向,將不帶/的url重定向到了帶/的url這裏     (1)瀏覽器訪問url1地址,服務器接收到這次請求     (2)出於某種原因(沒有url所在頁面或者不想讓你訪問url1所對應頁面)     (3)服務器會在返回的header裏面增加一個標誌位,location:url2,同時將返回的狀態碼更改為301或者302     (4)當瀏覽器接收到返回之後,首先會去看狀態碼,如果是301或者302,瀏覽器會再次發送一個請求,請求地址為url2   8.3 為了保證url的一致性,seo引擎優化 9、本地自動重啟,開啟調試模式   app.run(debug=True) 10、另一種路由註冊方法 技術分享圖片
# -*- coding=utf-8 -*-

from flask import Flask, make_response

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


def hello():
    headers = {
        content-type: application/json,
    }
    return <html></html>, 200, headers

app.add_url_rule(/hello, view_func=hello)


if __name__
== __main__: app.run(host=0.0.0.0, debug=app.config[DEBUG], port=5000)
View Code      註釋掉@app.route(‘/hello‘)   方法下面,添加app.add_url_rule(‘/hello‘, view_func=hello),類視圖需要使用這種方式 11、啟動配置   app.run(host=‘0.0.0.0‘, debug=True) # 允許外網訪問   app.run(host=‘0.0.0.0‘, debug=True, port=8888) # 修改端口號 12、正式環境不能開啟調試模式原因   (1)調試模式使用的是flask自帶的服務器,性能差   (2)不能向用戶展示任何網站的詳細信息 13、配置文件   正式環境和測試環境要保持鏡像關系,就是代碼一樣   config.py   DEBUG = True (1)配置文件中的配置都要大寫,相當於常量,常量一般都大寫    技術分享圖片
# -*- coding=utf-8 -*-
 
from flask import Flask
 
app = Flask(__name__)
app.config.from_object(config) # 載入配置文件,為模塊路徑
 
 
@app.route(/hello/)
def hello():
return Hello, World!
 
 
app.run(host=0.0.0.0, debug=app.config[DEBUG], port=8888)
View Code

(2)註:   如果將config.py中的DEBUG改為Debug,讀取app.config[‘Debug‘]報錯,from_object要求必須大寫;   如果config.py中為Debug = True,取的時候app.config[‘Debug‘]為False,因為Debug在flask中默認為False,就算沒有設置,取值也為False 14、if __name__ == ‘__main__‘   14.1 如果入口文件中增加了這個判斷之後,能夠確保if裏面的語句只在入口文件執行;   14.2 如果當前的fisher.py文件不是作為入口文件直接被執行的,而是被其他模塊導入的,下面的語句由於if的存在而不會被執行   14.3 部署到生產環境不會使用flask自帶的服務器,而是nginx+uwsgi     生產環境使用uwsgi啟動程序,fisher.py只是作為一個模塊被傳入,加上if判斷,uwsgi啟動的時候app.run便不會被執行,確保了安全性 15、response    技術分享圖片
# -*- coding=utf-8 -*-

from flask import Flask, make_response

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


@app.route(/hello)
def hello():
    return <html></html>

if __name__ == __main__:
    app.run(host=0.0.0.0, debug=app.config[DEBUG], port=5000)
View Code

不顯示任何東西   15.1 視圖函數     (1)返回狀態碼,status code,200,404,301     (2)返回content-type,放置於http的headers中,有值,告訴接收方如何解析主題內容,默認test/html   15.2 返回的數據,封裝成response對象     (1)headers = {‘content-type‘: ‘text/plain‘}     (2)response = make_response(‘<html></html>‘, 404)     (3)response.headers=headers     (4)return response    技術分享圖片
# -*- coding=utf-8 -*-

from flask import Flask, make_response

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


@app.route(/hello)
def hello():
    headers = {
        content-type: text/plain
    }
    response = make_response(<html></html>, 404)
    response.headers = headers
    return response

if __name__ == __main__:
    app.run(host=0.0.0.0, debug=app.config[DEBUG], port=5000)
View Code

    顯示:<html></html>   15.3 response與重定向    技術分享圖片
# -*- coding=utf-8 -*-

from flask import Flask, make_response

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


@app.route(/hello)
def hello():
    headers = {
        content-type: text/plain,
        location: http://www.baidu.com
    }
    response = make_response(<html></html>, 301)
    response.headers = headers
    return response

if __name__ == __main__:
    app.run(host=0.0.0.0, debug=app.config[DEBUG], port=5000)
View Code

    顯示:百度首頁   15.4 返回json    技術分享圖片
# -*- coding=utf-8 -*-

from flask import Flask, make_response

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


@app.route(/hello)
def hello():
    headers = {
        content-type: application/json,
    }
    response = make_response({"a": 1, "name": "test"}, 200)
    response.headers = headers
    return response

if __name__ == __main__:
    app.run(host=0.0.0.0, debug=app.config[DEBUG], port=5000)
View Code

    顯示:以json方式展示   15.4 最方便的返回方式    技術分享圖片
# -*- coding=utf-8 -*-

from flask import Flask, make_response

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


@app.route(/hello)
def hello():
    headers = {
    content-type: application/json,
    }
    return <html></html>, 200, headers

if __name__ == __main__:
    app.run(host=0.0.0.0, debug=app.config[DEBUG], port=5000)
View Code

    顯示:<html></html>     本質:都是通過response的方式返回

flask 高級編程-基礎