原创

Flask(2)-URL视图参数传递

一、URL映射

# 映射一个url地址 “list”
# 访问 “list”url时执行 list函数

@app.route("/list/")
def list():
    return "my_list"

二、URL传递参数

1、传递参数,方式一

# 传递url参数
# URL映射传递参数,“/list/<list_id>”,<>括号内为传递的参数
# url传递参数,对应的函数也需要传递相同的参数,def list(list_id):
@app.route("/list/<list_id>")
def list(list_id):
    return "传递的list_id是:%s"%list_id

2、指定传递参数类型

# 指定传递参数数据类型,设置为整型(int)访问时传入参数必须时整数,否则找不到Not Fount
@app.route("/list/<int:list_id>")
def list(list_id):
    return "传递的list_id是:%s"%list_id

# 默认为string类型,接收没有任何斜杠“/\”的文本,如果访问:/list/asd/aaa则找不到 Not Fount
@app.route("/list/<list_id>")
def list(list_id):
    return "传递的list_id是:%s"%list_id

# fload:只接收浮点类型,如:/list/1.102
@app.route("/list/<float:list_id>")
def list(list_id):
    return "传递的list_id是:%s"%list_id

# path:和string相似,但是接收斜杠“/\”  如:/list/asd/dsa/ddd,可以传多级路径
@app.route("/list/<path:list_path>")
def list(list_path):
    return "传递的路径是:%s"%list_path
# uuid:只接受uuid字符串,其他字符串找不到
# 生成UUID字符串
import uuid
print(uuid.uuid1())

@app.route("/list/<uuid:list_path>")
def list(list_path):
    return "传递的uuid是:%s"%list_path

# any:可以指定多种路径
# 比如访问 /list/<id>  和  /user/<id>
# 输入http://127.0.0.1:5000/user/id  或 http://127.0.0.1:5000/list/id 都可以匹配到
@app.route("/<any(list,user):url_path>/<id>")
def list(url_path, id):
    if url_path == "list":
        return "%s,%s" % (url_path, id)
    else:
        return "%s,%s" % (url_path, id)

3、传递参数,方式二

# 第二种传递参数方式
# 比如:https://www.baidu.com/s?wd=哈哈哈
# ?wd=哈哈哈   这种方式

# flask需要导入request 
from flask import Flask, request

@app.route("/list")
def list():
#get方式获取参数
    wd = request.args.get("wd")
    return "参数:%s" % wd
# 访问http://127.0.0.1:5000/list?wd=1


# 传递多个参数 https://www.baidu.com/s?wd=哈哈哈&rsv_spt=1
@app.route("/list")
def list():
    wd = request.args.get("wd")
    rsv_spt = request.args.get("rsv_spt")
    return "参数:%s,%s" % (wd,rsv_spt)

三、Url_For

url_for使用

# 导入url_for
# 通过函数的名字字符串找到这个函数的URL
from flask import Flask, url_for

@app.route("/list/")
def list():
    wd = request.args.get("wd")
    return "参数:%s" % wd

@app.route("/login/")
def login():
    urls = url_for("list")
    return urls 

# 输出结果:/list/


# 修改@app.route("/list/")的URL路径,不影响url_for获取路径
# 通过函数反过来找URL
@app.route("/xxxx/<id>")
def list():
    wd = request.args.get("wd")
    return "参数:%s" % wd

@app.route("/login/")
def login():
    urls = url_for("list",id=1,count=2)
    return urls 

# 输出结果:/xxxx/1?count=2

四、URL显示请求方式(GET、POST)

# 限制URL访问方式,在@app.route()里面传入methods参数
# 默认url是GET方式
# 设置url只允许POST请求,可以传多个参数的
@app.route("/list/", methods=["POST"])
def list():
    return "POST请求"

# 访问只允许POST请求的URL是报错的   “Method Not Allowed”
# POST请求需要HTML提交表单


# 允许POST+GET请求
@app.route("/list/", methods=["POST","GET"])
def list():
    return "POST请求+GET请求"

HTML提交表单

//HTML
<!DOCTYPE html>
<html lang="zh-en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
</head>
<body>
//表单
<form action="" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit" value="提交">
</form>
</body>
</html>

Flask代码

# login视图
@app.route("/login/", methods=["POST", "GET"])
def login():
    if request.method == "GET":
        return render_template("one.html")
    elif request.method == "POST":
        username = request.form["username"]
        return "用户名:%s" % username

 

正文到此结束
评论

登录后才能发表评论 登录/注册

0评论
  • 还没有评论,快来抢沙发吧!