URL与函数的映射
前面我们使用app.route("/")
,其实我们也可以指定url的规则来进行更加详尽的映射。
@app.route("/list/<aid>/")
# 函数里面一般是接受尖括号里面的,默认是接受字符串
def index(aid):
return "string--第一个flask的第{}页".format(aid)
< >是固定写法,aid可以随意更改,variable默认是字符串,但是我们可以指定具体的数据类型@app.route("/list/<int:aid>/")
这里指定aid的数据类型是int
(整型),有以下几种数据类型:
- Sting: 接受没有/的字符串,单独的数字可以,字符串和数字混合也可以
- int: 整型,只接受整数
- float: 浮点型,指接受小数类型,整数不行
- path: 可以接受/,数字和字符串混合也可以
- uuid: uuid类型的字符串,号称全宇宙不会重复
- any: 指定多个路径
@app.route("/<any(blog,action):url_path>/")
url_path是前面的路径
如果我们不想定制子路径来传递参数,也可以是?name=xx
的形式来传递参数,怎么样接受这类参数呢?需要导入从flask中导入request,get方法request.args.get()
来接受,如果是post方法则使用request.form.get()
接受
通过函数名来获取URL
在平时的使用中,一般路由会发生变化,但是映射的函数名不会发生变化,为了我们以后更加方便的获取到函数对应的URL,可以使用url_for
方法。
url_for(“函数名”,[函数参数])
如果函数需要传入参数,就使用关键字传参的方式, 返回映射到函数的url。
末尾 / 的问题
app.route(/action/)
写代码是一般是要把最后的反斜杠写上,如果代码不写,我们在访问的时候写了就访问不到,如果代码写了,访问写不写都可以访问到
指定HTTP方法
app.route("/", methods=[])
route
其实还可以添加其他的参数,比如我们可以指定HTTP方法,默认是GET方法,添加了methods后就有列表里面的HTTP方法,如果只写一个post,就接受不了get方法
网页跳转和重定向
重定向分为永久重定向和暂时重定向, 重定向操作在网页上的体现就是从一个网站跳转到另外一个网站, 比如我们进入淘宝想要看我们的订单时,如果没有登录网页会跳转到登录页面,这类功能在用flask怎么实现呢?
- 永久重定向: HTTP状态码是301,一般是之前旧的网址不使用了,然后会重定向到新的网址,比如jingdong就是。
- 暂时重定向: HTTP状态码是302,一般是使用在需要登录时如果没有登录就会进行暂时的重定向到登录页面
使用redirect
和 url_for
相结合就可以完美实现
首先需要从flask导入redirect
一般我们要做一些逻辑判断,在什么情况下需要使用到重定向
return redirect(url_for("函数名"))
另外我们还可以加上code
参数来指定是永久的还是暂时的,如果不指定默认是暂时的。
return redirect(url_for("login"), code=301)
响应(Response)
视图函数不仅仅能返回字符串,还可以返回其他的数据类型,如元组,Response对象等。但是我们一般不会返回这些,我们后面会学到模板,返回的一般是模板文件。
返回一个字符串
return "juran"
返回一个元组
return "关于我们", 200
返回一个字典
return {"username": "xeioa"}
返回一个Response对象(第一个参数是字符串)
return Response("not found", status=404, content_type="text/html")
返回一个make_response对象
return make_response("关于我们")