Flask中路由系統以及藍圖的使用

一、Flask的路由系統

  1.@app.route()裝飾器中的參數

  methods:當前URL地址,允許訪問的請求方式

@app.route("/info", methods=["GET", "POST"])
def student_info():stu_id = int(request.args["id"])return f"Hello Old boy {stu_id}"  #格式化輸出

  

  endpoint:反向RUL地址,默認位視圖函數名(url_for)

from flask import url_for@app.route("/info", methods=["GET", "POST"], endpoint="r_info")
def student_info():print(url_for("r_info"))  # /infostu_id = int(request.args["id"])return f"Hello Old boy {stu_id}"  # 格式化輸出

  

  defaults:視圖函數的參數默認值

from flask import url_for@app.route("/info", methods=["GET", "POST"], endpoint="r_info", defaults={"nid": 100})
def student_info(nid):print(url_for("r_info"))  # /info# stu_id = int(request.args["id"])print(nid)  # 100return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{變量名}格式化輸出"

  

  strict_slashes:url地址結尾符"/" 的控制False:無論結尾“/”是否存在均可以訪問,True:結尾必須不是“/”

# 訪問地址 : /info 
@app.route("/info", strict_slashes=True)
def student_info():return "Hello Old boy info"# 訪問地址 : /infos  or  /infos/
@app.route("/infos", strict_slashes=False)
def student_infos():return "Hello Old boy infos"

?

  redirect_to:url地址重定向

# 訪問地址 : /info 瀏覽器跳轉至 /infos
@app.route("/info", strict_slashes=True, redirect_to="/infos")
def student_info():return "Hello Old boy info"@app.route("/infos", strict_slashes=False)
def student_infos():return "Hello Old boy infos"

  

  subdomain:子域名前綴subdomian=“wurenxiansheng”這樣寫可以得到wurenxiansheng.bokeyuan.com前提是app.config["SERVER_NAME"]="bokeyuan.com"

app.config["SERVER_NAME"] = "bokeyuan.com"@app.route("/info",subdomain="wurenxiansheng")
def student_info():return "Hello wurenxiansheng info"# 訪問地址為: wurenxiansheng.bokeyuan.com/info

?

  2.動態參數路由:

from flask import url_for# 訪問地址 : http://127.0.0.1:5000/info/1
@app.route("/info/<int:nid>", methods=["GET", "POST"], endpoint="r_info")
def student_info(nid):print(url_for("r_info",nid=2))  # /info/2return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{變量名}"

  <int:nid>就是在url后定義一個參數接收

  這種動態參數路由,在url_for的時候,一定要將動態參數名+參數值添加進去,否則會拋出參數錯誤的異常

  

  3.Flask初始化配置

app = Flask(__name__)
app.template_folder = "templates"    #指定模板存放路徑
app.static_folder = "文件夾名字"    #指定靜態文件的存放路徑
app.static_url_path = "/static"    # 指定靜態文件訪問路徑
static_host = None    #靜態文件的存放服務器

?

  4.Flask對象配置

  查看默認配置及配置項

app.config == app.default_config

  我們可以把關于Flask的一些配置,單拎出來創建一個獨立的類或者文件用來存放用的時候直接導入,但是要記住用app.config.from_object(Obj)引入配置文件

class FlaskSetting(object):DEBUG = True    #打開Flask的debug模式

app.config.from_object(FlaskSetting)

?

二、Flask中的藍圖

  1.初始Flask藍圖(blueprint)

  把Blueprint理解為不能被run的Flask對象

  創建一個項目然后將目錄結構做成如下(這是一個簡單的對于數據的增刪改查):

  

  static:存放靜態文件

  templates:存放html文件

  views:存放視圖文件也就是咱們的藍圖(blueprint)

  mysetting.py:關于Flask的一些配置

?

  我們只看一個查看的功能走一下流程

  views中的select.py文件中的內容:

from flask import Blueprint,render_templatestudent = [{"name":"小霞","age":"18","gender":""},{"name":"小紅","age":"17","gender":""},{"name":"小明","age":"20","gender":""},{"name":"小亮","age":"19","gender":""},{"name":"小蘭","age":"21","gender":""},
]list_student = Blueprint("list_student",__name__)
@list_student.route("/user_list",methods=["GET","POST"])
def user_list():return render_template("userlist.html",student_list=student)

?

  userlist.html文件中的內容:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3個meta標簽*必須*放在最前面,任何其他內容都*必須*跟隨其后! --><title></title><!-- Bootstrap -->
</head>
<body>
<a href="">添加學生信息</a>
<table border="1px"><thead><tr><th>名字</th><th>性別</th><th>年齡</th><th>操作</th></tr></thead><tbody>{% for student in student_list %}<tr><td>{{ student.name }}</td><td>{{ student.gender }}</td><td>{{ student.age }}</td><td><a href="">刪除</a><a href="">編輯</a></td></tr>{% endfor %}</tbody>
</table>
</body>
</html>

?

  manager.py文件中的內容:

from app01 import create_app
app = create_app()
if __name__ == '__main__':app.run(debug=True)

?

  app01中的__init__.py中的內容:

from flask import Flask
from app01.views import selectdef create_app():app = Flask(__name__)app.register_blueprint(select.list_student)return app

?

  藍圖內部的視圖函數及route不要出現重復

轉載于:https://www.cnblogs.com/guchenxu/p/10698931.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248140.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248140.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248140.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

js高級第五天

課程回顧&#xff1a; ? 原型鏈&#xff1a;由原型構成鏈狀結構&#xff0c;提供成員查找機制 ? 繼承&#xff1a;組合繼承&#xff1a;構造函數和原型對象 ? 屬性&#xff1a;調用父構造函數的時候用call改變this指向 ? 方法&#xff1a;父實例對象賦值給子原型對象&a…

d3.js 制作簡單的貪吃蛇

d3.js是一個不錯的可視化框架&#xff0c;同時對于操作dom也是十分方便的。今天我們使用d3.js配合es6的類來制作一個童年小游戲–貪吃蛇。話不多說先上圖片。 1. js snaker類 class Snaker {constructor() {this._size 30;this._len 3;this._width 900;this._height 690;th…

js高級第六天

Q課程回顧&#xff1a; ? 閉包&#xff1a;有權訪問另外一個函數的局部變量的函數&#xff0c;作用&#xff1a;延伸變量使用范圍 ? mdn&#xff0c;w3c function fn1 () {var n 3;return function () {console.log(n);} }? 遞歸&#xff1a;函數調用其本身 function f…

Chrome 75 lazy-loading

Chrome 75 & lazy-loading https://addyosmani.com/blog/lazy-loading/ https://chromestatus.com/feature/5645767347798016 Chrome 75 將默認啟用延遲加載功能 自 Chrome 75 起&#xff0c;將原生支持圖片的延遲加載&#xff0c;在代碼中編寫 <img loading"lazy&…

d3.js 實現煙花鮮果

今天在d3.js官網上看到了一個煙花的DEMO&#xff0c;是canvas制作的&#xff0c;于是我想用d3.js來實現它&#xff0c;js代碼只有幾行。好了廢話不多說&#xff0c;先上圖。 1 js 類 因為煙花要有下落的效果&#xff0c;所以里面用到了一些簡單的數學和物理知識來模擬重力&…

阿里Sentinel控制臺源碼修改-對接Apollo規則持久化

改造背景 前面我們講解了如何對接Apollo來持久化限流的規則&#xff0c;對接后可以直接通過Apollo的后臺進行規則的修改&#xff0c;推送到各個客戶端實時生效。 但還有一個問題就是Sentinel控制臺沒有對接Apollo&#xff0c;Sentinel控制臺本來就可以修改限流的規則&#xff0…

第八節:EF Core連接MySql和Sqlite數據庫

。。。 轉載于:https://www.cnblogs.com/yaopengfei/p/11507557.html

Flask--WebSocket

flask websocket websocket原理 Socket&#xff1a; FTP - 文件服務 Django Flask Http - TCP: 1.一次請求 一次響應 斷開 2.客戶端永遠處于主動狀態 3.服務器永遠處于被動狀態 4.Http無狀態 - 在服務器不保存客戶端的信息 5.服務器無法主動找到客戶端 1.輪詢 客戶端向服務器…

jQuery第一天

課程回顧&#xff1a; ? 正則&#xff1a;匹配字符組合模式; ? 創建&#xff1a;var reg1 new RegExp(/abc/); var reg2 /abc/; ? 測試&#xff1a;reg1.test(‘abc’); ? 特殊字符&#xff1a;元字符 ? 邊界符&#xff1a;^&#xff0c;$ ? 字符類&#xff1a;[…

Python學習(一)

一、版本&#xff1a; Python2.X /Python3.x 官方宣布2020 年 1 月 1 日&#xff0c; 停止 Python 2 的更新。 Python3.x不兼容Python2.x  二、安裝&#xff08;以mac 為例&#xff09; MAC 系統一般都自帶有 Python2.x版本 的環境&#xff0c;你也可以在鏈接 https://www.py…

jQuery—淘寶精品服飾案例

<body><div class"wrapper"><ul id"left"><li><a href"#">女靴</a></li><li><a href"#">雪地靴</a></li><li><a href"#">冬裙</a>&l…

Python機器學習實踐:決策樹判別汽車金融違約用戶

文章發布于公號【數智物語】 &#xff08;ID&#xff1a;decision_engine&#xff09;&#xff0c;關注公號不錯過每一篇干貨。 轉自 | 法納斯特&#xff08;公眾號ID:walker398&#xff09; 作者 | 小F 決策樹呈樹形結構&#xff0c;是一種基本的回歸和分類方法。 決策樹模型的…

Python學習(二)語言基礎

一、變量與類型 在程序設計中&#xff0c;變量是一種存儲數據的載體 整型&#xff1a;Python中可以處理任意大小的整數浮點型&#xff1a;浮點數也就是小數字符串型&#xff1a;字符串是以單引號或雙引號括起來的任意文本布爾型&#xff1a;布爾值只有True、False兩種值&#x…

jQuery—tab欄切換

<div class"tab"><div class"tab_list"><ul><li class"current">商品介紹</li><li>規格與包裝</li><li>售后保障</li><li>商品評價&#xff08;50000&#xff09;</li><l…

MongoDB分組查詢,聚合查詢,以及復雜查詢

準備數據 from pymongo import MongoClient import datetimeclientMongoClient(mongodb://localhost:27017) tableclient[db1][emp]l[ (張飛,male,18,20170301,,7300.33,401,1), #以下是教學部 (張云,male,78,20150302,teacher,1000000.31,401,1), (劉備,male,81,20130305,teac…

Python學習(三)基礎

一、函數與模塊 定義函數&#xff1a; 函數代碼塊以 def 關鍵詞開頭&#xff0c;后接函數標識符名稱和圓括號 ()。任何傳入參數和自變量必須放在圓括號中間&#xff0c;圓括號之間可以用于定義參數。函數的第一行語句可以選擇性地使用文檔字符串—用于存放函數說明。函數內容以…

操作系統原理之I/O設備管理(第六章上半部分)

一、I/O系統的組成 I/O系統不僅包括各種I/O設備&#xff0c;還包括與設備相連的設備控制器&#xff0c;有些系統還配備了專?? 于輸?/輸出控制的專?計算機&#xff0c;即通道。此外&#xff0c;I/O系統要通過總線與CPU、內存相連。 I/O系統的結構&#xff1a; I/O設備的分類…

js控制a標簽點擊事件 觸發下載

問題背景&#xff0c;動態獲取data把url賦值到a標簽的url中&#xff0c;讓a標簽自動下載 首先想到的應該是$(xxx).click(), 查資料明白&#xff1a;js中的$(...).click()事件只能觸發綁定的onClick方法&#xff0c;不能跳轉到href。 第二種方法&#xff1a;獲取到url之后locat…

操作系統原理之I/O設備管理(第六章下半部分)

五、I/O軟件原理 輸入輸出軟件的總體目標是將軟件組織成一種層次結構 低層軟件用來屏蔽硬件的具體細節高層軟件則主要是為用戶提供一個簡潔、規范的界面設備管理的4個層次&#xff1a; 用戶層軟件 -》向系統發出I/O請求&#xff0c;顯示I/O操作的結果&#xff0c;提供?戶與設備…

jQuery第二天

課程回顧&#xff1a; ? jQuery&#xff1a;JavaScript庫 ? 入口函數&#xff1a;$(function () {}); ? jQuery&#xff1a;jQuery對象&#xff0c;DOM對象 ? jQuery轉成DOM&#xff1a;$(‘元素’)[索引值] ? DOM轉成jQuery&#xff1a;$(DOM對象); ? 篩選方法&am…