flask
python轻量级web框架,本身就是个中间件,借助操作系统的python环境去运行
flask基本设置
目录下新建几个文件夹
static
templates
1 | import flask |
运行也可以app.run(host='0.0.0.0',port=8888,debug=True)
host=’0.0.0.0’是开放所有ip,包括内网,公网,如果在公网服务器运行就可以被全世界访问到了
port设置端口
debug=True开启调试模式,一般在本地开发时使用,在更改代码后不需要重启服务器,代码运行出错可以在网页中显示代码出错原因
flask请求和参数
get类型请求及传参
分两种
第一种,个人觉得不好记
1 | @app.route('/a/<id>/<password>') |
访问时参数样式如下
http://127.0.0.1:8888/test/123/123
第二种
1 | @app.route('/a',methods=['GET']) |
访问时参数样式如下,注意访问的参数是request.args.get('')里面的
http://127.0.0.1:8888/test?id=123&password=123
post类型请求和传参
1 | @app.route('/a',methods=['POST']) # 不写method默认get类型 |
post类型访问。。。一般这是开发者给你写好了怎么传参,比如弄个输入框什么的,但这个时候我们就是开发者。。。所以个人建议浏览器下个叫做hackbar的插件,可以很方便的使用post请求
1 | import flask |
flask中的request库
当然我们也注意到很多信息都是通过request库获取的,事实上还有很多信息能获取
request.method 获取请求类型
request.headers 获取请求头
request.headers.get(“User-agent”) 获取请求头中的某项信息,这里是浏览器
request.path 获取路径,比如/abc
request.full_path 获取整个路径的请求(包括参数),比如/abc?uname=xxx&upass=xxx
request.baseurl 获取访问的完整url(不包括参数),比如 http://127.0.0.1:8888/abc
request.url 获取访问的完整url(包括参数),比如 http://127.0.0.1:8888/abc?uname=11&upass=aa
request.user_agent 获取访问者信息
request.user_agent.platform 客户端操作系统
request.user_agent.browser 客户端浏览器
request.user_agent.version 客户端浏览器版本
request.user_agent.language 客户端浏览器语言
能获取的东西非常多,这里不做赘述
json和字典
网站交互一般返回json格式的数据,比如
{“name”:”xiaoming,”pass”,”aaaa”}
1 | import flask |
重定向
就是说你输入到一个url,然后自动给你跳到另一个url
1 | @app.route('/redirect') |
404重定向
这个404重定向比较特殊,是你访问不存在的页面全都重定向到你设置好的404页面
1 | @app.errorhandler(404) |
url别名
如果访问的url非常非常长,可以设置一个别名,这里通过重定向来实现
1 | @app.route('/henchanghenchanghenchang',endpoint='l1') |
异常处理
主动抛出404异常,程序自动转到404
1 | @app.route('/a') |
如果在return后面加上状态码404,访问页面后可以显示正常的内容,但是返回的状态码是404
有时候黑客的扫描器扫出来只会看200的结果,忽略404,这些404结果可能确实有资产但是返回404容易被忽略
1 | @app.route('/a') |
html返回
1 | from flask import Response |
模板
可以在templates目录下新建html文件,这里新建temp.html
1 | <!DOCTYPE html> |
1 | @app.route('/a') |
显示的是temp.html的模板的内容
继承
templates目录下
father.html
1 | <!DOCTYPE html> |
child.html
1 | {% extends 'father.html' %}<!--继承父页面--> |
py文件
1 | @app.route('/a') |
可以看到子页面继承了父页面的内容
模板传参
Jinja2模板
渲染!!!!
互动
{{x}}存放变量
{%...%}控制代码块
``注释符
通过get传入的参数也可以显示出来,post同理
1 | @app.route('/a/<id>') |
temp.html
1 | <!DOCTYPE html> |
访问http://127.0.0.1/1/20,可以看到mint变成了40
也可以看到mstr,mlist,vip等都是我们设定的值,相当于后端的变量传到前端
过滤器
py文件
1 | @app.template_filter('dore') |
temp.html
1 | <!DOCTYPE html> |
可以看到mlist反了过来
这里的过滤器表示把列表内的元素倒过来输出
控制代码块
temp.html
1 | <!DOCTYPE html> |
这里以for循环和if语句为例展示控制代码块
cookie交互
1 | from flask import Response |
temp.html
1 | <!DOCTYPE html> |
session交互
1 | from datatime import timedelta |
temp.html中
1 | <!DOCTYPE html> |
表单操作
1 | @app.route('/test') |
temp.html
1 | <!DOCTYPE html> |
此时界面上就有表单了,可以通过表单进行POST请求了,输入用户名和密码后进入chuli.html
数据库操作
首先你得装个MySQL数据库,后略
1 | @app.route('chuli',methods=['POST']) |
chuli.html
1 | <!DOCTYPE html> |
chuli.html接受到POST的请求后print用户名和密码,然后后端查询数据库,再把查询出来的结果返回到前端
其他sql语句同理,记得防sql注入