Flask初识
一丶Flask和Django比较
flask短小精悍,适合小程序开发
Django适合中大型程序开发
二丶Flask的‘入口’
pip3 install flask
from werkzeug.wrappers import Response
from werkzeug.serving import run_simple
class Flask(object):
'''
# 面向对象的方式封装
'''
def __call__(self, *args, **kwargs):
return Response('Hellow Werkzeug!!!')
if __name__ == '__main__':
app=Flask()
run_simple('127.0.0.1',5000,app)
三丶Flask程序
from flask import Flask
app=Flask(__name__)
@app.route('/index')
def index():
return 'hellow Flask'
if __name__=='__main__':
app.run()
四丶Flask的请求,路由,响应
return 'XXX'
return jsonify({"k1":123})
@app.route('/login',methods=['GET','POST'])
return redirect(...)
from flask import Flask, request, render_template, redirect, session, url_for
import functools
app=Flask(__name__)
app.secret_key='1321312jkdsakljdls'
def user_login_check(fn):
@functools.wraps(fn)
def inner(*args,**kwargs):
print(inner)
if not session.get('user-info'):
return redirect(url_for('login'))
return fn(*args,**kwargs)
return inner
@app.route('/login',methods=['GET','POST'])
def login():
if request.method=='GET':
return render_template('login.html')
user=request.form.get('user')
pwd= request.form.get('pwd')
if user=='alex' and pwd=='123':
session['user-info']=user
return redirect('/index')
return render_template('login.html',error="用户或密码错误!!")
@app.route('/index',methods=['GET','POST'])
@user_login_check
def index():
data=['alex','wusir','taibai','bangzhu']
return render_template('index.html',data=data)
@app.route('/order')
@user_login_check
def order():
return '订单'
if __name__ == '__main__':
app.run()
1. 基本用法与Django一致
2. jinja2的语法更趋向于python语法
五丶session
from flask import Flask, request, render_template, redirect, session, url_for
import functools
app=Flask(__name__)
app.secret_key='1321312jkdsakljdls'
@app.route('/login',methods=['GET','POST'])
def login():
if request.method=='GET':
return render_template('login.html')
user=request.form.get('user')
pwd= request.form.get('pwd')
if user=='alex' and pwd=='123':
session['user-info']=user
return redirect('/index')
六丶装饰器认证
- 位置route的下面
- 记得加functools.wraps(...) , 保留函数的元信息.
def user_login_check(fn):
@functools.wraps(fn)
def inner(*args,**kwargs):
print(inner)
if not session.get('user-info'):
return redirect(url_for('login'))
return fn(*args,**kwargs)
return inner
@app.route('/index',methods=['GET','POST'])
@user_login_check
def index():
data=['alex','wusir','taibai','bangzhu']
return render_template('index.html',data=data)
七丶flask的请求周期(充当中间件)
before_request : 把所有的方法添加到一个列表,按照注册的顺序执行
after_request : 把所有的方法 进行 reverse倒序后,再执行
from flask import Flask, request, render_template, redirect, session, url_for
app=Flask(__name__)
app.secret_key='1321312jkdsakljdls'
@app.before_first_request
def f1():
print('f1')
@app.before_request
def f2():
print('f2')
@app.after_request
def f3(response):
print('f3')
return response
@app.after_request
def f4(response):
print('f4')
return response
@app.route('/login',methods=['GET','POST'])
def login():
print('login')
return 'login'
if __name__ == '__main__':
app.run()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?