2023版-零基礎(chǔ)玩轉(zhuǎn)Python Flask框架-學(xué)完可就業(yè)

第五章 MYSQL數(shù)據(jù)庫

5.1.2Python操作mysql的驅(qū)動
有以下四種:
- MYSQL_python,C語言操作Mysql數(shù)據(jù)庫的簡單封裝,只支持Python2
- mysqlclient,執(zhí)行效率高但安裝容易出錯
- pymysql,用python寫的
- mysql-connector-python:mysql官方推出的純python連接mysql的驅(qū)動,但效率比pymysql還慢
pymysql安裝命令:
pip install pymysql
5.1.3 Flask-SQLAlchemy

簡介
在Flask中,我們很少會使用pymysql直接寫原生SQL語句操作數(shù)據(jù)庫,更多的用SQLAlchemy提供的ORM 技術(shù),類似于操作普通Python對象一樣實(shí)現(xiàn)數(shù)據(jù)庫的增刪改查。Flask-SQLAlchemy是對SQLAlchemy的簡單封裝。
安裝命令
pip install Flask-sqlalchemy
sqlalchemy官方文檔:sqlalchemy.org/
5.2 Flask-SQLAlchemy基本使用

5.2.1連接MySQL
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
//創(chuàng)建對象,在App.config中設(shè)置好連接數(shù)據(jù)庫的信息
//然后使用SQLAlchemy(app)創(chuàng)建db對象
//SQLAlchemy會自動讀取app.config中的連接信息。
db = SQLAlchemy(app)
HOST =
app.config[''] = f'mysql+pymysql://{}:{}:@{}/'
創(chuàng)建數(shù)據(jù)庫
先用navicat


第四章 Jinja2
pip list查看安裝包
- 模板渲染 render_template的用法
- 傳遞html
創(chuàng)建templates文件夾
創(chuàng)建static文件夾
@app.route('/')
def hello():
return render_template("index.html")
- 傳遞html中的變量
@app.route("/blog/<blog_id>")
def hello(blog_id):
處理語句
return render_template("index.html",blog_id = blog_id,username="zl")
在html中添加:
{{blog_id}}
{{username}}
- 4.1模板訪問對象屬性
- 類對象的訪問方式
在py文件中創(chuàng)建User類對象
user = User(username="aa",email = "@qq.com")
return render_template("index.html",user=user);
html中
{{user.username}}/{{user.email}}

- 字典變量的使用方法
py中定義
person={"username":"zhangsan",
“email”:“zhangsan@qq.com”}
html中訪問的兩種方式:
{{person["username"]}}
{{person.email}}
- 4.2過濾器和測試器

如果需要對某個變量進(jìn)行處理,可以通過函數(shù)來實(shí)現(xiàn),在模板中,則是通過過濾器來實(shí)現(xiàn)的。過濾器的本質(zhì)也是函數(shù)。但是在模板中使用的方式是通過管道符號 | 來調(diào)用的。
例如,獲取name的長度,{{name|length}}
4.2.1自定義過濾器(在html中使用的)

py文件中
//定義過濾器,第一個參數(shù)是需要被處理的值,第二個參數(shù)是時間的格式,并制定了默認(rèn)值。
def datetime_format(value,format="%Y-%M-%d-%m:%H:%M"):
return value.strftime(format)
//在模板中注冊模板過濾器,并且把過濾器命名為dformat.
app.add_template_filter(datetime_format,"dformat")
py,app綁定的視圖函數(shù)中:
import datetime
mytime = datetime.now();
html中:
{{mytime|dformat}}

另一種使用方式:
@app.template_filter("dformat")
def datetime_format(value,format="%Y-%M-%d-%m:%H:%M"):
return value.strftime(format)
4.2.2 內(nèi)置過濾器
參考:Jinja過濾器官方文檔
4.3控制語句

4.3.1 if語句
1、創(chuàng)建if_statement的視圖函數(shù)
@app.route("/if")
def if_statement():
age = 18
return render_template("if.html",age = age)
在html中,判斷
<body>
{% if age>18 %}
<div>您已成年</div>
{% elif age<18 %}
<div>您未成年</div>
{% else %}
<div>剛剛成年</div>
{% endif %}
</body>
邏輯最好寫在后端。
4.3.2 for循環(huán)語句

py中
books=[{"name":"A","author":"B"},
{"name":"C","author":"D"},
]
html中
{% for book in books%}
<div>圖書名稱:{{book.name}},作者{{book.author}}</div>
{% endfor %}
for循環(huán)中沒有break語句。



4.4.2 模板繼承

<%extends "base.html">
{% block title%}
我是子模板的標(biāo)題
{% endblock %}
block語法的實(shí)現(xiàn)
{% block title%}
{% endblock %}
4.4.3加載靜態(tài)文件
省略了...
第三章 URL與視圖
url的組成:協(xié)議://域名/路徑:端口號
一般格式:
http/https://域名(www.google.com)/profile(:端口號)。
http協(xié)議用的80端口,
https協(xié)議用的443端口所以可寫可不寫。
一個路由對應(yīng)一個函數(shù)
- 定義有參的url:將參數(shù)固定到了path中
@app.route(''/blog/<blog_id>)
def blog_detail(blog_id):
return "%s" % blog_id
定義類型
@app.route(''/blog/<int:blog_id>)
def hello(blog_id):
...
- 查詢字符串的方式傳參
/book/list?page=2:獲取第二頁的數(shù)據(jù)。
import request
@app.route('root/list')
def book_list():
request.args.get("page",defualt = 1,type=int);
return f"{page}"
#arguments:參數(shù)
request.args.類字典類型
request.args.get(self ,key,default,type)
第二章 項(xiàng)目配置
1、debug模式:
debug mode :off
開啟debug模式后,可以直接看到修改后ctrl+s后的結(jié)果,不需要重啟項(xiàng)目。
開發(fā)的時候出現(xiàn)bug,如果開啟debug模式,在瀏覽器上就可以看到出錯信息。
打開debug模式:
a、
Edit configurations:
勾選Flask_DEBUG
b、社區(qū)版在app.run(debug = True);
或者app.debug = true;
一個是落實(shí)到代碼上,一個是修改pycharm IDE的配置,后者如果脫離了pycharm,那么運(yùn)行就不能開啟debug了。
2、修改host:
局域網(wǎng)中,讓別人的電腦訪問我的電腦上的flask項(xiàng)目,修改host為0.0.0.0,
修改方法:
Edit configurations:
Additional options: --host=0.0.0.0
3、port:修改端口號(酒店的房間號)
查看端口號:
修改端口號:
Additional options: --host=0.0.0.0 --port=8000
第一章 簡單的入門程序
從Flask包中導(dǎo)入flask類
創(chuàng)建app.
app == Flask(__name__);
- __name__:代表當(dāng)前app.py模塊
- 作用以后出現(xiàn)bug,他可以幫助我們快速定位。
- 對于尋找模板文件,有一個相對路徑。
@app.route();#創(chuàng)建一個路由和視圖函數(shù)的映射
執(zhí)行下面緊密相聯(lián)的函數(shù)
主函數(shù): __name__ == '__main__'
2023版-零基礎(chǔ)玩轉(zhuǎn)Python Flask框架-學(xué)完可就業(yè)的評論 (共 條)
