一、Flask应用
1、介绍
-
定义
Flask:是一个使用Python编写的轻量级web应用框架。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。
-
特点
良好的文档、丰富的插件、包含开发服务器和调试器、集成支持单元测试、RESTful请求调度、支持安全cookies、基于Unicode。
-
用处
Python可以直接用flask启动一个web服务页面。
2、flask基本框架
(在python的venv虚拟环境运行)
from flask import Flask #启动flask模块,创建一个Flask类
app = Flask(__name__) #__name__系统变量,指的是py文件的文件名(相当于反序列化中的魔术方法)
@app.route('/') #路由,相当与路径
def lin1():
return "sb"
if __name__=='__main__': #只能被python直接运行,不能作为组件或模块被调用
app.run()
运行
运行后发现需要去浏览器查看(由于是127.0.0.1所以只能在虚拟机上的浏览器查看,没法在主机查看)
要在本机上运行,需要改变运行的host
from flask import Flask #启动flask模块,创建一个Flask类
app = Flask(__name__)
@app.route('/lin1') #将路径指向lin1
def lin1():
return "sb"
@app.route('/lin2')
def lin2():
return "2b"
if __name__=='__main__':
app.run(debug=True,host="172.16.17.29",port=6000)
#debug=True:改完文件的配置可以自动生效(建议只在学习中开启,实战有漏洞,导致命令执行)
#host="172.16.17.29",port=6666:将网址改为172.16.17.29端口改为80使得能在本机上运行
运行
可以看到访问的地址改变了,且debug已启动(PIN码为562-864-305)
访问lin1
访问lin2
3、flask变量规则
构建动态url
from flask import Flask
app = Flask(__name__)
@app.route('/lin1/<name>')
def lin1(name): #传入字符型参数name
return "sb %s" % name
@app.route('/lin2/<int:yourid>')
def lin2(yourid): #传入整数型参数yourid
return "id %d" % yourid
@app.route('/lin2/<int:yourmoneny>')
def lin2(yourmoneny): #传入浮点型参数yourmoneny
return "id %.2f" % yourmoneny
if __name__=='__main__':
app.run(debug=True,host="172.16.17.29",port=6000)
效果:
4、flask的http方法
扩展:
方法 用法 POST 用于向指定资源提交数据进行处理请求,例如提交表单或上传文件。数据被包含在请求体中,可能导致新的资源建立或原有资源修改。 GET 请求指定的页面信息,并返回实体内容。 HEAD 类似于GET,只不过返回的响应中没有具体的内容,仅传输状态行和标题部分,用于获取报头信息。 PUT 从客户端向服务器传送的数据取代指定的内容,即向指定的位置上传最新的内容。 DELETE 请求服务器删除Request-URL所标识的资源。
简单的登入界面
新创建一个templates文件夹,在里面放入一个html文件
<html>
<body>
<form action = "http://172.16.17.29:6000/login" method = "post">
<p>Your Name</p>
<p><input type = "text" name = "name"></p>
<p><input type = "submit" value = "submit"></p>
</form>
</body>
</html>
开始构造flask框架
from flask import Flask,request,redirect,url_for,render_template
import requests
app = Flask(__name__)
@app.route('/') #登录页面(‘/’)
def index():
return render_template("index.html")
#render_template:根据传入的参数和变量,替换模板文件中的占位符,并返回最终的 HTML 内容给客户端。
@app.route('/user/<name>') #用户页面(‘/user/’)
def user(name):
return "hello %s" % name
@app.route('/login',methods = ['GET','POST']) #可以用POST方法也可以用GET方法
def login():
if request.method == 'POST':
user = request.form['name'] #request.form['name']:获取表单数据
return redirect(url_for('user',name = user)) #redirect:重定向到/user/<name>
else:
user = request.args.get('name','')
return redirect(url_for('user',name = user))
if __name__ == '__main__':
app.run(debug=True,host="172.16.17.29",port = 6000)
运行
POST
GET
结果