Flask学习入门(三)-------路由

路由相关学习

路由查看

在命令窗口输入:

flask routes
Endpoint  Methods  Rule
--------  -------  -----------------------
getIndex  GET      /
static    GET      /static/<path:filename> #flask默认的,为了方便访问我们的静态资源
Endpoint:端口,也就是视图函数的名称。
Methods:请求方法。
Rule:请求路径

另一种产看方式
在视图函数中使用

print(app.url_map)
然后启动程序访问对应的视图函数,就会打印出来路由信息

路由映射

首先,我们来看一个简单的flask程序

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "hello world"

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

点击运行后,出现如下结果:
在这里插入图片描述
在浏览器输入http://127.0.0.1:5000/即可访问到hello_world函数所处理的数据

在flask中路由和函数绑定主要有两种方法:
第一种直接使用类似注解的方式,使用@app.route(‘/’)注解到对应的处理函数上面,例如以上代码中的

@app.route('/')
def hello_world():
    return "hello world"

其中route()中的参数是字符串类型,对应请求的url。
另外一种方法是使用app.add_url_rule()函数来添加映射,add_url_rule()接受三个参数,第一个是url,第二个是url_for反转时对应的字符串,也可以不填写默认为被映射的函数名,第三个是对应的函数名称,示例如下

def hello():
    return "hello"
app.add_url_rule('/','hello',hello)

这样就把"/hello"和hello函数绑定到一起了。

路由跳转

在flask中路由跳转使用redirect,首先需要引入redirect模块 ,示例如下:

@app.route('/login/')
def login():
    return redirect('/success')
@app.route('/success/')
def success():
    return 'success'

使用url_for可以使用函数名映射对应的url如:

@app.route('/login/')
def login():
    return redirect(url_for('success'))
@app.route('/success/')
def success():
    return 'success'

路由传参

直接使用redirect

@app.route('/login/<role>')
def login(role):
    return redirect('/success',role = role)
@app.route('/success/<role>')
def success(role):
    return 'success' + role

结果:
在这里插入图片描述
配合url_for传参

@app.route('/login/<role>')
def login(role):
    return redirect(url_for('success',role = role))
@app.route('/success/<role>')
def success(role):
    return 'success' + role

在这里插入图片描述
变量输出的两种方式

@app.route('/login/<role>')
def login(role):
    return redirect(url_for('success',role = role))
@app.route('/success/<role>')
def success(role):
    # 使用占位符
    return 'success%s'%role
    # 字符串拼接
    # return 'success'+ role

HTTP方法

GET:以未加密的形式将数据发送到服务器。最常见的方法。
HEAD:和GET方法相同,但没有响应体。
POST:用于将HTML表单数据发送到服务器。POST方法接收的数据不由服务器缓存。
PUT:用上传的内容替换目标资源的所有当前表示。
DELETE:除由URL给出的目标资源的所有当前表示。

html路由提交

新建html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://127.0.0.1:5000/login" method="post">
        <label>username:</label><input type="text" name="username" placeholder="请输入用户名"><br>
        <label>password:</label><input type="password" name="password" placeholder="请输入密码">
        <button type="submit">登录</button>
    </form>
</body>
</html>

默认情况下,Flask路由响应GET请求。但是,可以通过为route()装饰器提供方法参数来更改此首选项

@app.route('/login',methods = ['POST','GET'])
def loginin():
    if request.method == 'POST':
        username = request.form['username']
        passqord = request.form['password']
        return redirect(url_for('success',role = username))
    else:
        username = request.args.get('username')
        passqord = request.args.get('password')
        return redirect(url_for('success',role = username))

结果:
在这里插入图片描述
在这里插入图片描述

完整代码:
python:

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

@app.route('/')
def hello_world():
    return "hello world"
def hello():
    return "hello"
app.add_url_rule('/hello','hello',hello)

# @app.route('/login/<role>')
# def login(role):
#     return redirect(url_for('success',role = role))
@app.route('/success/<role>')
def success(role):
    # 使用占位符
    return 'success%s'%role
    # 字符串拼接
    # return 'success'+ role
@app.route('/login',methods = ['POST'])
def loginin():
    if request.method == 'POST':
        username = request.form['username']
        passqord = request.form['password']
        return redirect(url_for('success',role = username))
    else:
        username = request.args.get('username')
        passqord = request.args.get('password')
        return redirect(url_for('success',role = username))

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

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://127.0.0.1:5000/login" method="post">
        <label>username:</label><input type="text" name="username" placeholder="请输入用户名"><br>
        <label>password:</label><input type="password" name="password" placeholder="请输入密码">
        <button type="submit">登录</button>
    </form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值