目录:
1.Flask介绍
2.Flask安装及使用
(1)pip安装Flask
(2)编写运行最简单的Flask应用
(3)路由:route
(4)Flask变量规则
(5)URL / 重定向行为
(6)URL构建
(7)Flask重定向和
3.Flask渲染模板
(1)Jinja2模板引擎介绍
(2)渲染模板
(3)模板渲染示例
我不是专门做开发的,为什么要学Flask框架呢,主要是为了研究学习Flask模板注入漏洞。
1.Flask介绍
Flask是基于Werkzeug,Jinja2的Python微框架,有很多内容和Django类似,特别是在模块渲染方面,还有包括if、for等语法和python代码的引用,如:{% %}和{{ }}等等,但是其中对于url的设置则是全新的,开启服务调用函数也要轻便不少。
2.Flask安装及使用
(1)pip安装Flask
C:\>pip3 install flask``C:\>pip3 list |findstr Flask``Flask 1.1.2
(2)编写运行最简单的Flask应用
hello.py:
#!/usr/bin/python3``# -*- coding: UTF-8 -*-`` ``from flask import Flask``app = Flask(__name__)`` ``@app.route('/') #route装饰器,用作url与视图函数的映射,一般写在函数上方``def hello():` `return "Hello afei!"`` ``#主函数,运行之后在浏览器输入:http://127.0.0.1:5000 即可``if __name__ == '__main__':` `app.run()
注意:不要使用flask.py作为应用名称,这会与Flask本身发生冲突。
运行访问:
D:\code\python\python Flask>python hello.py` `* Serving Flask app "hello" (lazy loading)` `* Environment: production` `WARNING: This is a development server. Do not use it in a production deployment.` `Use a production WSGI server instead.` `* Debug mode: off` `* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)``127.0.0.1 - - [13/Oct/2020 10:52:27] "?[37mGET / HTTP/1.1?[0m" 200 -
(3)路由:route
使用route()装饰器可以把函数绑定到URL。
route.py:
#!/usr/bin/python3``# -*- coding: UTF-8 -*-`` ``from flask import Flask``app = Flask(__name__)`` ``@app.route('/')``def index():` `return "This is index page!"`` ``@app.route('/hello')``def hello():` `return "hello afei!"`` ``if __name__ == '__main__':` `app.run()
运行结果:
(4)Flask变量规则
通过把URL的部分标记为就可以在URL中添加变量。
variable.py:
#!/usr/bin/python3``# -*- coding: UTF-8 -*-`` ``from flask import Flask, escape, url_for``app = Flask(__name__)`` ``@app.route('/user/<name>')``def show_name(name):` `return 'My name is %s' % escape(name)`` ``@app.route('/pass/<int:pwd>')``def show_pwd(pwd):` `return 'The password is %d' % pwd`` ``@app.route('/path/<path:subpath>')``def show_path(subpath):` `return 'The subpath is %s' % subpath`` ``if __name__ == '__main__':` `app.run(debug=True)
转换器类型:
|
|
|
|
|
|
|
|
|
|
|
|
(5)URL / 重定向行为
url_redirect.py:
#!/usr/bin/python3``# -*- coding: UTF-8 -*-`` ``from flask import Flask``app = Flask(__name__)`` ``@app.route('/project/')``def project():` `return 'This is project page!'`` ``@app.route('/about')``def about():` `return 'This is about page!'`` ``if __name__ == '__main__':` `app.run()
上述代码中,/project尾部有一个斜杆,看起来像一个文件夹,访问一个没有斜杆或者加上多个斜杆的url时,Flask会自动进行重定向,在尾部只增加一个斜杆。
/about的尾部没有加斜杆,其表现行为和一个文件类似,如果访问about/带斜杆将会得到404错误,这样可以保持URL唯一。
(6)URL构建
使用url_for函数可以构建指定函数的url,它把函数名称作为第一个参数。它可以接受任意个关键字参数。
url_build.py:
#!/usr/bin/python3``# -*- coding: UTF-8 -*-`` ``from flask import Flask, escape, url_for``app = Flask(__name__)`` ``@app.route('/')``def show_index():` `return 'This is index page!'`` ``@app.route('/login')``def show_login():` `return 'This is login page!'`` ``@app.route('/user/<username>')``def show_username(username):` `return '{}\'s profile'.format(escape(username))`` ``#使用test_request_context()方法来调用url_for函数``with app.test_request_context():` `print(url_for('show_index'))` `print(url_for('show_login'))` `print(url_for('show_login', next='/'))` `print(url_for('show_username', username='afei'))
D:\code\python\python Flask>python url_build.py``/``/login``/login?next=%2F``/user/afei
(7)Flask重定向和
Flask中有一个redirect()函数,该函数主要是将用户重定向到具有指定状态代码的另一个目标位置。
redirect函数原型:
Flask.redirect(location, statuscode, response)
location参数:设置重定向响应的URL;
statuscode参数:设置发送到浏览器的标头,默认302;
response参数:设置实例化响应。
login_redirect.py:
#!/usr/bin/python3``# -*- coding: UTF-8 -*-`` ``from flask import Flask, redirect, url_for, render_template, request``app = Flask(__name__)`` ``@app.route('/')``def index():` `#使用 render_template() 方法可以渲染模板` `return render_template('login.html')`` ``@app.route('/login', methods = ['POST', 'GET'])``def login():` `if request.method == 'POST' and request.form['username'] == 'admin':` `return redirect(url_for('success'))` `return redirect(url_for('index'))`` ``@app.route('/logined')``def success():` `return 'logged in successfully!'`` ``if '__name__' == '__main__':` `app.run(debug = True)
上面的代码中提到了渲染模板,先卖个关子,接着往下看。
3.Flask渲染模板
说到Flask的渲染,就不得不说Jinja2模板引擎。
(1)Jinja2模板引擎介绍
Jinja 2是一种面向Python的现代和设计友好的模板语言,它是以Django的模板为模型的;它也是Flask框架的一部分。Jinja2会把模板参数提供的相应的值替换了{{…}}块。
(2)渲染模板
Flask会在templates文件夹内寻找模板,所以,在运行文件xxx.py下需要先建一个templates目录。
情况1:一个模块:
/xxx.py``/templates` `/xxx.html
情况2:一个包:
/xxxxx` `/__init__.py` `/templates` `/xxx.html
(3)模板渲染示例
flask_jinja2.py:
from flask import Flask, render_template`` ``app = Flask(__name__)`` ``@app.route('/index')``@app.route('/index/<page_id>')`` ``#使用 render_template() 方法可以渲染模板``def index(page_id=None):` `return render_template('index.html', page_id=page_id)`` ``if __name__ == '__main__':`` ` `app.run(debug=True)
上述代码中,index()函数并没有直接返回字符串,而是使用render_template()方法来渲染模板,该方法的第一个参数"index.html"是渲染模板的名称,第二个参数“page_id”是要传递到渲染模板的变量,可以传多个变量。
模板index.html:
<!doctype html>``<title>welcom index page</title>``{% if page_id %}` `<p>This is page {{page_id}}</p>``{% else %}` `<h2>666</h2>``{% endif %}
为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取