Flask入门教程(视频教程笔记)

本文介绍了如何初始化一个Flask项目,包括安装Flask、编写HelloWorld程序、设置debug模式、修改host和port。接着,讲解了路由配置、参数传递和模板渲染的基础知识。此外,还涉及了Flask如何连接MySQL数据库,包括ORM模型、增删改查操作以及外键的使用。
摘要由CSDN通过智能技术生成

初始化flask项目

😎Hello朋友你好!我是一名西安电子科技大学在校学生,🍉目前主要在做web方向,前端居多,别的方向也有尝试。
如果对博客内容有疑问,或者有想法,🎉欢迎私信或评论,看到一定会回复、尽力为大家解决问题!
如果你对web感兴趣,也欢迎👏一起交流讨论,比如学习路线、项目经验、技术点等等。
同时我会不定期写一些学习心得🦀、技术教程、项目教学等博客,希望能丰富大家的👉技术视野。
技术不易,我们,继续努力👏!

前面的python环境之类的就不说了。
该博客是看 Flask 入门 这个视频教程写的笔记,如果你想入门一下Flask,可以看看这个课,虽然简短,但是入门部分讲的很好,同时可以利用这篇博客复习复习。如果你想了解一下Flask、回顾基础知识点,也可以看一看本篇博客。

一、安装flask

只需要使用pip下载即可:

pip install flask

自动下载最新版

二、Hello World

编辑器使用的是pycharm

1. 首先创建一个项目:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2L0jvw6S-1674033772289)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230115133810807.png)]

关于环境,非常建议选择“先前配置的解释器”,如果选择上面的Virtualenv,会新创建一个局部的虚拟环境,那么全局安装的模块在这里是用不了的,必须要重新下载,而有些模块是很多项目都可以共用的,不必要这样。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eE1tckPf-1674033736776)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230115134120298.png)]

将目录修改成这样,这是一个标准的flask初始化目录。

如果没有文件夹,新建;初始化入口叫main.py,可以修改成app.py

2. 最简单的flask代码

app.py中写:

# 导入flask
from flask import Flask

# 使用flask类创建一个app对象
# __name__: 代表当前app.py这个模块
# 1. 以后出现bug可以通过这个快速定位
# 2. 对于寻找模块文件,可提供一个相对路径
app = Flask(__name__)

# 创建一个路由和视图函数的映射
@app.route('/')
def hello_world():
    return "hello world"

# 如果当前模块作为入口
if __name__ == '__main__':
    # 跑flask
    app.run()

三、一些项目设置

1. debug模式
  • 开始debug模式的话,修改代码之后,会自动检测代码的更改并且重新加载,不需要手动停止程序并重启
  • 开发的时候出现bug,会在浏览器上输出错误信息
2. 修改host

项目默认运行在127.0.0.1:5000,如果想要局域网中的人可以访问该项目,可以修改host为0.0.0.0,之后局域网中的设备就可以通过你的电脑在局域网中的ip进行访问,可以通过设置修改。

3. 修改port端口号

项目默认是监听5000端口号,如果端口被占用之类的需要修改,可以通过设置修改。

路由

对接口地址的请求是通过路由来实现不同服务的:

http://localhost:5000/home => 首页
http://localhost:5000/user => 用户中心
http://localhost:5000/block/data => 博客数据中心

这里说的是基础,高级的路由功能后面再说。

一、配置路由

根据不同的路由配置对应的响应函数:

@app.route('/home')
def home():
	return "This is home"

二、传参

可以这样传参

/blog/123456

那么在代码中这样管理123456这样的参数:

@app.route("/blog/<blog_id>")
def getID(blog_id):
	return "访问的博客ID是" + blog_id
还可以规定参数类型
@app.route('/blog/<int:blog_id>')

这样就是规定参数必须是整型

还可以这样传参

/blog?id=123456

那么代码中需要这样拿到参数:

from flask import Flask, request
...
@app.route('/blog')
def getid():
	# request.args: 类字典类型,存放`?`之后的参数
	# "id" 就是参数的名字
	return "获取到博客id为" + request.args.get("id", defalut=1, type=int)

模板渲染

可以在服务器上配置好需要渲染的html页面,当访问到对应路径时进行服务端渲染。

一、基础

首先需要建立这样的目录:

app.py是项目入口,同级建立一个目录templates,名字固定,不可更改。

在引入Flask的时候同时引入render_template这个函数。

app.py:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello():
    return render_template("test.html")


if __name__ == '__main__':
    app.run(debug=True)

test.heml:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板渲染</title>
</head>
<body>
    <h1>Hello Flask</h1>
</body>
</html>

当请求到达的时候,根据路径,发现根路径/返回一个模板渲染函数render_template,这个函数将自动通过传入的文件名,在templates这个目录中寻找对应的文件作为模板进行返回渲染。

二、传参

在渲染html页面的时候还可以进行传参:

@app.route('/')
def renderTemplate():
    return render_template("test.html", username="我是测试用例")

这样在test.html中就可以通过双括号直接拿到了:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板渲染</title>
</head>
<body>
    <h1>username: {{ username }}</h1>
</body>
</html>

Flask 连接 MySQL 数据库

可以使用一些封装库去连接,接下来将使用:

  • pymysql:纯python写的驱动
  • Flask-SQLAlchemy:一般不直接写元素SQL语句去执行操作,而是通过SQLAlchemy提供的ORM技术,和操作普通python对象一样实现数据库的增删改查。而Flask-SQLAlchemy是对SQLAlchemy的封装。

一、ORM模型

一个ORM模型中:

  • 模型与数据库的表对应
  • 模型属性对应表的字段
  • 模型的实例对象对应表中的每条记录

二、连接数据库

  • 表单类需要继承一个db.Model

  • db.Column该方法用于将类属性映射成为表单字段

  • db.create_all()提交所有表单类到数据库

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 数据库配置
HOSTNAME = '127.0.0.1'
PORT = 3306
USERNAME = 'root'
PASSWORD = ''
DATABASE = 'clflask'

# 将配置信息综合
app.config[
    'SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"

# 在app.config中设置数据库信息
# 使用SQLAlchemy创建一个db对象
# SQLAlchemy会自动读取配置中的数据库信息
db = SQLAlchemy(app)

# 测试连接的代码
# with app.app_context():
#     with db.engine.connect() as conn:
#         rs = conn.execute("select 1")
#         print(rs.fetchone)


# 创建一个User表单,通过定义属性来映射字段
class User(db.Model):
    # 表单名
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)


with app.app_context():
    db.create_all()

@app.route('/')
def demo4():
    return "hello world"


if __name__ == '__main__':
    app.run(debug=True)

三、增删改查

  • 所有操作都不是直接对数据库操作,而是通过session,先对缓存进行操作,之后在db.session.commit()到数据库
  • 增:db.session.add()
  • 删:先查询出要删除的数据,再调用db.session.delete(),进行删除
  • 改:先查询出要修改的数据,在该对象上进行修改即可
  • 查:有两种方式进行查找 1. db.query.get(), 2. db.query.filter_by()
@app.route('/user/add')
def add_user():
    # 创建数据实例
    user = User(username='arui', password='123456')
    # 添加数据到数据库连接会话
    db.session.add(user)
    # 提交操作
    db.session.commit()
    return '用户创建成功'


@app.route('/user/info')
def get_user():
    # 1. 根据主键查找,一次只能查找一个
    # user = User.query.get(1)
    # 2. 使用filter查找,传入查询条件,返回一个类数组
    users = User.query.filter_by(username='arui')
    for user in users:
        print(user.username)
    return "查找成功"


@app.route('/user/update')
def update_user():
    # 先查询出需要修改的数据
    user = User.query.filter_by(username='arui').first()
    user.password = 111111
    db.session.commit()
    return "修改完成"


@app.route('/user/delete')
def delete_user():
    # 先查询出需要删除的数据
    user = User.query.filter_by(id=2).first()
    # 在会话中删除
    db.session.delete(user)
    # 提交动态
    db.session.commit()
    return "删除成功"

四、外键

关系型数据库中,可以在一个数据表里,通过外键链接另一个数据库,而不用把所有东西维护在一个表中。

所以接下来创建一个文章表,使用外键将作者信息和用户信息绑定。

多表联动有点儿难,可以看看第17节课。

class Article(db.Model):
    __tablename__ = "Article"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(200), nullable=False)
    content = db.Column(db.text, nullable=False)
    # 添加作者外键
    auther_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    # 将作者链接到用户表
    auther = db.relationship('User')
    # 通过上面两步操作,这样也可以拿到作者信息:article.auther
    # 其过程为:因为auther字段已经和外表进行链接,那么这个属性会自动通过外键,在外表中进行查找


article = Article(title="学一学flask", content="学一学flask学一学flask")

五、将类映射到数据库

之前是使用db.create_all()这个方法去将创建好的数据表类映射到数据库,但是这个方法有局限性,即他只能将新增的类同步到数据库,但是对字段的修改无法同步。

所以可以使用flask-migrate这个库来实现更好的映射。

下载:

pip install flask-migrate

ORM模型映射成表的步骤:

  1. 代码:

    from flask_migrate import Migrate
    
    ...
    
    migrate = Migrate(app, db)
    
  2. flask db init:只许执行一次,命令行下当前项目目录中执行

  3. flask db migrate:识别ORM模型的改变,生成迁移脚本

  4. flask db upgrade:运行迁移脚本,同步到数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧州刺史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值