Flask開發筆記
安裝Flask
pip install Flask
獲取參數
常用的兩種獲取參數的方式,get和post
get多用於請求頁面,做查詢,刷新
post多於提交內容,做更新
post請求不會在url裏顯示參數名稱和值
get請求會在url裏顯示參數名稱和值
POST
前端代碼:
<formclass="form-inline"method="post"action="/project">
<divclass="form-group">
<label>關鍵詞</label>
<inputtype="text"class="form-control"placeholder="輸入關鍵詞"name="keyword"maxlength="64">
</div>
<buttontype="submit"class="btn btn-default">搜索</button>
需要注意的是:
1,請求方式是post
2,請求url是相對的路徑
3,input標籤name的值
後端代碼:
ifrequest.method=='POST':
keyword=request.form.get('keyword')
print(keyword)
需要注意的是:
1,判斷請求方式是不是post
2,取值的方式是
request.form.get('keyword')
通過前端input標籤的name的值來獲取
GET
第一種方式
前端代碼:
<liclass="list-group-item"><ahref="/result?id={{project['id']}}"target="_blank">{{ project['name'] }}</a></li>
構造出來的請求如:/result?id=666
需要注意的是:
1,構造的url爲相對路徑
後端代碼:
ifrequest.method=='GET':
pid=request.args.get('id')
print(pid)
需要注意的是:
1,判斷請求方式是不是get
2,取值通過
pid=request.args.get('id')
第二種方式
前端代碼:
<liclass="list-group-item"><ahref="/result1/{{project['id']}}"target="_blank">{{ project['name'] }}</a></li>
構造出的請求如:/result/666
後端代碼:
@app.route('/result1/<pid>',methods=['GET'])
defresult1(pid):
ifrequest.method=='GET':
# pid = request.args.get('id')
print(pid)
需要注意的是:
1,判斷請求方式是不是get
2,獲取參數,通過函數參數的方式
3,<>裏寫的參數名要與函數的參數名相同,才能取到值
生成數據模型
參考鏈接:https://blog.csdn.net/qq_42553568/article/details/90402059
1,安裝三方庫
pip install flask-sqlacodegen
2,編寫命令
flask-sqlacodegen mysql://root:123456@localhost/spd--outfilemodels.py--flask
flask-sqlacodegen mysql://root:[email protected]/db_name--tablesproject--outfilemodels.py--flask
3,運行命令
URL構建
url_for()用於構建特定函數的url
傳值
deffocus_delete():
ifrequest.method=='GET':
ukid=request.args.get('id')
wxid=request.args.get('wxid')
mysql=Mysql()
mysql.delete_userkey(ukid)
returnredirect(url_for('focus',wxid=wxid,title="訂閱"))
靜態資源
url_for()用於加載靜態資源,css,js,img等
<scriptsrc="{{url_for('static',filename='/js/bootstrap.js')}}">
<linkrel="stylesheet"href="{{url_for('static',filename='/css/bootstrap.min.css')}}">
<imgsrc="{{url_for('static',filename='/img/head.png')}}"alt="頭像">
直接在url_for中傳入static,和文件路徑
頁面HTML轉義
{{project[4]|safe}}
project[4]的內容爲html代碼字符串,如果直接輸出,頁面直接會顯示html代碼,不是預期的效果,加上safe。就是說這個內容是安全的,可以直接轉義爲html。
整合Bootstrap4
首先是下載相應版本的文件
這個網址
https://v4.bootcss.com/docs/getting-started/download/
直接下載
然後下載jquery和popper,這兩個是bootstrap4的依賴庫,都需要提前引用。
js這樣引入
<scriptsrc="{{url_for('static',filename='/js/popper.js')}}"></script>
<scriptsrc="{{url_for('static',filename='/js/jquery.js')}}"></script>
<scriptsrc="{{url_for('static',filename='/js/bootstrap.js')}}"></script>
css這樣引入
<linkrel="stylesheet"href="{{url_for('static',filename='/css/bootstrap.min.css')}}">
如果在其他路徑,也可以改url_for的參數,道理是一樣的。
有一個坑是,popper.js需要下載umd版本的,不然會報錯,引入不成功,下面是地址
<script src="https://cdn.bootcdn.net/ajax/libs/popper.js/2.5.0/umd/popper.js"></script>
可以直接引用,也可以下載到本地,然後相對路徑引用,道理相同。
列表遍歷
flask頁面使用的是jinja2,所以需要熟悉jinja2的語法。
常用語法
繼承模版
{% extends 'base.html' %}
聲明塊
{% block main %}
{% endblock main %}
這個塊可以被繼承的子頁面複用
使用的時候直接
{% extends 'base.html' %}
{% block main %}
<div class="container">
<div class="row">
<h1>1234567890</h1>
</div>
</div>
{% endblock main %}
引用值
後端傳值到前端
returnrender_template('myself.html',user=user,title=title)
前端使用
{{title}}
雙引號加變量名
遍歷列表
前提是你傳到頁面的內容是一個列表
{% for uk in uks %}
<li class="list-group-item">
{{uk[0]}}
</li>
{% endfor %}
對列表項進行判斷
{% if uk[0]|length>1 %}
這裏對uk[0]做了長度大於1的判斷,在使用列表項的值做判斷計算的時候,不需要使用{{}}