Flask学习与项目实战2:url与视图函数映射、视图转url

简介: 访问book/list的url的时候发现是不可以访问的,因为我们返回额不是字典、元组等等,现在返回的是一个列表。TypeError: The view function did not return a valid response. The return type must be a string, dict, tuple, Response instance, or WSGI callable, but it was a list.

url与视图的函数映射


访问book/list的url的时候发现是不可以访问的,因为我们返回额不是字典、元组等等,现在返回的是一个列表。


TypeError: The view function did not return a valid response. The return type must be a string, dict, tuple, Response instance, or WSGI callable, but it was a list.

翻译:该视图没有返回一个可以响应的类型,如字符串、字典、wsgi可调用对象等。

jsonify

通过使用jsonify来进行返回这个json格式的东西。现在就可以将这个列表全部返回了。

传入动态的值进行改变视图

通过定义参数来进行参数。

url与函数映射总结


一个URL要与执行函数进行映射,使用的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则来进行更加详细的映射。


其中,尖括号是固定写法,语法为,variable默认的数据类型是字符串。如果需要指定类型,则要写成converter:variable,其中converter就是类型名称,可以有以下几种:


string: 默认的数据类型,接受没有任何斜杠/的字符串。

int: 整形

float: 浮点型。

path: 和string类似,但是可以传递斜杠/。

uuid: uuid类型的字符串。

any:可以指定多种路径,通过下面一个例子来进行说明:

@app.route('/<any(article,blog):url_path>/')
def item(url_path):
  return url_path

例子中,item这个函数可以接受两个URL,一个是/article/,另一个是/blog/。并且,一定要传url_path参数,当然这个url_path的名称可以随便。


如果不想定制子路径来传递参数,也可以通过传统的?=的形式来传递参数,例如:/article?id=xxx,这种情况下,可以通过request.args.get(‘id’)来获取id的值。如果是post方法,则可以通过request.form.get(‘id’)来进行获取。


构造url

一般通过一个URL就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个URL呢?url_for函数就可以帮我们实现这个功能。url_for()函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出现其他的参数,则会添加到URL的后面作为查询参数。


在公司的开发中,一般是会经常改变url的开发,但是函数名称可能不会改变。


所以需要构造url来进行开发。通过函数名称反转得到url地址。


通过构建URL的方式而选择直接在代码中拼URL的原因有两点:

1、将来如果修改了URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。

2、url_for()函数会转义一些特殊字符和unicode字符串,这些事情url_for会自动的帮我们搞定。如中文、空格、特殊字符等等进行编码转换。

也就是说当14行的url改变了,也不会影响我的url_for进行函数反转。仍然可以进行访问。

指定url末尾的斜杠

有些url的末尾是有斜杠的,但是有些没有,这实际上是两个不同的url。例如:

@app.route('/article/')
 def articles():
     return 
 @app.route('/article')
 def articles():
     return

如果访问第一个,url时就算不带斜杠,也会被重定向到第一个去。但是访问第二个时,如果私自加上了斜杠,会返回一个404错误。


指定http方法

在@app.route()中可以传入关键字methods,来限定访问的方式。


比如说有些定义的是post,但是你去get,会返回method not allowed。

1、如果只需要从服务器上获取数据,一般都是get请求。

2、如果前端需要发送数据给服务器,一般是post请求。

3、在@app.route上添加methods参数,这个参数是一个列表请求,可以传递添加多个。

页面跳转和重定向

重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面。比如用户访问了一个需要权限的页面,但是该用户当前并没有登录,因此应该给他重定向到登录页面。

在flask中,重定向是通过flask.redirect(location,code=302)这个函数来实现的,location表示需要重定向到的URL,应该配合之前讲的url_for()函数来使用,code表示采用哪个重定向,默认是302也即暂时性重定向,可以修改成301来实现永久性重定向。

from flask import Flask,url_for,redirect
 app = Flask(__name__)
 app.debug = True
 @app.route('/login/',methods=['GET','POST'])
 def login():
     return 'login page'
 @app.route('/profile/',methods=['GET','POST'])
 def profile():
     name = request.args.get('name')
     if not name:
     # 如果没有name,说明没有登录,重定向到登录页面
     # 同时使用url_for的方法来进行操作。
         return redirect(url_for('login'))
     else:
         return name
相关文章
|
安全 测试技术 网络安全
软件测试|测试平台开发-Flask 入门:URL组成部分详解
软件测试|测试平台开发-Flask 入门:URL组成部分详解
|
机器学习/深度学习 前端开发 JavaScript
源映射错误:Error: request failed with status 404 源 URL:http://localhost:8080/bootstrap/js/axios-0.18.0.js
源映射错误:Error: request failed with status 404 源 URL:http://localhost:8080/bootstrap/js/axios-0.18.0.js
209 0
源映射错误:Error: request failed with status 404 源 URL:http://localhost:8080/bootstrap/js/axios-0.18.0.js
|
11月前
|
数据安全/隐私保护 开发者 Ruby
【深度揭秘】Rails高手都不说的秘密:玩转URL映射,让你的Web应用瞬间高大上!
【8月更文挑战第31天】Rails中的路由机制负责将HTTP请求映射到应用内部逻辑。本文通过问答形式,结合示例代码详细解释了路由的作用、定义及使用方法。在`config/routes.rb`中定义的`resources :articles`会自动生成CRUD操作所需的标准RESTful路由。此外,还介绍了如何自定义非标准路由以及命名路由的生成与使用,帮助开发者更灵活地管理URL与应用逻辑间的映射关系,提升Rails应用的健壮性和可维护性。
97 0
|
9月前
|
缓存 JSON 关系型数据库
四、Flask 视图使用方法详细概述
四、Flask 视图使用方法详细概述
78 0
|
9月前
|
API 数据库 Python
二、学习 Flask之二
二、学习 Flask之二
113 0
|
12月前
|
运维 监控 Cloud Native
云原生数据仓库使用问题之是否有处理URL的函数
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
人工智能 前端开发 算法
Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程
Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程
228 4
|
Python
URL解析函数
URL解析函数。
170 1
|
JSON 数据处理 数据库
Flask视图函数与响应处理的艺术
【4月更文挑战第15天】本文探讨了Flask框架中视图函数和响应处理的原理与实践。视图函数通过`@app.route()`装饰器与URL关联,处理用户请求并返回响应。示例展示了如何从URL或请求对象获取参数,以及执行不同操作后返回响应。Flask支持字符串、元组和响应对象等多种响应类型。最佳实践包括保持视图函数简洁、使用模板引擎、处理异常和设置正确状态码。掌握这些技能能提升Web应用的用户体验和开发效率。
|
网络架构 Python
Flask路由与视图:构建你的第一个Web应用
【4月更文挑战第15天】Flask是Python的Web框架,其核心是路由和视图。路由通过`@app.route()`装饰器定义,将URL映射到视图函数。视图函数处理请求并返回响应。动态路由允许URL包含可变部分,如`&lt;username&gt;`,将参数传递给函数。本文通过示例展示了如何创建显示待办事项列表的Web应用,包括定义路由、视图、使用模板以及运行应用。这为基础的Flask应用开发提供了基础。