2023版-零基础玩转Python Flask框架-学完可就业

第五章 MYSQL数据库

5.1.2Python操作mysql的驱动
有以下四种:
- MYSQL_python,C语言操作Mysql数据库的简单封装,只支持Python2
- mysqlclient,执行效率高但安装容易出错
- pymysql,用python写的
- mysql-connector-python:mysql官方推出的纯python连接mysql的驱动,但效率比pymysql还慢
pymysql安装命令:
pip install pymysql
5.1.3 Flask-SQLAlchemy

简介
在Flask中,我们很少会使用pymysql直接写原生SQL语句操作数据库,更多的用SQLAlchemy提供的ORM 技术,类似于操作普通Python对象一样实现数据库的增删改查。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__)
//创建对象,在App.config中设置好连接数据库的信息
//然后使用SQLAlchemy(app)创建db对象
//SQLAlchemy会自动读取app.config中的连接信息。
db = SQLAlchemy(app)
HOST =
app.config[''] = f'mysql+pymysql://{}:{}:@{}/'
创建数据库
先用navicat


第四章 Jinja2
pip list查看安装包
- 模板渲染 render_template的用法
- 传递html
创建templates文件夹
创建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文件中创建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过滤器和测试器

如果需要对某个变量进行处理,可以通过函数来实现,在模板中,则是通过过滤器来实现的。过滤器的本质也是函数。但是在模板中使用的方式是通过管道符号 | 来调用的。
例如,获取name的长度,{{name|length}}
4.2.1自定义过滤器(在html中使用的)

py文件中
//定义过滤器,第一个参数是需要被处理的值,第二个参数是时间的格式,并制定了默认值。
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绑定的视图函数中:
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 内置过滤器
参考:Jinja过滤器官方文档
4.3控制语句

4.3.1 if语句
1、创建if_statement的视图函数
@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循环语句

py中
books=[{"name":"A","author":"B"},
{"name":"C","author":"D"},
]
html中
{% for book in books%}
<div>图书名称:{{book.name}},作者{{book.author}}</div>
{% endfor %}
for循环中没有break语句。



4.4.2 模板继承

<%extends "base.html">
{% block title%}
我是子模板的标题
{% endblock %}
block语法的实现
{% block title%}
{% endblock %}
4.4.3加载静态文件
省略了...
第三章 URL与视图
url的组成:协议://域名/路径:端口号
一般格式:
http/https://域名(www.google.com)/profile(:端口号)。
http协议用的80端口,
https协议用的443端口所以可写可不写。
一个路由对应一个函数
- 定义有参的url:将参数固定到了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:获取第二页的数据。
import request
@app.route('root/list')
def book_list():
request.args.get("page",defualt = 1,type=int);
return f"{page}"
#arguments:参数
request.args.类字典类型
request.args.get(self ,key,default,type)
第二章 项目配置
1、debug模式:
debug mode :off
开启debug模式后,可以直接看到修改后ctrl+s后的结果,不需要重启项目。
开发的时候出现bug,如果开启debug模式,在浏览器上就可以看到出错信息。
打开debug模式:
a、
Edit configurations:
勾选Flask_DEBUG
b、社区版在app.run(debug = True);
或者app.debug = true;
一个是落实到代码上,一个是修改pycharm IDE的配置,后者如果脱离了pycharm,那么运行就不能开启debug了。
2、修改host:
局域网中,让别人的电脑访问我的电脑上的flask项目,修改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包中导入flask类
创建app.
app == Flask(__name__);
- __name__:代表当前app.py模块
- 作用以后出现bug,他可以帮助我们快速定位。
- 对于寻找模板文件,有一个相对路径。
@app.route();#创建一个路由和视图函数的映射
执行下面紧密相联的函数
主函数: __name__ == '__main__'