Flask的简单认识

时间:2023-03-10 01:29:20
Flask的简单认识

Flask的简单认识

Flask是轻量级的框架,适用于简单的程序

与Django的比较:

Django: 无socket,中间件,路由,视图(CBV,FBV),模板,ORM, cookie,session,缓存,序列化,Form,信号.....

flask:  无socket,中间件(需要扩展),路由,视图(CBV,FBV),第三方模板(jinja2),cookie,session

Flask 的网络通信, 依赖于 werkzeug模块(实现了wsgi协议的模块 )

wsgi

    web 服务网关接口协议

请求    -->>	   socket接听     -->>  web应用

            实现wsgi协议的模块
本质:创建socket监听请求和转发请求

Flask 的启动入口

wsgi.py

    from werkzeug.wrappers import Request, Response

    @Request.application
def hello(request):
return Response('Hello World!') if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 4000, hello) flask from flask import Flask # 实例化Flask对象
app = Flask(__name__) # 生成路由关系,并把关系保存到 app.url_map
@app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run() # 启动程序,监听用户请求
# 一旦请求到来,执行 app._ _call _ _方法
# 封装用户请求
# 进行路由匹配

Flask的简单认识

Flask的简单认识

Flask的简单认识

Flask的简单认识

>**Flask 的路由系统**

(1)装饰器与路由系统 捆绑到一起

常用

@app.route('/')
def hello_world():
return 'Hello World!'

(2) app.add_url_rule('/','hello_world',hello_world)

  def hello_world():
return 'Hello World!' app.add_url_rule('/','hello_world',hello_world)

( 3 ) 带参数的装饰器 -- flask 的路由系统

装饰器

    有参数的装饰器, 形成闭包 把参数传给inner使用

        @app.route('/')
def hello_world():
return 'Hello World!' def route(self, rule, **options):
def decorator(f):
endpoint = options.pop('endpoint', None)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator 无参数的装饰器 def wrapper(func):
def inner(*args,**kwargs):
print('hello')
return func(*args,**kwargs)
return inner @wrapper
def func(arg):
print(arg)

Flask 的 render_template

  导入
from flask import render_template 指定模板文件夹
app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static') 返回数据给模板
return render_template('login.html',msg=msg)

Flask 的 request

指定请求方式
@app.route('/login',method=['GET','POST'])
def login():
return render_template('login.html') request的数据
print(request) #<Request 'http://127.0.0.1:5000/login' [POST]>
print(request.query_string)
print(request.args) # get 请求的参数
print(request.values) # 全部的请求参数 CombinedMultiDict([ImmutableMultiDict([('v', '123')]), ImmutableMultiDict([])])
print(request.form) # post 请求的参数

Flask 的 静态文件

配置 static文件目录,和 path

   app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static')

src
"{{ url_for('static',filename='1.png') }}"
"/static/1.png"

Flask 的 session -- secret key配置

session (所有的都放到浏览器) | django的session 是放在服务端
session_id -- cookie
放在浏览器,减轻服务端压力 app.config['SECRET_KEY'] = 'sadsada2321312' # 用serect_key 加盐加密

登录小 demo

from flask import Flask,render_template,request,session,redirect

app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static')
app.config['SECRET_KEY'] = 'sadsada2321312' @app.route('/',methods=['GET'])
def hello_world():
user = session.get('user','')
if user:
return 'Hello World!'
else:
return redirect('/login') @app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
user = request.values.get('user')
if user:
session['user'] = user
return redirect('/')
else:
msg = '用户名密码错误'
return render_template('login.html',msg=msg) if __name__ == '__main__':
app.run()