大牛帶你5分鐘創建一個Flask項目!

準備

安裝:pip install flaskFlask

快速入門:http://docs.jinkan.org/docs/flask/quickstart.html#quickstart 


快速構建

在項目根目錄下構建:

  • webapp包目錄,存放flask代碼,包內有__init__.py文件

  • templates目錄,存放模板文件

  • static目錄,存放js,css等靜態文件。其下建立js目錄,放入jquery、echarts的js文件

  • app.py入口文件


  • 基本組成

  • 目錄結構如下:

v2-5dd37007429e9cdaa08c86a98e313dbc_hd.jpg


1.# /webapp/__init__.py文件內容 
2.from flask import Flask,jsonify 
3.#創建應用 
4.app = Flask("myweb") 
5..#路由和視圖函數 
[email protected]("/") 
7.def index(): 
8.return "hello flask" 
9. 
[email protected]("/json",methods=["GET"]) #列表中指定多個方法 
11.def getjson():     
12.d = {"a":1,"b":2,"c":3}    
13.return jsonify(d) #Mime是application/json 
14. 
15.#打印重要屬性 
16.print(*filter(lambda x: not x[0].startswith("__") and x[1],app.__dict__.items()),sep="\n") 
17.print("- "*30) 
18.print(app.url_map) 
19.print(app.template_folder) 
20.print(app.static_folder) 
21.print("- "*30)
  1. 應用:創建出來提供WEB服務的實例,也是wsgi的入口

  2. 視圖函數:執行內部代碼輸出響應的內容

  3. 路由:通過route裝飾器創建path到視圖函數的映射關係

1.#/main.py文件 
2.from webapp import app 
3. 
4.if __name__ == "__main__": 
5.      app.run("127.0.0.1",port=8080,debug=True)
  • 啓動main.py文件


v2-dd17cfb392da4c469d6ae12be0ce66a9_hd.jpg


藍圖


Flask中,基本上都是route裝飾器和視圖函數的映射,如果函數很多,代碼組織結構會非常亂。藍圖Blueprint,就是Flask中模塊化技術。

  • 新建/web/app/books.py藍圖文件

1.#/webapp/books.py文件 
2. 
3.from flask import Blueprint,jsonify,render_template 
4. 
5.bpbooks = Blueprint("booksapp",__name__,url_prefix="/books") 
6.# bpbooks = Blueprint("booksapp",__name__) 
[email protected]("/",methods=["GET","POST"]) 
8.def getall():     
9.       books = [         
10.(1,"java",20),        
11.(2,"python",40),         
12.(3,"linux",50)  
13.      ]     
14.return jsonify(books) 
15.# print("= "*30) 
16.# for x in bpbooks.__dict__.items(): 
17.#     print(x)
  • 修改/webapp/__init__.py文件如下:在app中註冊新建的藍圖文件

1.#/webapp/__init__.py 
2.from flask import Flask,jsonify 
3.from .books import bpbooks 
4. 
5.#創建應用 
6..app = Flask("myweb") 
7.#路由和視圖函數 
[email protected]("/") 
9.def index():    
10.return "hello flask" 
11. 
[email protected]("/json",methods=["GET"]) #列表中指定多個方法 
13.def getjson():    
14.d = {"a":1,"b":2,"c":3}     
15.return jsonify(d) #Mime是application/json 
16.# 註冊藍圖#  
17.app.register_blueprint(bpbooks) 
18.#如果在app中註冊藍圖時,給定了url_prefix,那麼藍圖內自定義的url_prefix將失效 
19.app.register_blueprint(bpbooks,url_prefix="/bookss") 
20.#打印重要屬性 
21.print(*filter(lambda x: not x[0].startswith("__") and x[1],app.__dict__.items()),sep="\n") 
22.print("- "*30) 
23.print(app.url_map) 
24.print(app.template_folder)
25.print(app.static_folder) 
26.print("- "*30)
  • 註冊完成後,啓動/main.py文件

Blueprint構造參數

  • name,藍圖名稱,註冊在app的藍圖字典中用的key

  • import_name,用來計算藍圖模塊所在路徑,一般寫__name__

  • root_path,指定藍圖模塊所在路徑,如果None,使用import_name計算得到

  • template_folder

  • url_prefix,指定本藍圖模塊的路徑前綴,app.register_blueprint註冊藍圖時,也可以對當前藍圖指定url_prefix,將覆蓋藍圖中的定義

特別注意,輸出的root_path路徑,說明藍圖有自己一套路徑。最後app.register_blueprint(bpbooks,url_prefix="/bookss"),url_prefix一定要以/開始,否則報錯,最後路徑以註冊的url_prefix爲準


模板


Flask使用jinja2模板。對於應用app來說其模板是,根目錄下的templates,其下新建index.html/templates/index.html文件內容如下

1.<!DOCTYPE html> 
2.<html> 
3.<head>    
4.<meta charset="UTF-8"> 
5.<title>xdd web</title> 
6.</head> 
7.<body> 
8.<h2>歡迎使用flask框架</h2> 
9.<hr> 
10.{% for x in userlist  %} 
11.{{x}} 
12.{% endfor %} 
13.</body> 
14.</html>

修改/webapp/__init__.py文件中的index視圖函數,使用模板渲染函數

1.from flask import Flask,jsonify,render_template 
2. 
3..#創建應用 
4.app = Flask("myweb") 
5. 
6.#路由和視圖函數 
[email protected]("/index.html") 
8.def index():    
9.return render_template("index.html", userlist=[   
10.    (1, "tom", 20),     
11.    (1, "json", 30),   
12.   ])

jinja2和Django模板語法一致,這裏不闡述在app.jinja_loader屬性中,有下面的語句

1.@locked_cached_property 
2.def jinja_loader(self):   
3.     """The Jinja loader for this package bound object. 
4. 
5.   .. versionadded:: 0.5    
6.         """    
7.if self.template_folder is not None:      
8.      return FileSystemLoader(os.path.join(self.root_path, self.template_folder))

說明:不管是app,還是bluepoint,都是使用自己的root_path和模板路徑拼接成模板路徑。


可以通過app或者bluepoint查看app.jinja_loader.searchpath模板搜索路徑。



07cb6c600d874100af092e74c1a62b78




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章