Python 库学习 —— Flask 基础学习

文章目录

  • 系列文章
  • 一、Flask简单介绍
  • 二、项目创建(进入调试模式/热部署)
  • 三、路由解析
  • 四、渲染模板
  • 五、表单提交


系列文章

Python 学习 01 —— Python基础
Python 库学习 —— urllib 学习
Python 库学习 —— BeautifulSoup4学习
Python 库学习 —— Re 正则表达式
Python 库学习 —— Excel存储(xlwt、xlrd)
Python 学习 02 —— Python爬虫
Python 库学习 —— Flask 基础学习
Python 学习03 —— 爬虫网站项目


一、Flask简单介绍

Python做Web开发常用框架之一,通常来说,大型项目用Django,小型项目用Flask。著名的网飞(Netflix)也是使用Flask开发。

Flask是轻量框架,本身带有Werkzeug(用于路由解析)Jinja2(用于模板渲染),同时Flask有非常丰富的第三方库,需要什么就安装什么,所以自身是比较小巧的。

二、项目创建(进入调试模式/热部署)

  • 新建项目时选择Flask(初次创建时会下载一些包)
Python 库学习 —— Flask 基础学习_第1张图片
  • 创建好的项目如下:

    其中,static是用来放CSS、JavaScript等静态资源,templates是用来放HTML等渲染模板。

    右侧代码app = Flask(__name__)把Flask框架导入进来,赋给app,所以后面就可以使用变量app来操作Flask框架。

    代码@app.route('/')是进行路由解析,即后续我们访问http://127.0.0.1:5000/会默认解析到函数hello_world()。

    学过Java Web这些应该都比较清楚。

Python 库学习 —— Flask 基础学习_第2张图片

  • 运行程序

    右键运行或者右上角点运行按钮,会出现下面结果,点击下面的链接或者去浏览器输入链接,可以访问网站(路由解析到hello_world函数)

Python 库学习 —— Flask 基础学习_第3张图片

Python 库学习 —— Flask 基础学习_第4张图片

  • 开启热部署/调试模式

    对代码进行修改后,都需要重新运行才能看见修改的效果,而开启调试模式可以即时看到修改效果(。

    • PyCharm 专业版:

Python 库学习 —— Flask 基础学习_第5张图片

Python 库学习 —— Flask 基础学习_第6张图片

  • PyCharm 社区版(也可以按专业版方法)

Python 库学习 —— Flask 基础学习_第7张图片

出现下面样子,表示开启成功:

Python 库学习 —— Flask 基础学习_第8张图片

三、路由解析

前面说过,@app.route('/')是对默认路径进行解析http://127.0.0.1:5000/,如果对Java Web有了解就知道,我们可以携带参数、修改路径等等。

  • 修改路径

    # 访问 http://127.0.0.1:5000/index
    @app.route('/index')
    def index():
        return '这是首页'
    
  • 传递字符串参数

    # 访问 http://127.0.0.1:5000/user/小白,name是str类型
    @app.route('/user/')
    def welcome(name):
        return '你好, %s' % name
    
  • 传递整型参数

    # 访问 http://127.0.0.1:5000/user/123,路由解析会自动判断我们传递参数的类型,来自动选择执行哪个函数
    @app.route('/user/')
    def welcome2(id):
        return '%d号会员,你好' % id
    
  • 传递浮点数类型

    # 访问 http://127.0.0.1:5000/user/1.11
    @app.route('/user/')
    def welcome3(money):
        return '您花费了%f' % money
    

四、渲染模板

写网站一般都会用到HTML,Python开发也不例外,我们会将HTML放在templates文件夹下,使用Jinja2进行渲染。

  • 返回HTML

Python 库学习 —— Flask 基础学习_第9张图片

# 要导入render_template
from flask import Flask, render_template

app = Flask(__name__)

# 使用render_template来加载HTML
@app.route('/')
def hello_world():
    return render_template('index.html')

if __name__ == '__main__':
    app.run()

结果:

Python 库学习 —— Flask 基础学习_第10张图片

  • 向HTML传递参数

    传递的参数直接加在render_template后面,参数名称前面是HTML里访问名,后面是当前模块里的变量名。

    from flask import Flask, render_template
    import datetime  # 导入时间模块
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
        time = datetime.date.today()  # 传递 普通变量(今天日期)
        nameList = ["小白", "小红", "小蓝"]  # 传递 列表
        gradeDic = {"语文成绩": 90, "数学成绩": 85, "英语成绩": 78}  # 传递字典
        # 传递参数:HTML里的变量名=当前变量名
        return render_template('index.html', var=time, age=18, list=nameList, gradeDic=gradeDic)
    
    if __name__ == '__main__':
        app.run()
    

    HTML中使用Jinjia2的语句进行访问:

    • 访问普通变量:{{ 传递的变量名 }}
    • 迭代:以{% for xx in xx %}开始,以{% endfor %}结束。
    • 判断:以{% if %}开始,以{% endif %}结束。
    
    
    
        
        首页
    
    
        
        今天的日期:{{ var }} 
    {% if age < 18 %}

    未成年

    {% elif age == 18 %}

    刚刚成年

    {% else %}

    已经成年了

    {% endif %} 名称列表:
    {% for name in list %}
  • {{ name }}
  • {% endfor %} {% for key, value in gradeDic.items() %} {% endfor %}
    {{ key }} {{ value }}

    结果:

Python 库学习 —— Flask 基础学习_第11张图片

五、表单提交

Web开发中经常会用到表单,这里简单举例一下Flask框架提交表单怎么写。

  • 项目结构

Python 库学习 —— Flask 基础学习_第12张图片

  • 注册页面 register.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册页面</title>
    </head>
    <body>
    		<!-- 提交表单给 http://127.0.0.1:5000/result,注意这里是以POST方式提交 -->
    		<!-- url_for('result') 等价于 http://127.0.0.1:5000/result,result是映射到 app.py 的result函数 -->
        <!-- 通常我们使用url_for函数,而不是直接写url链接,这样更加灵活 -->
        <form action="{{ url_for('result')}}" method="post">
            <p>账户:<input type="number" name="name"></p>
            <p>密码:<input type="password" name="password"></p>
            <p><input type="submit" value="提交"></p>
        </form>
    </body>
    </html>
    
  • 结果显示页面 result.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>结果页面</title>
    </head>
    <body>
    		<!-- 传递过来的参数 result 是一个字典 -->
        <table border="1">
            {% for key, value in result.items() %}
                <tr>
                    <th>{{ key }}</th>
                    <td>{{ value }}</td>
                </tr>
            {% endfor %}
        </table>
    </body>
    </html>
    
  • Flask操作 app.py

    # 导入需要的模块,request用于获取表单参数
    from flask import Flask, render_template, request
    
    app = Flask(__name__)
    
    # 跳转到表单页面
    @app.route('/form/toRegister')
    def register():
        return render_template("form/register.html")
    
    
    # 跳转到结果页面,并传递表单参数。允许POST和GET方式。
    @app.route('/toResult', methods=["POST", "GET"])
    def result():
      	# 对POST方式提交过来的表单数据进行处理
      	# POST方式用 request.form 获取数据,GET方式用 request.args获取数据
        if request.method == "POST":
            result = request.form	# 获取到表单数据(这里是字典类型的,key对应于input的name,value就是输入值
            return render_template("form/result.html", result=result)
    
    
    if __name__ == '__main__':
        app.run()
    
    

运行结果:

Python 库学习 —— Flask 基础学习_第13张图片

Python 库学习 —— Flask 基础学习_第14张图片

你可能感兴趣的:(Python,python,Flask,flask,python,web开发)