Flask初识

Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。

一、安装Flask模块

pip install flask

二、运行第一个Flask程序

打开一个Python文件,输入下面的内容并运行该文件。然后访问localhost:5000/index,我们应当可以看到浏览器上输出了Hello World

from flask import Flask

app = Flask(__name__)


@app.route('/index')
def index():
    return 'Hello World'


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

 

三、调试模式

Flask内置了调试模式,可以自动重载代码并显示调试信息。这需要我们开启调试模式:FLASK_DEBUG=1,然后再次运行程序,会看到有这样的输出。这时候如果再次修改代码,会发现这次Flask会自动重启。

* Restarting with stat

* Debugger is active!

* Debugger PIN: 157-063-180

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

 

四、Flask快速使用示例:用户登录

app.py:

from flask import Flask, render_template, request, redirect, session

app = Flask(__name__)
app.secret_key = '1121'   # 对session进行加密

USER_DICT = {
    '1': {'name': '大军', 'age': 18},
    '2': {'name': '大志', 'age': 25},
    '3': {'name': '梅凯', 'age': 10},
    '4': {'name': '院长', 'age': 69}
}


@app.route('/login', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        return render_template('login.html')

# request.form获取POST传过来的数据 usr = request.form.get('usr') pwd = request.form.get('pwd') if usr == 'ZGS' and pwd == '1121': # 用户信息放入session session['usr_info'] = usr return redirect('/home') else: return render_template('login.html', msg='用户名或密码错误') # return render_template('login.html', **{'msg:'用户名或密码错误'}) @app.route('/home') def home(): usr_info = session.get('usr_info') if not usr_info: return redirect('/login') return render_template('index.html', usr_dict=USER_DICT) @app.route('/logout') def logout(): del session['usr_info'] return redirect('/login') @app.route('/detail') def detail(): usr_info = session.get('usr_info') if not usr_info: return redirect('/login') uid = request.args.get('uid') info = USER_DICT.get(uid) return render_template('detail.html', info=info) if __name__ == '__main__': app.run()

login.html:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>休息系统,用户登录</title>
</head>
<body>
    <h1>登录</h1>
    <form method="post">
        <input type="text" name="usr">
        <input type="password" name="pwd">
        <input type="submit" value="提交"> {{msg}}
    </form>
</body>
</html>

index.html:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>首页</title>
</head>
<body>
    <ul>
        {% for k,v in usr_dict.items()%}
            <li> {{v.name}} <a href="/detail?uid={{k}}">查看详细</a></li>
        {% endfor %}
    </ul>
</body>
</html>

detail.html:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>详细信息</title>
</head>
<body>
    <h1>详细信息</h1>
    <div>{{info.name}}</div>
    <div>{{info.age}}</div>
</body>
</html>

 

页面效果:

输入用户名密码,点击登录:

点击查看详情:

 

五、各参数解释

1、路由:

路由通过使用Flask的app.route装饰器来设置

2、URL:

在Web程序中常常需要获取某个页面的URL,在Flask中需要使用url_for('方法名')来构造对应方法的URL

3、HTTP方法:

需要处理具体的HTTP方法,在Flask中使用route装饰器的method参数设置

@app.route('/login', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        return render_template('login.html')

4、静态文件:

Web程序中常常需要处理静态文件,在Flask中需要使用url_for函数并指定static端点名和文件名。在下面的例子中,实际的文件应放在static/文件夹下。

url_for('static', filename='style.css')

5、生成模板

Flask默认使用Jinja2作为模板,模板文件需要放在templates文件夹下。使用 Jinja 模板,只需要使用render_template函数并传入模板文件名和参数名。

from flask import Flask, render_template, request, redirect, session
app = Flask(__name__)

USER_DICT = {
    '1': {'name': '大军', 'age': 18},
    '2': {'name': '大志', 'age': 25},
    '3': {'name': '梅凯', 'age': 10},
    '4': {'name': '院长', 'age': 69}
}


@app.route('/home')
def home():
    usr_info = session.get('usr_info')
    if not usr_info:
        return redirect('/login')
    return render_template('index.html', usr_dict=USER_DICT)

相应模板:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>首页</title>
</head>
<body>
    <ul>
        {% for k,v in usr_dict.items()%}
            <li> {{v.name}} <a href="/detail?uid={{k}}">查看详细</a></li>
        {% endfor %}
    </ul>
</body>
</html>

页面访问:

 

6、Request 对象

Request 对象是一个全局对象,利用它的属性和方法,我们可以方便的获取从页面传递过来的参数。

method属性会返回HTTP方法的类似,例如post和get。

form属性是一个字典,如果数据是POST类型的表单,就可以从form属性中获取:request.form.get('usr')。如果数据是由GET方法传送过来的,可以使用args属性获取:request.args.get(uid)

 

posted @ 2020-03-29 21:15  TianShu  Views(30)  Comments(0Edit  收藏  举报