zoukankan      html  css  js  c++  java
  • flask开发框架快速入门

    Flask简介

    Flask是一个相对于Django而言轻量级的Web框架。

    和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模板引擎Jinja。

    在ctf中常会遇到flask模板注入的题目,所以简单学习一下flask模板注入。

    首先安装好flask库,开始我们的学习。

    pip3 install flask

     0x01 基础搭建

    初始化

    所有flask应用都应该创建实例,实例是一个flask类的对象。

    from  Flask import flask #导入包
    app=Flask(__name__)#创建实例

    注册路由

    @route ( '/index' )
    def  index():
         return  'Hello,Flask!'

    注册路由就是建立URL规则和处理函数之间的关联,在Flask应用中,路由是指用户请求的URL与视图函数之间的映射。

    Flask框架 根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数, 并将视图函数的执行结果返回WSGI服务器。

    当我们访问的url为/index的时候,会自动执行index这样的视图函数(处理入站请求的函数)。

    绑定规则是用route装饰器进行操作的。

    匹配动态url

    在Flask中,可以将URL中的可变部分使用一对小括号<>声明为变量, 并为视图函数声明同名的参数。

    @app.route('/user/<name>')
    def user(name):
        return '<h1>Hello,{}!</h1>'.format(name)

    启动服务器

    Flask封装了一个简单的开发用WSGI服务器,我们可以通过调用run() 启动服务器运行:

    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=2000)

    综上测试

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/user/<name>')
    def user(name):
        return '<h1>Hello,{}!</h1>'.format(name)
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=2000)

    运行并访问

    0x02 模板

    把业务逻辑和显示逻辑分离开,可以降低开发难度和维护成本,引入了模板的开发方法。

    同目录下新建一个文件夹,名字为templates,这是flask自动寻找模板文件的默认目录。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Index</title>
    </head>
    <body>
    <h1>这是我的模板</h1>
    </body>
    </html>

    导入render_template方法,并且调用。

    from flask import Flask,render_template
    app = Flask(__name__)
    
    @app.route('/index')
    def index():
        return render_template('template.html')
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=2000)

    访问页面,运行成功。

    模板文件中添加变量

    模板文件是可以被传参的。

    {{}}是模板稳健的变量包裹标识符,我们这么构造模板文件,在url中用<>包裹变量,如下

    from flask import Flask,render_template
    app = Flask(__name__)
    
    @app.route('/index/<name>')
    def index(name):
        return render_template('template.html',name=name)##左边的name为模板文件中的变量,右边的url中的变量
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=2000)

    模板文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Index</title>
    </head>
    <body>
    <h1>这是{{name}}的模板</h1>
    </body>
    </html>

    运行成功

     过滤器

    过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,

    而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器。

    常见过滤器如下:

     模板语句

    if语句

    {% if xxx %}
    {% else %}
    {% endif %}##表示循环结束,因为对缩进不敏感,需要特别强调什么时候循环结束,这是和python不同的一个点

    for循环

     
  • 相关阅读:
    网络模块axios的简单应用
    UWP App国际化的两种实现
    C# 显示函数调用方的详细信息
    UWP SVG 转 Glyph
    UWP 区分设备类型
    Flutter 星标已正式超过React Native
    查看Github星标排行榜
    博客园部分非公开api
    模块化(零):综述
    模块化一:提取模块
  • 原文地址:https://www.cnblogs.com/akger/p/15365322.html
Copyright © 2011-2022 走看看