Flask之基础(1)
启动
from flask import Flask # 导入Flask类
app = Flask(__name__) # 实例化Flask对象app, 当前文件所属目录
app.run() # 启动web服务
带有路由与视图的启动
from flask import Flask
app = Flask(__name__)
@app.route("/index") # app中的route装饰器, 相当于路由
def index(): # 视图函数
return "hello world"
app.run('0.0.0.0', debug=True)
Flask返回值
from flask import Flask, render_template, redirect
1. Flask中的HttpPesponse
return 'hello world'
2.Flask中的redirect
@app.route('/login')
def login():
return redirect('/index') # 重定向跳转到指定额url地址
3.Flask 中的 render
@app.route('/login')
def login():
return render_template('login.html')
注意: 使用 render_template 返回渲染的模板,要在项目的主目录中加入 templates (固定写法)
# 特殊返回值
from flask import Flask, send_file, jsonify
# 打开并返回文件内容, 自动识别文件类型, 响应头Content-type: 文件类型
return send_file('video.mp4')
# 返回标准格式的JSON字符串, 响应头中Content-type:application/json
return jsonify({"key":"value"})
request (请求)
from flask import Flask, request
@app.route('/index', method=['GET', 'POST'])
def index():
pass
method=['GET', 'POST'] # 允许的请求方式
1.request.method # 前端的请求方式
2. request.form # 获取前端提交的formdata
request.form['user']
request.form.get('user')
request.form.to_dict()
3. request.args # 接收url中的参数, 获取到一个字典
request.args['id']
request.args.get('id')
request.args.to_dict()
4. request.values # 获取所有的参数
request.values['user']
request.values.get('user')
request.values.to_dict() # url和form中的Key重名,form中的value会被url中的value覆盖
5. request.cookies # 将浏览器中的cookies信息读取出来
6. request.headres # 请求头中的信息
7. request.data # 存放请求体中的原始信息(处理不了的字符串) b""
json.loads(request.data) # 转为json数据
8. request.json # 请求头中Content-Type:application/json 将请求体中的数据, 存放在JSON中
9. request.files # 接收文件
file = request.files.get("file") # file为文件的key
file.save(file.filename) # 保存文件
10. reequest.url # http://127.0.0.1:5000/index : 获取全部的url地址
11. request.path # /index : 获取当前的url地址
jinja2
1. 后端向前端传送数据
STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'}
@app.route('/index')
def index():
return render_template('index.html', stu=STUDENT)
前端:
{{ stu }}
2. 后端自定义前端的代码, Markup = safe
from flask import Flask, render_template, Markup
@app.route('/login', methods=['GET', 'POST'])
def login():
tag = Markup('<input type="text" name="name">')
return render_template('login.html', tag = tag)
3. 全局函数, 不需要传值, 前端可以直接调用
@app.template_global()
def ab(a, b):
return a + b
前端:
{{ ab(1,3) }} # 4
4. macro (宏)
{% macro func(type, name) %} # 定义函数
<input type="{{ type }}" name="{{ name }}">
{% endmacro %}
{{ func('text','name') }} # 调用函数
Flask原生session
Flask中的Session会将SessionID存放在客户端的Cookie中。
Flask中的session, 需要通过secret_key 序列化(加密)
from flask import session
app.secret_key = '@#$%^&*()'
session['user'] = 'jason' # 设置session
session.get('user') # 获取session