flask 高級編程-基礎
阿新 • • 發佈:2018-07-10
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__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)配置文件中的配置都要大寫,相當於常量,常量一般都大寫== ‘__main__‘: app.run(host=‘0.0.0.0‘, debug=app.config[‘DEBUG‘], port=5000)
# -*- 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 高級編程-基礎