Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序
以下操作均在 windows 環(huán)境下進(jìn)行,我使用的 Python 版本是 3.7.1
一、搭建虛擬環(huán)境
1.1 使用 pipenv 搭建虛擬環(huán)境
當(dāng)然也可以使用
virtualenv
,但是這個(gè)虛擬環(huán)境經(jīng)常安裝不上,這里給大家介紹另一種虛擬環(huán)境的安裝方式,我使用的 cmd 命令進(jìn)行下列的操作
安裝pipenv: pip install pipenv
創(chuàng)建項(xiàng)目運(yùn)行的目錄: mkdir app
進(jìn)入該目錄: cd app
安裝環(huán)境依賴:pipenv install
進(jìn)入虛擬環(huán)境:pipenv shell
6. 查看當(dāng)前的 python 包:pip list
1.2 為虛擬環(huán)境安裝其他的包
我們要使用 flask,所以使用如下命令即可:pipenv install flask
,如果有其他需要,比如安裝 requests, pumysql 等等命令都是和上面一樣的
1.3 pipenv 命令一覽表
命令 | 功能 |
---|---|
pipenv install | 初始化虛擬環(huán)境 |
pipennv | 進(jìn)入虛擬環(huán)境 |
pipenv install xxx (uninstall xxx) | 為虛擬環(huán)境安裝(刪除)包 |
exit | 退出虛擬環(huán)境 |
pipenv graph | 查看包之間的依賴關(guān)系 |
二、在開發(fā)工具中設(shè)置虛擬環(huán)境
我使用的開發(fā)工具是 Pycharm 社區(qū)版的
2.1 查找 虛擬環(huán)境的路徑
這里我們要輸入這個(gè)命令查看 pipenv 的路徑:pipenv --venv , 我的是安裝在了 如下的位置
2.2 在開發(fā)工具中配置虛擬環(huán)境
然后打開 pycharm 的設(shè)置中,找到 setting
然后找到 Python 解釋器,添加虛擬環(huán)境,找到我們剛才查到的路徑,添加即可
三、第一個(gè) flask 程序
3.1 運(yùn)行第一個(gè) flask 應(yīng)用程序
我們只需要三句話就可以實(shí)現(xiàn)一個(gè)最簡單的 flask 應(yīng)用程序
#!/usr/bin/python # -*- coding: utf-8 -*- #file: app.py #@author: Gorit #@contact: gorit@qq.com #@time: 2020/2/26 9:08 from flask import Flask app = Flask(__name__) # 實(shí)例化 flask , __name__ 會(huì)作為 app 核心的一個(gè)標(biāo)識(shí),這個(gè)可以為任意的字符串 @app.route('/hello') # 使用路由,給 hello 函數(shù)定義一個(gè)路由,然后游覽器通過http 請(qǐng)求得到相對(duì)應(yīng)的數(shù)據(jù) def hello(): # hello 是視圖函數(shù),也是 mvc 中的 controller return "Hello World" app.run()
然后我們?cè)谔摂M環(huán)境中,輸入 python app.py
,就可以在 http://127.0.0.1:5000 中啟動(dòng)我們的 flask 應(yīng)用程序,但是打開之后發(fā)現(xiàn)啥也沒有,這是因?yàn)?,我們?cè)诔绦蛑性O(shè)置了路由,所以我們要把路徑改成 http://127.0.0.1:5000/hello
,然后就可以在網(wǎng)頁找那個(gè)看到 hello world 字符串了
3.2 flask 中路由的重定向機(jī)制
還是復(fù)用上面的一段代碼,我們做一個(gè)小小的變動(dòng)
from flask import Flask app = Flask(__name__) @app.route('/hello/') # 我們?cè)诼酚蛇@里多加入一個(gè)斜杠 def hello(): return "Hello World" app.run()
然后我們正常運(yùn)行
我們把路徑改一下: 127.0.0.1:5000/hello
,然后回車我們發(fā)現(xiàn)頁面跳動(dòng)了一下,就變成了正常的狀態(tài)
我們打開 F12 開發(fā)者工具,找到 network 選項(xiàng),我們發(fā)現(xiàn)這里產(chǎn)生了兩個(gè)網(wǎng)絡(luò)請(qǐng)求
經(jīng)過查閱資料,也就是說,我們輸入 /hello 會(huì)被 Python flask 做永久重定向處理
3.3 另一種路由注冊(cè)的方式
我們使用 app.route("/hello")
,作為訪問的界面,但是我們使用 ctrl + 鼠標(biāo)左鍵點(diǎn)擊 route,可以查看它的源碼,route 是作為裝飾器被使用的
重點(diǎn)在下面的實(shí)現(xiàn)方式,路由的核心實(shí)際上是通過設(shè)置 add_url_rule(..)
路由規(guī)則實(shí)現(xiàn)的
所以我們也可以使用另一種方法,設(shè)置路由,使用起來也比較容易,第一個(gè)參數(shù),設(shè)置路徑,第二參數(shù),指定視圖函數(shù),也就是 hello()
from flask import Flask app = Flask(__name__) # @app.route('/hello/') def hello(): return "Hello World" app.add_url_rule('/hello',view_func=hello) if __name__ == '__main__': app.run()
第二種使用的情況一般在基于類的視圖使用比較多,也就是我們使用 面向?qū)ο蟮姆绞骄帉?flask 應(yīng)用程序
3.4 flask 改變運(yùn)行方式
app.run() 中有三個(gè)參數(shù),我們一起改變
- 開啟 debug 模式 (這樣flask 就會(huì)自動(dòng)重啟服務(wù)器了,不用我們手動(dòng)重啟服務(wù)器)
- 指定啟動(dòng)端口 (默認(rèn)端口是 5000,我們可以手動(dòng)修改端口了)
- 改變主機(jī) (默認(rèn)是 127.0.0.1,如果要掛在服務(wù)器上,可以把 host 改成 0.0.0.0,然后關(guān)閉防火墻,這樣外網(wǎng)就可以看到了)
from flask import Flask app = Flask(__name__) @app.route('/hello') def hello(): return "Hello World" if __name__ == '__main__': app.run(host="localhost", debug=True,port=9999)
然后運(yùn)行 http://localhost:9999/hello
然后就可以看到內(nèi)容了
3.5 我們想看到 html 標(biāo)簽要怎么辦呢?
我們嘗試一下把 hello 視圖函數(shù)中,返回的內(nèi)容改成 html 標(biāo)簽試試看看有效果嗎?
from flask import Flask app = Flask(__name__) @app.route('/hello/') def hello(): return "<html></html>" if __name__ == '__main__': app.run()
實(shí)際上它什么都不會(huì)顯示,這是為什么呢?這是一個(gè)請(qǐng)求頭的問題。
Flask 請(qǐng)求頭的內(nèi)容包括
- status code
- content-type http headers
因?yàn)檎?qǐng)求頭中 content-type 已經(jīng)指定了值,所以 html 標(biāo)簽無法像 字符串那樣顯示,這個(gè)時(shí)候我們就需要改變請(qǐng)求頭的信息,我們可以這么做
from flask import Flask,make_response app = Flask(__name__) @app.route('/hello') def hello(): # 手動(dòng)創(chuàng)建 response headers = { "content-type": "text/html", # plain 當(dāng)成普通的字符串,plain 改后才能 html 就可以正常的顯示 html 標(biāo)簽的內(nèi)容 } return '<html><body><font color="red">你好,世界</font></body></html>', 200, headers if __name__ == '__main__': app.run()
ok 這樣就能正常顯示我們的 html 標(biāo)簽中的內(nèi)容,但是字體不對(duì),這就是編碼格式的問題了
其他類型的
- content-type: “text/plain” 將返回的數(shù)據(jù)當(dāng)成字符串
- “content-type”:“application/json” 使用 api, 指定返回 json 格式的數(shù)據(jù)
3.6 重定向的妙用
我們可以在 headers 中加入 location 參數(shù),可以是用戶加載某指定路徑的時(shí)候,自動(dòng)跳轉(zhuǎn)到其他的頁面
from flask import Flask,make_response app = Flask(__name__) app.config.from_object('config') @app.route('/hello') def hello(): headers = { "content-type": "text/plain", # plain 當(dāng)成普通的字符串 # "content-type":"application/json" 使用 api, 指定返回 json 格式的數(shù)據(jù) "location": "https://www.bing.com" } # 同樣實(shí)現(xiàn) 跳轉(zhuǎn)效果,控制響應(yīng)狀態(tài)碼 return '<html></html>', 301, headers if __name__ == '__main__': app.run()
到此這篇關(guān)于Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序的文章就介紹到這了,更多相關(guān)Flask搭建環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python入門教程(二十二)Python的類和對(duì)象
這篇文章主要介紹了Python入門教程(二十二)Python的類和對(duì)象,Python是一門非常強(qiáng)大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下2023-04-04Python檢查 云備份進(jìn)程是否正常運(yùn)行代碼實(shí)例
這篇文章主要介紹了Python檢查 云備份進(jìn)程是否正常運(yùn)行代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08pytorch 實(shí)現(xiàn)查看網(wǎng)絡(luò)中的參數(shù)
今天小編就為大家分享一篇pytorch 實(shí)現(xiàn)查看網(wǎng)絡(luò)中的參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01python入門字符串拼接\截取\轉(zhuǎn)數(shù)字理解學(xué)習(xí)
本篇內(nèi)容我們主要講有關(guān)Python字符串的用法,包括字符串的拼接、字符串怎么轉(zhuǎn)數(shù)字、字符串的格式化、字符串函數(shù)等內(nèi)容,有需要的朋友可以借鑒參考下2021-09-09Python利用模糊哈希實(shí)現(xiàn)對(duì)比文件相似度
對(duì)比兩個(gè)文件相似度,python中可通過difflib.SequenceMatcher/ssdeep/python_mmdt/tlsh實(shí)現(xiàn),<BR>在大量需要對(duì)比,且文件較大時(shí),需要更高的效率,可以考慮模糊哈希,本文就來和大家詳細(xì)聊聊2023-01-01django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t e
這篇文章主要給大家介紹了關(guān)于執(zhí)行python manage.py migrate時(shí)報(bào)錯(cuò):django.db.utils.ProgrammingError: (1146, "Table 'test.model_student' doesn't exist" )問題的解決方法,文中將解決的方法介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07使用相同的Apache實(shí)例來運(yùn)行Django和Media文件
這篇文章主要介紹了使用相同的Apache實(shí)例來運(yùn)行Django和Media文件,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下2015-07-07