【Python之Flask框架】Day1
一、了解Flask
短小精悍,可扩展性强(第三方扩展,Flask文档里有每个模块的收集github)
与Django的区别:Django重而大,自带多种武器,Flask通过扩展也可实现。
二、Flask快速使用案例
2.1 wsgi接口
WSGI是 Web Server Gateway Interface 的缩写。它是 Python应用程序(application)或框架(如 Django)和 Web服务器之间的一种接口,已经被广泛接受。它是一种协议,一种规范,其是在 PEP 3333 提出的。这个协议旨在解决众多 web 框架和web server软件的兼容问题。有了WSGI,你不用再因为你使用的web 框架而去选择特定的 web server软件。
常见的web应用框架有:Django,Flask等。
-django,wsgiref
-flask,werkzurg
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)
【Q1】模块引用变灰:没有使用到相应模块
【Q2】@是什么?(python中@的用法)
在Python的函数中偶尔会看到函数定义的上一行有@functionName的修饰,当解释器读到@这样的修饰符的时候会优先解除@后的内容,直接就把@的下一行的函数或者类作为@后边函数的参数,然后将返回值赋给下一个修饰的函数对象。
【Q3】run_simple()是什么?
启动一个 WSGI application。
//当客户端发出一个 HTTP 请求后,是如何转到我们的应用程序处理并返回的呢?
1、两级结构
在这种结构里,uWSGI作为服务器,它用到了HTTP协议以及wsgi协议,flask应用作为application,实现了wsgi协议。当有客户端发来请求,uWSGI接受请求,调用flask app得到相应,之后相应给客户端。
这里说一点,通常来说,Flask等web框架会自己附带一个wsgi服务器(这就是flask应用可以直接启动的原因),但是这只是在开发阶段用到的,在生产环境是不够用的,所以用到了uwsgi这个性能高的wsgi服务器。
2.2flask初级使用
2.2.1 创建application
from flask import Flask
app = Flask(__name__) #Flask的一个类对象
@app.route('/index')
def index():
return 'Hello World'
if __name__ == '__main__':
app.run() #run_simple(host,port,app)
2.2.2html页面
from flask import Flask,render_template
app = Flask(__name__) #Flask的一个类对象
@app.route('/login')
def index():
return render_template('login.html')
if __name__ == '__main__':
app.run()
创建document,改:templates
doc下创建login.html 的html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>休息系统-用户登录</title>
</head>
<body>
<h1>登陆</h1>
<form method="post">
<input type="text" name="user">
<input type="password" name="pwd">
<input type="submit" value="提交">
</form>
</body>
</html>
2.2.3请求&登陆&重定向跳转
Flask特色:请求来了时不是用通过参数传递的。(往上放)
from flask import Flask,render_template,request,redirect
app = Flask(__name__) #Flask的一个类对象
@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 == 'harld' and pwd == '123':
return redirect('/index')
else:
return render_template('login.html',msg ='用户名或密码错误')
@app.route('/index')
def index():
return "欢迎宝贝登陆"
if __name__ == '__main__':
app.run()
plate('login.html',msg ='用户名或密码错误')
@app.route('/index')
def index():
return "欢迎宝贝登陆"
if __name__ == '__main__':
app.run()