flask路由
在 Flask 中,路由是一种机制,用于将浏览器请求映射到相应的处理函数。(可以理解为网站的路径)
# 创建一个路由和视图函数的映射
# 根路由
@app.route('/')
使用render_template库渲染html模板
from flask import Flask,render_template
#render_template就是渲染模板的库
app=Flask(__name__)
@app.route('/')
def hello_word():
return render_template('index.html')
if __name__=='__main__':
app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>知了传课首页</title>
</head>
<body>
<h1>demo flask</h1>
</body>
</html>
结果显示
访问成员变量
from flask import Flask,render_template
#render_template就是渲染模板的库
app=Flask(__name__)
@app.route('/')
def hello_word():
return render_template('index.html')
@app.route('/blog/<blog_id>')
def blog_detail(blog_id):
return render_template("blog_detail.html",blog_id=blog_id,username="知了")
if __name__=='__main__':
app.run(debug=True)
html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客详情</title>
</head>
<body>
<p>您的用户名是{{username}}</p>
<h1>您访问的博客详情是:{{ blog_id}}</h1>
</body>
</html>
结果展示
过滤器的使用
@app.route('/filter')
def filter_demo():
user=User(username="知了",email="zhiliao@qq.com")
return render_template("filter.html",user=user)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>过滤器使用</title>
</head>
<body>
{{user.username}}->{{user.username|length}}
</body>
</html>
程序控制语句--if控制语句
def control_statement():
age=17
return render_template("control.html",age=age)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if age>18 %}
<div>您已满十八岁,可以进入网吧</div>
{% elif age==18 %}
<div>您刚满十八岁,需要在父母的陪同下可以进入网吧</div>
{% else %}
<div>您未满十八岁,不可以进入网吧</div>
{% endif %}
</body>
</html>
结果展示
程序控制语句--for控制语句
{% for p in people %}
<div>用户信息:{{p.name}},用户年龄:{{p.age}}</div>
{% endfor %}
@app.route('/control')
def control_statement():
age=17
people=[{
"name":"张三",
"age": 18 },{
"name":"李四",
"age":19
}]
return render_template("control.html",age=age,people=people)
结果展示
此处循环不可以使用break语句
模板继承
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
</head>
<body>
这是父模板的文字
{% block body %}
{% endblock %}
</body>
<hml>
子模板代码
{% extends "base.html" %}
{% block title %}
我是child2
{% endblock %}
{% block body %}
我是child2
{% endblock %}
结果展示
在实际案例的过程中,我们需要满足部分继承元素的要求如导航栏,底部文字显示等需要继承但是,中间的内容需要自己定义,为此,我们可以采用如下办法
{% extends "base.html" %}
{% block title %}
我是child2
{% endblock %}
{% block body %}
我是child2
{% endblock %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">新闻</a></li>
</ul>
{% block body %}
{% endblock %}
<footer>这是底部标签</footer>
</body>
</html
结果展示
静态文件的加载
静态文件就是一些图片文件,css文件等等
flask的静态文件一般放在static的文件夹的目录下
static.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img src="{{ url_for('static',filename='imgs/demo1.jpg') }}" alt="">
</body>
</html>
@app.route('/static')
def static_demo():
return render_template("static.html")
结果展示
加载css文件
源码展示
bdoy{
background-color:pink;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{{url_for('static', filename='css/style.css')}}">
</head>
<body>
<img src="{{ url_for('static',filename='imgs/demo1.jpg') }}" alt="">
</body>
</html>
@app.route('/static')
def static_demo():
return render_template("static.html")
结果展示,网页背景改为粉色
加载js代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{{url_for('static', filename='css/style.css')}}">
<script src="{{url_for('static', filename='js/my.js')}}"></script>
</head>
<body>
<img src="{{ url_for('static',filename='imgs/demo1.jpg') }}" alt="">
</body>
</html>
flask框接数据库基础操作
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
import requests
app = Flask(__name__)
HOSTNAME="127.0.0.1"
PORT=3306
USERNAME="root"
PASSWORD="lyzdsr203820"
DATABASE="databse_learn"
app.config['SQLALCHEMY_DATABASE_URI']=f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}"
db=SQLAlchemy(app)
with app.app_context():
with db.engine.connect() as conn:
rs=conn.execute(text("select 1"))
print(rs.fetchone())
@app.route('/')
def hello_world():
return "hellword"
if __name__ == '__main__':
app.run()
这段代码是一个使用 Flask 和 SQLAlchemy 的简单示例,它包括了设置数据库连接和定义一个简单的路由。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
import requests
这些代码部分导入了 Flask、SQLAlchemy、SQLAlchemy 中的 text
函数以及 requests
模块。
app = Flask(__name__)
这行代码创建了一个 Flask 应用对象。
HOSTNAME = "127.0.0.1"
PORT = 3306
USERNAME = "root"
PASSWORD = "lyzdsr203820"
DATABASE = "database_learn"
这些代码定义了数据库的连接信息。
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}"
这行代码配置了 Flask 应用的数据库连接地址,使用了 MySQL 数据库连接字符串,并将之前定义的连接信息填入。
Codedb = SQLAlchemy(app)
这行代码创建了一个 SQLAlchemy 对象,用于访问数据库。
with app.app_context():
with db.engine.connect() as conn:
rs = conn.execute(text("select 1"))
print(rs.fetchone())
这部分代码在应用上下文中,利用 SQLAlchemy 创建的数据库引擎对象建立数据库连接,并执行了一个简单的查询语句,输出查询结果中的第一行。
@app.route('/')
def hello_world():
return "hello world"
这部分代码定义了一个简单的路由。当访问根路径 /
时,会执行 hello_world
函数并返回字符串 "hello world"。
if __name__ == '__main__':
app.run()
这行代码判断当前文件是否作为主程序运行,如果是,则调用 app.run()
启动 Flask 应用。
这段代码的作用是创建一个 Flask 应用,配置数据库连接信息,并在应用上下文中执行一个简单的查询语句。然后定义了一个根路径路由,最后启动了 Flask 应用。
结果返回
证明我们使用flask连接数据库成功
使用flask创建一个表格
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
import requests
app = Flask(__name__)
HOSTNAME="127.0.0.1"
PORT=3306
USERNAME="root"
PASSWORD="lyzdsr203820"
DATABASE="databse_learn"
app.config['SQLALCHEMY_DATABASE_URI']=f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}"
db=SQLAlchemy(app)
# with app.app_context():
# with db.engine.connect() as conn:
# rs=conn.execute(text("select 1"))
# print(rs.fetchone())
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)
user= User(username='zhangsan',password='123456')
with app.app_context():
db.create_all()
@app.route('/')
def hello_world():
return "hellword"
if __name__ == '__main__':
app.run(debug=True)
结果展示
执行代码后创建user表
数据添加
def add_user():
user=User(username="zhangsan",password="666")
db.session.add(user)
db.session.commit()
return "用户创建成功"
结果显示
页面回显
数据库展示
数据添加成功
数据查找
def query_user():
#get查找
user=User.query.get(1)
print(f"{user.id}:{user.username}-{user.password}")#缺点:只能返回一条数据
#filter_by查找
users=user.query.filter_by(username="zhangsan")
for user in users:
print(user.username)
return "数据查找成功"
结果展示
数据更新
# 数据更新
@app.route("/user/update")
def update_user():
user=User.query.filter_by(username="zhangsan").first()
user.password="88888888"
db.session.commit()
return "数据修改成功"
结果展示
修改前
修改后
数据删除
@app.route('/user/delete')
def delete_user():
#查找
user=User.query.get(1)
#将数据从db.session中删除
db.session.delete(user)
#同步数据库
db.session.commit()
return "数据删除成功"
结果展示