本文最后更新于264 天前,其中的信息可能已经过时,如有错误请发送邮件到zhizihua030611@163.com
一、安装Flask框架
用anconda配置Flask框架环境,python用3.9
二、编写一个hello world
from flask import Flask
app = Flask(__name__)
// 创建路由
@app.route('/')
//创建视图函数
def hello_world:
return 'Hello,Flask!'
if __name__ == '__main__':
// 启动服务
app.run(debug=True)
debug模式是当文件修改后只需要刷新网页就可以更新,不用重启项目
host,当想别人访问你的项目,host设置成0.0.0.0
prot,可以改端口
三、读取一个网页再flask.py中
1.法一:用open函数直接读取html文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
page = open('test.html',encoding='utf-8')
return page.read()
if __name__ == '__main__':
app.run(debug=True)
2.法二:用render-template方法
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_templat("test.html")
if __name__ == '__main__':
app.run(debug=True)
3.基于法二做一个可以通过ip地址及端口号路由访问一个网站
from flask import Flask
from flask import render_template
app = Flask(__name__, template_folder='templates')
@app.route('/demo')
def hello_world():
return render_template('test.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
备注:
template_folder是html文件所在目录,host设置默认访问ip地址,port是端口号
四、路由
1、注册路由
a.法一
@app.route('/demo')
def hello_world():
return render_template('test.html')
b.法二
# 定义视图函数
def hello():
return 'Hello World!'
# 注册路由
app.add_url_rule('/', view_func=hello)
2、传参数(路径参数)
a.法一
# 定义视图函数
@app.route('/demo/<num>')
def hello_world(num):
print(num)
return num
b.法二
# 定义视图函数
def hello(num):
print(num)
return 'Hello World!'
# 注册路由
app.add_url_rule('/<int:num>', view_func=hello)
其中“ < > ”中的num即为所要传递的参数(前面加int可以直接把参数转换成整)
注意:在视图函数返回时必须是字典,元组,列表,字符串
3.请求钩子
a.before_request()
@app.before_request
def before_requset():
print('before_requset')
@app.route('/hello1')
def hello1():
return 'Hello1 '
@app.route('/hello2')
def hello2():
return 'Hello2 '
@app.route('/hello3')
def hello3():
return 'Hello3 '
会在访问每一个路由后运行一遍校验请求,可用于登录检验
b.after_request
@app.after_request
def after_request(response):
print('再见')
return response # 需要返回响应对象
| request | 请求,用于加载页面或者数据时需要发送请求获取(get函数) |
| response | |
| session(会话) | 保存数据,多个不同页面通过这个共享数据(页面间的数据通信) |
| application |
五、对象
1.session对象
from flask import Flask, session
app = Flask(__name__)
app.secret_key = '123456'
@app.route("/A")
def hello_world_a():
session['a'] = 'A'
return "Hello World!A"
@app.route("/B")
def hello_world_b():
session['b'] = 'B'
return "Hello World!B"
@app.route("/shopcar")
def shopcar():
good_a = session['a']
gooo_b = session['b']
return "shopcar: " + good_a + gooo_b
使用session前要先设置密钥
session主要用于页面间的数据通信
2.g对象
六、响应
1、直接在页面返回字符串
def hello_world():
return 'Hello World!'
app.add_url_rule('/hello', view_func=hello_world)
2、返回html
def html():
return '<span style="color:red">Hello html!</span>'
app.add_url_rule('/html', view_func=html)
3、返回JSON数据
from flask import jsonify
def json():
data = {'hello': 'world','age': 30}
return jsonify(data)
app.add_url_rule('/json', view_func=json)
为什么要用json文件,因为json文件更加节省空间。
4、返回状态码
def test_statu():
return '正确响应', 200
app.add_url_rule('/statu', view_func=test_statu)
5、重定向
@app.route("/login")
def login():
# 登录判断逻辑
if(True):
return redirect("/hello")
else:
return redirect('/login')
主要用于登录判断
七、连接数据库
用pymysql连接
# 创建数据库连接
conn = pymysql.connect(host='localhost', ip地址
user='root', 用户名
passwd='zys030611', 密码
db='user_form', 数据库名
port=3306, 端口,默认3306
charset='utf8' 编码方式)
# 进行数据库中数据对比
try:
with conn.cursor() as cursor:
# 假设密码在数据库中是以哈希形式存储的
sql = "SELECT user_name, password FROM user WHERE user_name = %s"
cursor.execute(sql, (username,))
result = cursor.fetchone()
print(result)
if result and result[1] == password: # 这里直接比较明文密码
session['user'] = username
return redirect('/')
else:
flash('Invalid username or password')
finally:
conn.close()
一定记得最后要关闭数据库连接!!
八、配置跨域
from flask_cors import CORS
CORS(app, resources=r'/*')


