目录
1 flask 介绍
# python 界的web框架
-Django:大而全,快速开发,公司内部项目
-Flask:小而精,不具备web开发好多功能,丰富的第三方插件
-FastApi:异步框架,主要为了做前后端分离接口
-Sanic:异步框架,只支持python3.6 及以上,性能比较高
-Tornado:公司用的比较少。。。
# Flask 框架
-pip3 install flask
fastapi
import time
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
async def index():
time.sleep(3)
return {'code': 100, 'msg': '成功'}
@app.get('/home')
async def home():
time.sleep(2)
return {'code': 100, 'msg': 'home'}
@app.get('/order')
async def home():
time.sleep(2)
return {'code': 100, 'msg': 'order'}
flask
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():
return 'hello world'
if __name__ == '__main__':
app.run()
wsgiref
# 服务 wsgi协议的web服务器,django的web服务用的就是它
# 相当于个socket服务端,可以接收客户端发送过来的请求,处理,返回给客户端
from wsgiref.simple_server import make_server
def mya(environ, start_response):
print(environ)
start_response('200 OK', [('Content-Type', 'text/html')])
if environ.get('PATH_INFO') == '/index':
with open('index.html','rb') as f:
data=f.read()
elif environ.get('PATH_INFO') == '/login':
with open('login.html', 'rb') as f:
data = f.read()
else:
data=b'<h1>Hello, web!</h1>'
return [data]
if __name__ == '__main__':
myserver = make_server('', 8011, mya)# 监听本地的8011端口,当请求来了,就会执行 mya(),传入两个参数,一个是environ:http请求转成python的字典,一个是start_response:响应对象
print('监听8010')
myserver.serve_forever()
Werkzeug
Werkzeug是一个WSGI工具包(在它基础上,继续封装),他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等
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)
2 显示用户小案例
from flask import Flask, render_template, request, redirect, session
app = Flask(__name__, template_folder='templates')
app.debug = True
app.secret_key = 'sdfsdfsdfsdf' # 等同于django的 配置文件有个很长的秘钥
USERS = {
1:{'name':'张三','age':18,'gender':'男','text':"道路千万条"},
2:{'name':'李四','age':28,'gender':'男','text':"安全第一条"},
3:{'name':'王五','age':18,'gender':'女','text':"行车不规范"},
}
@app.route('/login', methods=['GET', 'POST'])
def login():
# 只要在这个函数中,全局的request 就是当次请求的request对象,等同于django的request
if request.method == 'GET': # get请求返回模板
return render_template('login.html') # 新手四件套之一,返回模板
else:
username = request.form.get('username')
password = request.form.get('password')
if username == 'lqz' and password == '123':
# 登录成功,把登录信息,写入到session中
session['username'] = username
# return redirect('http://www.baidu.com') #重定向到百度,新手四件套之一,返回重定向
return redirect('/index') # 重定向到百度,新手四件套之一,返回重定向
else:
return render_template('login.html', error='用户名或密码错误')
@app.route('/index')
def index():
# 判断它是否登录,如果登录,显示用户信息
if session.get('username'):
return render_template('index.html',users=USERS)
else:
return redirect('/login')
@app.route('/detail/<int:pk>')
def detail(pk):
user=USERS.get(pk)
return render_template('detail.html',user=user)
if __name__ == '__main__':
app.run()
'''
1 新手三件套: 1 直接返回字符串 2 render_template 3 redirect
2 flask的路由写法,是基于装饰器的 @app.route('/detail/<int:pk>' ,methods=['GET'])
3 路由转换器跟django一样
4 取出前端post请求提交的数据:request.form
5 取出请求方式:request.method
6 使用session设置值和取值
-session[key]=value
-session.get('key')
7 flask的模板语法完全兼容dtl,并且它更强大,可以加括号执行
'''
detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>详细信息 {{user.name}}</h1>
<div>
{{user.text}}
</div>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table>
{% for k,v in users.items() %}
<tr>
<td>{{k}}</td>
<td>{{v.name}}</td>
<td>{{v['name']}}</td>
<td>{{v.get('name')}}</td>
<td><a href="/detail/{{k}}">查看详细</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<p>用户名:<input type="text" name="username"></p>
<p>密码:<input type="password" name="password"></p>
<p><input type="submit" value="提交">{{error}}</p>
</form>
</body>
</html>
标签:__,return,name,get,flask,app,快速
From: https://www.cnblogs.com/yuezongke/p/17594351.html