一、flask介绍
flask是一个轻量级的web框架,可快速的搭建程序。适用于简单的程序。
二、对比Django组件
1 Django:无socket、中间件、路由系统、视图(CBV,FBV)、 模板、ORM、cookie、Session、Admin、Form、缓存、信号、序列化.... 2 Flask:无socket、中间件(扩展)、路由系统、视图(CBV)、第三方模板(jinja2)、cookie、Session(很弱)
三、WSGI
web服务网关接口协议(WSGI),功能为创建Socket,监听请求转发请求。
Flask依赖werkzeug模块实现WSGI协议
from werkzeug.wrappers import Request,Response
from werkzeug.serving import run_simple
@Request.application
def hello(request):
return Response('Hello world!')
if __name__ == '__main__':
run_simple('localhost','4000',hello)
四、Flask简单实现用户登录
flask_practice/example.py
from flask import Flask,render_template,request,redirect,session
app = Flask(__name__,template_folder='templates',static_url_path='/static')
# template_folder='templates' 指定templates目录名,默认为templates
# static_url_path='/static' 影响页面静态文件前缀路径
# root_path='' 指定当前目录位置路径,默认为当前目录
app.secret_key = 'xxxxxxddddddffffffffff'
# flask的session没有持续存储到数据库或其他空间,而是生成随机字符串作为session
# 之后将session加密放到cookie中的发送到客户端浏览器,secret_key对session加密同时的加言后,加大了反解难度
@app.route('/login',methods=['GET',"POST"]) # 创建路由映射,并保存路由关系,methods指定请求的方法
def login():
if request.method == 'GET':
return render_template('login.html')
else:
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'alex' and pwd == '123':
session['user_info'] = user
return redirect('/index')
else:
return render_template('login.html',msg='用户名或密码错误') # msg='用户名或密码错误'传递至前端
@app.route('/index',methods=['GET']) # 路由系统的本质,是将url和函数封装到rule对象,添加到MAP中
def index():
if not session.get('user_info'):
return redirect('login')
return '欢迎登录'
if __name__ == '__main__':
# 启动程序,监听用户请求
# 一旦请求到来执行app.__call__方法
# 封装用户请求
# 进行路由匹配函数
app.run()
flask_practice/templates/login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>login</h1>
<form method="post">
<input type="text" name="user">
<input type="text" name="pwd">
<input type="submit" value="登录">{{msg}}
</form>
<img style="width: 300px;height: 200px" src="/static/img/ooo.jpg" alt="">
</body>
</html>