Flask(一)

Flask有兩大核心:Werkzeug和Jinja2python

Werkzeug實現路由,調試和web服務器網關接口,Werkzeug庫的routing模塊負責URL的解析,不一樣的URL對應不一樣的視圖函數.web

routing模塊內部有:正則表達式

Rule類: 用來構造不一樣的URL模式的對象,路由URL規則json

Map類: 存儲全部的URL規則和一些配置參數flask

BaseConverter的子類,負責匹配的規則服務器

MapAdapter類: 負責協調Rule作具體的匹配工做cookie

Jinja2實現模板.app

 

 

 

from flask import Flask函數

app = Flask(__name__)post

@app.route("/")

def hello():

  return "hello world"

if __name__ == "__main__":

  app.run()

Flask模塊介紹:

from flask import Flask

# __name__:會認爲該文件所在的目錄就是flask項目目錄

# static_url_path:訪問靜態文件的前綴

# static_folder: 靜態文件所在的目錄文件夾名稱

# template_folder:模板文件所在的目錄文件夾名稱

app = Flask(__name__,

      static_url_path="/static",

      static_folder ="static",

      template_folder ="templates")

@app.route("/")

def index():

  return "index"

if __name__ == "__main__":

  app.run()

 

加載項目配置信息

from flask import Flask

# 自定義項目配置類

class Config(object):

  DEBUG = True

app =Flask(__name__)

# 方式一:使用類的方式加載配置信息(重點)

app.config.from_object(Config)

# 方式二:在同級目錄中創建一個配置文件('my.ini')

app.config.from_pyfile('my.ini')

# 方式三:使用環境變量方式加載項目配置信息

# 跟方式二同樣,先寫一哥配置文件,而後將文件的路徑加入到環境變量中

# config的本質是一個字典

@app.route("/")

def hello():

  # 兩種方式獲取字典的值,

  # get方式獲取不到則不會報錯,默認爲空

  print(app.config.get("DEBUG",""))

  # 找不到會報錯

  print(app.config["DEBUG"]")

  return "hello world"

if __name__ == "__main__":

  # 0.0.0.0表示本機全部ip都可訪問, port表明端口號

  app.run(host="0.0.0.0", port = 8888, debug=True)

 轉換器提取url路徑的參數

from flask import Flask

app = Flask(__name__)

@app.route("/")

def demo1():

  return "hello world"

# <user_id>轉換器提取url路徑的參數

# user_id的類型默認是字符串類型

# 127.0.0.1/user/字符串類型的數據

@app("/user/<user_id>")

def demo3(user_id):

  return "user_id:%s" % user_id

# 限制輸入的數據類型

# 127.0.0.1:5000/user_id/int數據類型

@app.route("/user_id/<int:user_id>")

def demo4(user_id):

  return "user_id"% user_id

 

if __name__=="__main__"

  app.run(debug=True)

 

請求方式:GET及POST

from flask import Flask

app = Flask(__name__)

# 不設置默認是get請求方式

@app.route("/")

def hello_world():

  return "hello world"

# 設置post請求方式

@app.route("/post", methods=["POST"])

def demo():

  return "post success"

if __name__ == "__main__":

  print(app.url_map)

  app.run(debug=True)

 

 

自定義轉換器類

 from flask import Flask

from werkzeug.routing import BaseConverter

 

app = Flask(__name__)

# 自定義轉換器

class RegexConverter(BaseConverter):

  # 重寫regex屬性,當你將正則表達式傳入給它,BaseConverter類幫你處理

  # url_map,re只是參數

  def  __init__(self, url_map, re):

    # 初始化父類

    super(RegexConverter, self).__init__(url_map)

    self.regex = re

# 註冊正則匹配類

# 往flask源碼裏面添加一個鍵值對

"""

往flask源碼裏面添加一個鍵值對

{

re:RegexConverter

}

"""

# 將re轉換成RegexConverter類

app.url_map.converters["re"] = RegexConverter

# re("\d{6}")-->RegexConverter(app.url_map, "\d{6}")

@app.route("/user/<re("\d{6}"):user_id>)

def demo1(user_id):

  return "user %s" % user_id

 

if __name__ == "__main__":

  app.run(debug=True)

 

獲取請求參數:

data: 記錄請求的數據

form: post請求中的表單數據

args: get請求中的參數

cookies: 記錄請求中的cookie信息

headers: 記錄請求中的報文頭

method: 記錄請求使用的http請求方法

url: 記錄請求的URL地址

files:記錄請求上傳的文件

 

from flask import Flask, request

# 默認請求時get請求,127.0.0.1:5000/get?user_name=kangkang&age=18

@app.route("/get")

def demo1():

"""提取get請求號後面攜帶的參數"""

#request.method屬性獲取訪問方式,後面的請求方式必須大寫

  if request.method == "GET":

    user_name = request.args.get("user_name", "")

    age = request.args.get("age")

    return "%s %s" %(user_name, age)

  else:

    return "請求方式錯誤405!"

# post請求提取參數

# 須要指明請求方式爲POST

@app.route("/post", methods = ['POST'])

def demo2():

  if request.method == "POST":

    user_name = request.form.get("user_name", "")

    age = request.form.get("age", "")

    return "%s %s"%(user_name, user_id)

  else:

    return "405請求方式錯誤"

# 文件上傳

@app.route("/upload", methods=["POST"])

def demo3():

  if request.method == "POST":

    file = request.files.get("pic", "")

    # 將圖片保存到服務器本地

    file.save("./1.png")

  else:

    return "405請求方式錯誤"

 

if __name__ == "__main__":

  app.run(debug=True)

注意點:

GET:獲取服務器的數據,問號裏面攜帶的參數,告知服務器我要什麼類型的數據

POST:往服務器新增數據,請求體裏面攜帶參數,通常是須要存入的數據

 

 

構造響應數據:

import json

from flask import Flask, jsonify

app = Flask(__name__)

 

@app.route("/")

def demo1():

# json數據轉換

dict = {

  "name":"kangkang",

  "age":24,

  "info":{

    "team":"laker"

    }

  }

# 序列化,將python對象轉化成json字符串

json_str = json.dumps(dict)

# 反序列化:將json字符串轉換成python對象

my_dict = json.loads(json_str)

# jsonify:可以將python對象轉換成json對象

# 可以將響應體數據封裝成響應對象並返回

# 指明瞭響應數據的格式:ContentType = "application/json"

my_json = jsonify(dict)

return my_json

 

if __name__ == "__main__":

   app.run(debug=True)

 

重定向

from flask import Flask, redirect, url_for

# redirect:重定向,輸入指定的路徑會跳轉到指定的地址

# url_for("要重定向的函數名稱","參數值")

app = Flask(__name__)

@app.route("/index/<int:user_id>")

def hello(user_id):

  return "hello %d" user_id

@app.route("/demo2")

def demo2():

  # 重定向到百度

  return redirect("www.baidu.com)

@app.route("/demo3")

def demo3():

# 重定向到指定的函數

# url_for:反向解析函數

# 傳入的函數名稱--->解析對應的url,根據app.app_url就能返回對應的url

  return redirect(url_for('hello', user_id = 6666))

 

if __name__ == "__main__":

  app.run(debug=True)

相關文章
相關標籤/搜索