Flask优势: 1.节省资源 轻量级框架 2.开发简便 速度快
Flask劣势:组件极少 Session - 第三方组件 非常全 Flask-Session - Flask 更新 组件第三方的 稳定性相对较差
Flask常用模块
from flask import Flask,render_template,redirect,jsonify,send_file
Flask模块的使用及功能
jsonify
详解:只有用jsonify返回的数据才是json格式的数据类型
from flask import Flask, jsonify, send_file @app.route("/get_data1") def get_data1(): return jsonify({"name":"Alexander.DSB.Li"})
send_file
详解:服务器上的数据发送给用户,可以是任何类型的数据,如果浏览器不支持的文件用户默认会下载
@app.route("/get_file") def get_file(): return send_file("2.mp3") app.run()
request
详解:获取用户提交的数据
1.args 保存URL中传递的参数数据 to_dict() 字典形式取值
2.form 保存FormData中的数据 to_dict() 字典形式取值
3.method 判断请求方式
4.*path 路由地址
5.*url 访问地址
6.*host 主机地址
7.*host_url 主机访问地址
8.files 保存所有数据中的文件数据
9.**values 保存 URL + FormData 坑!
10.data b""请求体中的原始数据 Content-Type != form-data
11.json # None Content-Type:application/json -> dict()
from flask import Flask,request,render_template app = Flask(__name__) app.config['DEBUG'] = True @app.route('/data',methods=['POST','GET']) #methods 限制用户的请求方式 def url_data(): if request.method == 'GET': return render_template('form.html') else: print(request.form.to_dict()) return '200 ok' if __name__ == '__main__': app.run()
files的详细用法:
#!/usr/bin/env python from flask import Flask,request,render_template app = Flask(__name__) app.config['DEBUG'] = True @app.route('/data',methods=['POST','GET']) #methods 限制用户的请求方式 def url_data(): if request.method == 'GET': return render_template('form.html') else: print(request.form.to_dict()) my_file = request.files.get('file') my_file.save(my_file.filename) #不改变接收的文件名称和格式 #my_file.save('tupian.jpg') #更改接收的文件的名称及格式 return '200 ok' if __name__ == '__main__': app.run()
session
详解:会话
使用方法:
在使用session之前必须有'secret_key' app.secret_key = "~!@#$%^&*()!@#$%^&*(~!@#$%^&*(!@#$%^&*~!@#$%^&*(" session.get(key) #获取key session.pop(key) #删除key del session[key] #删除key session.clear() #删除session中所有的值 设置session的有效期:如果没有设置session的有效期。那么默认就是浏览器关闭后过期。如果设置session.permanent=True,那么就会默认在31天后过期。如果不想在31天后过期,那么可以设置`app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hour=2)`在两个小时后过期。
基于session的装饰器做登录校验:
from flask import Flask, session, render_template, request, redirect app = Flask(__name__) #app.config["DEBUG"] = True app.secret_key = "~!@#$%^&*()!@#$%^&*(~!@#$%^&*(!@#$%^&*~!@#$%^&*(" STUDENT_DICT = { 1: {'name': 'Old', 'age': 38, 'gender': '中'}, 2: {'name': 'Boy', 'age': 73, 'gender': '男'}, 3: {'name': 'EDU', 'age': 84, 'gender': '女'}, } def wrapper(func): def inner(*args,**kwargs): if session.get('username'): ret = func(*args,**kwargs) return ret else: return redirect('/login') return inner @app.route('/index') @wrapper def index(): #主页 return render_template('s_student.html',stu = STUDENT_DICT) @app.route('/login',methods=['GET','POST']) def login(): if request.method == 'POST': session["username"] = request.form.get('username') return redirect('/index') else: return render_template('s_login.html') @app.route('/detail',endpoint='detail') @wrapper def detail(): id = int(request.args.get('id')) stu_info = STUDENT_DICT[id] return render_template('detail.html',stu_info = stu_info) if __name__ == '__main__': app.run()
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{{ stu_info }}
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{{ stu_info }}
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{{ stu_info }}
body>
html>