導航:首頁 > 編程語言 > python中使用flask

python中使用flask

發布時間:2022-06-18 20:03:16

python怎麼導入flask

pip install flask 先安裝,然後 python (python2)
>>> import flask

pip3 install flask (python3)
>>> import flask

⑵ python中flask框架 怎麼選擇文件

Flask是一個使用Python編寫的輕量級Web應用框架,憑借更靈活、輕便、安全且容易上手的特性,成為企業常用的Python框架之一。在完成Web前端、Linux以及MySQL相關的課程之後,專業的杭州Python學習班都會講解Flask框架知識,以下是整理的相關知識點。

Flask是一個基於Python開發並且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,對於Werkzeug本質是Socket服務端,其用於接收http請求並對請求進行預處理,然後觸發Flask框架。開發人員基於Flask框架提供的功能對請求進行相應的處理,並返回給用戶,如果要返回給用戶復雜的內容時,需要藉助jinja2模板來實現對模板的處理,即:將模板和數據進行渲染,將渲染後的字元串返回給用戶瀏覽器。

默認情況下,Flask不包含資料庫抽象層、表單驗證,或是其它任何已有多種庫可以勝任的功能。然而,Flask支持用擴展來給應用添加這些功能,如同是Flask本身實現的一樣。眾多的擴展提供了資料庫集成、表單驗證、上傳處理、各種各樣的開放認證技術等功能。

Flask框架的特點:
1)Flask自由、靈活,可擴展性強,第三方庫的選擇面廣,開發時可以結合自己最喜歡用的輪子,也能結合最流行最強大的Python庫;
2)入門簡單,即便沒有多少web開發經驗,也能很快做出網站;
3)非常適用於小型網站;
4)非常適用於開發Web服務的API;
5)開發大型網站無壓力,但代碼架構需要自己設計,開發成本取決於開發者的能力和經驗。

Flask框架運行解釋
1.app = Flask(__name__)
創建Flask對象app,Flask類的構造函數只有一個必須指定的參數,即程序主模塊或包的名字。在大多數程序中,Python的__name__變數就是所需要的值。

[email protected]('/')
web瀏覽器把請求發送給Web伺服器,Web伺服器再把請求發送給Flask程序實例。程序實例需要知道對每個URL請求運行哪些代碼,所以保存了一個URL到Python函數的映射關系。處理URL和函數之間的關系的程序稱為路由。在Flask程序中定義路由的最簡便方式,是使用程序實例提供的app.route修飾器,把修飾的函數注冊為路由。route()裝飾器告訴 Flask什麼樣的URL 能觸發我們的函數。這和Java中的注釋有異曲同工之妙。修飾器是Python語言的標准特性,可以使用不同的方式修改函數的行為。慣常用法是使用修飾器把函數注冊為事件的處理程序。

3.def index():函數
index()函數放在@app.route('/')後面,所以就是把index()函數注冊為路由。如果部署程序的伺服器域名為http://127.0.0.1:5000/,在瀏覽器中訪問http://127.0.0.1:5000/後,會觸發伺服器執行index()函數。

[email protected]('/user/')
同@app.route('/'),如果部署程序的伺服器域名為http://127.0.0.1:5000/,在瀏覽器中訪問http://127.0.0.1:5000/後,會觸發伺服器執行下方修飾函數。

5.app.run(debug=True)
程序實例用run方法啟動Flask繼承Web伺服器。

6.if __name__ == '__main__'
當Python解釋器,讀py文件,它會執行它發現的所有代碼。在執行代碼之前,它會定義一些變數。例如,如果這個py文件就是主程序,它會設置__name__變數為"__main__"。如果這個py被引入到別的模塊,__name__會被設置為該模塊的名字。

⑶ 【Python基礎】flask是什麼意思

Flask 是一個微框架(Micro framework),其官方文檔的前言部分對Flask做了很清楚的定性介紹:
「微」(Micro)是什麼意思?
「微」(micro) 並不意味著你要把整個web應用放到一個python文件里(雖然確實可以),也不意味著Flask 在功能上有所欠缺。微框架中的「微」意味著 Flask 旨在保持核心功能的簡單而易於擴展。Flask 不會替你做出太多決策,比如使用何種資料庫。而那些 Flask 幫你做好的決策(比如使用哪種模板引擎),都是很容易替換。除此之外的一切都由可由你掌握。
默認情況下,Flask 不包含資料庫抽象層、表單驗證,或是任何已在其它已庫中處理的很好的功能。相反,Flask 支持通過擴展來給應用添加這些功能,如同是 Flask 本身實現的一樣。眾多的擴展提供了資料庫集成、表單驗證、上傳處理及各種各樣的開放認證技術等功能。Flask 也許是「微小」的,但它已准備好在復雜的生產環境中投入使用。
Flask盡量避免重復製造輪子,而是與已有的優秀輪子去結合,這使得Flask靈活、強大,且定製性更強。 Flask 配置選項眾多,均設置了合理的默認值,並會遵循一些慣例;配置選項均可以修改,但通常沒必要修改,尤其是剛開始的時候。這使得Flask易於上手。

⑷ python中flask如何降低內存

Dict
在小型程序中,特別是在腳本中,使用Python自帶的dict來表示結構信息非常簡單方便:

>>> ob = {'x':1, 'y':2, 'z':3}

>>> x = ob['x']

>>> ob['y'] = y

由於在Python 3.6中dict的實現採用了一組有序鍵,因此其結構更為緊湊,更深得人心。但是,讓我們看看dict在內容中佔用的空間大小:

>>> print(sys.getsizeof(ob))

240

如上所示,dict佔用了大量內存,尤其是如果突然虛需要創建大量實例時:

實例數

對象大小

1 000 000

240 Mb

10 000 000

2.40 Gb

100 000 000

24 Gb

類實例

有些人希望將所有東西都封裝到類中,他們更喜歡將結構定義為可以通過屬性名訪問的類:

class Point:

#

def __init__(self, x, y, z):

self.x = x

self.y = y

self.z = z

>>> ob = Point(1,2,3)

>>> x = ob.x

>>> ob.y = y

類實例的結構很有趣:

欄位

大小(比特)

PyGC_Head

24

PyObject_HEAD

16

__weakref__

8

__dict__
8

合計:

56

在上表中,__weakref__是該列表的引用,稱之為到該對象的弱引用(weak reference);欄位__dict__是該類的實例字典的引用,其中包含實例屬性的值(注意在64-bit引用平台中佔用8位元組)。從Python3.3開始,所有類實例的字典的鍵都存儲在共享空間中。這樣就減少了內存中實例的大小:

>>> print(sys.getsizeof(ob), sys.getsizeof(ob.__dict__))

56 112

因此,大量類實例在內存中佔用的空間少於常規字典(dict):

實例數

大小

1 000 000
168 Mb
10 000 000
1.68 Gb
100 000 000

16.8 Gb

不難看出,由於實例的字典很大,所以實例依然佔用了大量內存。

帶有__slots__的類實例

為了大幅降低內存中類實例的大小,我們可以考慮幹掉__dict__和__weakref__。為此,我們可以藉助 __slots__:

class Point:

__slots__ = 'x', 'y', 'z'

def __init__(self, x, y, z):

self.x = x

self.y = y
self.z = z
>>> ob = Point(1,2,3)
>>> print(sys.getsizeof(ob))

64

如此一來,內存中的對象就明顯變小了:

欄位

大小(比特)

PyGC_Head

24

PyObject_HEAD
16
x
8

y

8
z
8
總計:

64

在類的定義中使用了__slots__以後,大量實例占據的內存就明顯減少了:

實例數

大小

1 000 000

64 Mb

10 000 000

640 Mb

100 000 000
6.4 Gb
目前,這是降低類實例佔用內存的主要方式。
這種方式減少內存的原理為:在內存中,對象的標題後面存儲的是對象的引用(即屬性值),訪問這些屬性值可以使用類字典中的特殊描述符:

>>> pprint(Point.__dict__)

mappingproxy(

....................................

'x': ,

'y': ,

'z': })

為了自動化使用__slots__創建類的過程,你可以使用庫namedlist(https://pypi.org/project/namedlist)。namedlist.namedlist函數可以創建帶有__slots__的類:

>>> Point = namedlist('Point', ('x', 'y', 'z'))

還有一個包attrs(https://pypi.org/project/attrs),無論使用或不使用__slots__都可以利用這個包自動創建類。

元組

Python還有一個自帶的元組(tuple)類型,代表不可修改的數據結構。元組是固定的結構或記錄,但它不包含欄位名稱。你可以利用欄位索引訪問元組的欄位。在創建元組實例時,元組的欄位會一次性關聯到值對象:

>>> ob = (1,2,3)

>>> x = ob[0]

>>> ob[1] = y # ERROR

元組實例非常緊湊:

>>> print(sys.getsizeof(ob))

72

由於內存中的元組還包含欄位數,因此需要佔據內存的8個位元組,多於帶有__slots__的類:

欄位

大小(位元組)

PyGC_Head

24

PyObject_HEAD

16

ob_size

8

[0]

8

[1]

8

[2]
8
總計:
72
命名元組

由於元組的使用非常廣泛,所以終有一天你需要通過名稱訪問元組。為了滿足這種需求,你可以使用模塊collections.namedtuple。

namedtuple函數可以自動生成這種類:

>>> Point = namedtuple('Point', ('x', 'y', 'z'))

如上代碼創建了元組的子類,其中還定義了通過名稱訪問欄位的描述符。對於上述示例,訪問方式如下:
class Point(tuple):
#

@property

def _get_x(self):

return self[0]
@property
def _get_y(self):

return self[1]

@property

def _get_z(self):
return self[2]
#
def __new__(cls, x, y, z):
return tuple.__new__(cls, (x, y, z))
這種類所有的實例所佔用的內存與元組完全相同。但大量的實例佔用的內存也會稍稍多一些:

實例數

大小
1 000 000
72 Mb

10 000 000

720 Mb

100 000 000

7.2 Gb

記錄類:不帶循環GC的可變更命名元組

由於元組及其相應的命名元組類能夠生成不可修改的對象,因此類似於ob.x的對象值不能再被賦予其他值,所以有時還需要可修改的命名元組。由於Python沒有相當於元組且支持賦值的內置類型,因此人們想了許多辦法。在這里我們討論一下記錄類(recordclass,https://pypi.org/project/recordclass),它在StackoverFlow上廣受好評(https://stackoverflow.com/questions/29290359/existence-of-mutable-named-tuple-in)。

此外,它還可以將對象佔用的內存量減少到與元組對象差不多的水平。

recordclass包引入了類型recordclass.mutabletuple,它幾乎等價於元組,但它支持賦值。它會創建幾乎與namedtuple完全一致的子類,但支持給屬性賦新值(而不需要創建新的實例)。recordclass函數與namedtuple函數類似,可以自動創建這些類:

>>>Point = recordclass('Point', ('x', 'y', 'z'))

>>>ob = Point(1, 2, 3)

類實例的結構也類似於tuple,但沒有PyGC_Head:

欄位

大小(位元組)

PyObject_HEAD

16

ob_size

8

x

8

y

8

z
8
總計:
48
在默認情況下,recordclass函數會創建一個類,該類不參與垃圾回收機制。一般來說,namedtuple和recordclass都可以生成表示記錄或簡單數據結構(即非遞歸結構)的類。在Python中正確使用這二者不會造成循環引用。因此,recordclass生成的類實例默認情況下不包含PyGC_Head片段(這個片段是支持循環垃圾回收機制的必需欄位,或者更准確地說,在創建類的PyTypeObject結構中,flags欄位默認情況下不會設置Py_TPFLAGS_HAVE_GC標志)。

大量實例佔用的內存量要小於帶有__slots__的類實例:

實例數

大小

1 000 000

48 Mb10 000 000

480 Mb

100 000 000
4.8 Gb
dataobject
recordclass庫提出的另一個解決方案的基本想法為:內存結構採用與帶__slots__的類實例同樣的結構,但不參與循環垃圾回收機制。這種類可以通過recordclass.make_dataclass函數生成:
>>> Point = make_dataclass('Point', ('x', 'y', 'z'))

這種方式創建的類默認會生成可修改的實例。

另一種方法是從recordclass.dataobject繼承:

class Point(dataobject):

x:int

y:int

z:int

這種方法創建的類實例不會參與循環垃圾回收機制。內存中實例的結構與帶有__slots__的類相同,但沒有PyGC_Head:

欄位

大小(位元組)

PyObject_HEAD

16

ob_size

8

x

8

y

8

z

8

總計:

48

>>> ob = Point(1,2,3)

>>> print(sys.getsizeof(ob))

40

如果想訪問欄位,則需要使用特殊的描述符來表示從對象開頭算起的偏移量,其位置位於類字典內:

mappingproxy({'__new__': ,

.......................................

'x': ,

'y': ,

'z': })

大量實例佔用的內存量在CPython實現中是最小的:

實例數

大小

1 000 000

40 Mb

10 000 000

400 Mb

100 000 000

4.0 Gb

Cython

還有一個基於Cython(https://cython.org/)的方案。該方案的優點是欄位可以使用C語言的原子類型。訪問欄位的描述符可以通過純Python創建。例如:

cdef class Python:

cdef public int x, y, z

def __init__(self, x, y, z):

self.x = x

self.y = y

self.z = z

本例中實例佔用的內存更小:

>>> ob = Point(1,2,3)

>>> print(sys.getsizeof(ob))

32

內存結構如下:

欄位

大小(位元組)

⑸ python3.x怎麼安裝flask

Windows下Flask安裝

1.運行好虛擬環境
2.在虛擬環境下運行pip install flask就可以在想你環境中安裝Flask及其依賴了,可以在輸入python命令轉到python編輯環境,再輸入import flask查看是否安裝成功。
3.在Scripts同級目錄新建一個文件夾,然後裡面新建一個hello.py文件,代碼內容為:
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello_world():
return "Hello World"
if __name__ == '__main__':
app.run() 12345671234567

然後切換到該文件的目錄下,運行python hello.py命令就可以了。然後又用網站訪問127.0.0.1:5000
4.Ubuntu下Flask安裝:
1.安裝virtualenv,為每一個pyhton應用都「安裝」一個獨立的Python環境;
sudo apt-get install python-virtualenv 或 sudo easy_install virtualenv
2.為你的應用創建一個目錄:
mkdir myproject
cd myproject1212

3.為應用創建一個單獨的開發環境:
virtualenv env //創建一個名為env的目錄,這個目錄就是一個獨立的python環境
. env/bin/activate //激活名為env的環境,注意」.」點後面有關空格;
4.在激活的前提下,安裝flask
apt-get install python-flask11

然後寫一個最小的基於flask的應用:
cd env
vi hello.py1212
from flask import Flask
app = Flask(__name__)

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

if __name__ == '__main__':
app.run() 123456789123456789

然後執行:sudo python hello.py
出現提示:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
在瀏覽器訪問http://127.0.0.1:5000/,可以看到Hello World!

⑹ python中flask包使用的問題,詳細描述請看下面

我還是第一次見你這種寫法呢

首先可以肯定的是:你對面向對象不熟,其次多看一下官方文檔

錯誤出現的原因:你的 index(self) 添加了 self 參數,說明是類對象函數。那麼你就需要先實例化一個對象

cs=CloudStore()
cs.webapp.run()

如果你不想這么干呢

classCloudStore(object):
@webapp.route('/')
@classmethod
defindex():
pass

這樣 添加classmethod 這樣就不用實例化對象了

⑺ python flask 怎麼組織程序

1.初始化

所有的flask程序都必須創建一個程序實例

web伺服器使用wsgi介面協議,把接收客戶端的請求都轉發給這個程序實例來進行處理。這個程序實例就是flask對象

from flask import Flask
app = Flask(__name__)
#__name__決定程序的根目錄,以便以後能找到相對於程序根目錄的資源文件位置


2.路由和視圖函數

程序實例需要知道接收請求後,需要知道url請求應該運行哪些代碼。所以保存了一個url和python函數的映射關系;這個映射關系就叫做路由

flask程序中路由的寫法:

2.1#使用app.route裝飾器,把修飾的函數注冊為路由。例如

@app.route('/')def index(): return "<h1>Hello World</h1>"

#函數的名字不是必須寫index的,只是和裝飾器關聯的時候寫的函數名而已

#把index函數注冊為程序根路徑的處理程序。函數的返回值稱為響應,是客戶端接收的內容。

像index這樣的函數稱為試圖函數,試圖函數返回的響應可以是包含html的簡單字元串,也可以是復雜的東西

2.2#可變url部分映射,使用特定的裝飾器語法就可以

@app.route('/user/<name>')def user(name): return "<h1>hello %s</h1>"%(name)

裝飾器中的<name>指定可變內容為name,name對user(name)函數中的傳遞參數,這2個部分內容必須一致

調用試圖函數時候,flask會自動的將動態部分作為參數傳入參數,這個函數中,參數用於生成個人的歡迎信息

#備註:路由中的動態部分默認使用字元串類型,可以使用int,float,path來定義;例如<int:id>;path類型也是字元串,但不把斜線視作分隔符,而將其當做動態片段的一部分

3.啟動伺服器

調用程序實例app的run方法啟動flask集成開發的web伺服器

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

debug=True代表的是調試模式,這個flask自帶的run方法開啟的伺服器不適合在生產中使用,此處只用來測試

4.一個完整的Flask程序

啥也不說,先上例子hello.py

⑻ 【Python基礎】flask框架是用來干什麼的

你可以用來開發網站伺服器,它包含一個wsgi工具包(werkzeug)、 模板引擎(jinja2)還有主體(flask)。

安裝方式:

  1. 打開命令行
  2. 輸入命令
  3. 命令是"pip install flask"

⑼ 如何部署簡單python + flask應用

我們先寫一個最基本的flask應用:

demo.py

from flask import Flask
app = Flask(**name**)
@app.route('\')
def index():
return 'Hello World.'
if __name__ == __main__:
app.run()
運行這個py文件,打開瀏覽器訪問127.0.0.1:5000就能看到顯示Hello World的頁面 .
如果讓這個flask引用監聽來自公網ip的請求,理論上你跑此程序的機器就相當於一個伺服器了,然而這個伺服器並不完美,所以我們需要nginx和gunicorn來增加它的功能,讓它真刀真槍上生產環境的時候能按要求運行。

flask自帶的WSGI框架性能很差勁,只能適用於開發環境調試使用。我們用專業一點的gunicorn(還有很多其他優秀的框架)替代flask自帶的WSGI框架。

配置完後,通過命令』/usr/local/bin/gunicorn -b127.0.0.1:5000『啟動應用。打開瀏覽器訪問127.0.0.1:5000,同樣能夠得到返回頁面

然而gunicorn也僅僅是一個python的WSGI框架而已,要讓它真正處理來自互聯網的各類訪問功能還是有點欠缺,這時候就需要用到大名鼎鼎的nginx 伺服器來替gunicorn遮風擋雨了。

Ubuntu下安裝nginx可以用命令

sudo apt-get install nginx

安裝後需要進行下配置:

cd /etc/nginx/sites-available

sudo vi test (test為配置名稱,可以根據自己項目進行命名)

test文件的配置為:
server {
listen 80; # 監聽80埠
location / {

proxy_pass http://127.0.0.1:5000; # 代理本機127.0.0.1:5000的服務

}
location /static {

alias /home/ubuntu/myproject/myblog/app/static; # 負載均衡

}
}

cd ..

cd sites-enable

sudo ln -s ../sites-available/lwhile . (創建軟鏈接,別漏掉最後的.)

sudo service nginx reload

sudo service nginx restart

這樣nginx的基本配置文件就寫好了 接下來我們配置進程管理工具supervisor supervisor可以在後面啟動你的python進程,這樣很方便
1.cd /etc/supervisor/conf.d

2.sudo vi test.conf (test為文件名)

[program:test]
command = /usr/local/bin/gunicorn -b127.0.0.1:5000 /home/ubuntu/myproject/test.py

3.sudo supervisorctl

4.reload

5.start test

如果一切正常,做完這所有步驟之後,現在公網的ip訪問你的主機,就可以打開你的flask應用了

⑽ 如何解決python中使用flask時遇到的markupsafe

於是嘗試在該目錄下新建一個_compat.py文件,將以下內容復制到該文件中:
# -*- coding: utf-8 -*-
"""
markupsafe._compat
~~~~~~~~~~~~~~~~~~
Compatibility mole for different Python versions.
:right: (c) 2013 by Armin Ronacher.
:license: BSD, see LICENSE for more details.
"""
import sys
PY2 = sys.version_info[0] == 2
if not PY2:
text_type = str
string_types = (str,)
unichr = chr
int_types = (int,)
iteritems = lambda x: iter(x.items())
else:
text_type = unicode
string_types = (str, unicode)
unichr = unichr
int_types = (int, long)
iteritems = lambda x: x.iteritems()

閱讀全文

與python中使用flask相關的資料

熱點內容
javalistclear 瀏覽:605
哪個app上民宿多靠譜 瀏覽:825
重慶伺服器租用哪裡有雲伺服器 瀏覽:453
土星模擬器文件夾 瀏覽:902
文件夾文件袋文件盒 瀏覽:695
雲伺服器打開f8指令 瀏覽:243
盈透證券加密幣 瀏覽:72
阿里雲伺服器初始密碼怎麼修改 瀏覽:266
伺服器怎麼設定公用網路 瀏覽:99
程序員自己嘗尿檢測出糖尿病 瀏覽:593
列印添加pdf 瀏覽:932
蘋果解壓專家賬號 瀏覽:844
度曉曉app為什麼關閑 瀏覽:228
net文件是偽編解碼嗎 瀏覽:149
伴隨矩陣的matlab編程 瀏覽:63
單片機和h橋是什麼意思 瀏覽:314
51單片機光控設計論文 瀏覽:653
渦旋式壓縮機無油 瀏覽:731
企業網搭建及應用pdf 瀏覽:744
symanteclinux 瀏覽:879