Flask | Flask基础 - URL与视图

简介: Flask | Flask基础 - URL与视图

URL与函数的映射

从新建的文件,我们已经看到,一个URL要与执行函数进行映射,使用的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则来进行更加详细的映射,比如现在要映射一个文章详情的URL,文章详情的URL是/article/id/,id有可能为1、2、3…,那么可以通过以下方式:

@app.route('/article/<id>/')
def article(id):
    return '%s article detail' % id

其中,尖括号是固定写法,语法为<variable_name>variable_name默认的数据类型是字符串。如果需要指定类型,则要写成<converter:variable_name>,其中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_for)

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

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

  • 将来如果修改了URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。
  • url_for()函数会转义特殊字符和Unicode数据,这些工作都不需要我们自己处理。

自定义URL转换器

刚刚在URL映射的时候,我们看到了Flask内置了几种数据类型的转换器,比如有int/string等。如果Flask内置的转换器不能满足你的需求,此时你可以自定义转换器。自定义转换器,需要满足以下几个条件:

  • 转换器是一个类,且必须继承自werkzeug.routing.BaseConverter
  • 在转换器类中,实现to_python(self,value)方法,这个方法的返回值,将会传递到view函数中作为参数。
  • 在转换器类中,实现to_url(self,values)方法,这个方法的返回值,将会在调用url_for函数的时候生成符合要求的URL形式。

URL唯一

Flask的URL规则是基于Werkzeug的路由模块。这个模块的思想是基于Apache以及更早的HTTP服务器的主张,希望保证优雅且唯一的URL。

@app.route('/projects/')
def projects():
    return 'project page'

上述例子中,当访问一个结尾不带斜线的URL会被重定向到带斜线的URL上去。这样有助于避免搜索引擎搜索同一个页面两次。

@app.route('/about')
def about():
    return 'about page'

以上例子中,当访问带斜线的URL(\/about\/)会产生一个404("Not Found")错误。

指定HTTP方法

在@app.route()中可以传入一个关键字参数methods来指定本方法支持的HTTP方法,默认只响应GET请求,看以下例子:

@app.route('/login/',methods=['GET','POST'])
def login():
    return 'login'

以上装饰器将让login的URL既能支持GET又能支持POST。

页面跳转和重定向

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

  • 永久性重定向:http的状态码是301,多用于旧网址被废弃了要转到一个新的网址确保用户的访问,最经典的就是京东网站,你输入www.jingdong.com的时候,会被重定向到www.jd.com,因为jingdong.com这个网址已经被废弃了,被改成jd.com,所以这种情况下应该用永久重定向。
  • 暂时性重定向:http的状态码是302,表示页面的暂时性跳转。比如访问一个需要权限的网址,如果当前用户没有登录,应该重定向到登录页面,这种情况下,应该用暂时性重定向。

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

以下来看一个例子,关于在flask中怎么使用重定向:

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,说明没有登录,重定向到登录页面
         return redirect(url_for('login'))
     else:
         return name
相关文章
|
安全 测试技术 网络安全
软件测试|测试平台开发-Flask 入门:URL组成部分详解
软件测试|测试平台开发-Flask 入门:URL组成部分详解
|
2月前
|
缓存 JSON 关系型数据库
四、Flask 视图使用方法详细概述
四、Flask 视图使用方法详细概述
29 0
|
7月前
|
JSON 数据处理 数据库
Flask视图函数与响应处理的艺术
【4月更文挑战第15天】本文探讨了Flask框架中视图函数和响应处理的原理与实践。视图函数通过`@app.route()`装饰器与URL关联,处理用户请求并返回响应。示例展示了如何从URL或请求对象获取参数,以及执行不同操作后返回响应。Flask支持字符串、元组和响应对象等多种响应类型。最佳实践包括保持视图函数简洁、使用模板引擎、处理异常和设置正确状态码。掌握这些技能能提升Web应用的用户体验和开发效率。
|
7月前
|
网络架构 Python
Flask路由与视图:构建你的第一个Web应用
【4月更文挑战第15天】Flask是Python的Web框架,其核心是路由和视图。路由通过`@app.route()`装饰器定义,将URL映射到视图函数。视图函数处理请求并返回响应。动态路由允许URL包含可变部分,如`&lt;username&gt;`,将参数传递给函数。本文通过示例展示了如何创建显示待办事项列表的Web应用,包括定义路由、视图、使用模板以及运行应用。这为基础的Flask应用开发提供了基础。
|
Python
【flask】URL和视图映射
【flask】URL和视图映射
64 0
|
JSON 数据库 数据格式
[Python]Django 视图(View)和URL 与 模板(Template)
[Python]Django 视图(View)和URL 与 模板(Template)
|
数据可视化 Python
Python Flask Echarts数据可视化图表实战晋级笔记(3)Blueprint蓝图解决单文件url分发
Python Flask Echarts数据可视化图表实战晋级笔记(3)Blueprint蓝图解决单文件url分发
105 0
|
29天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
1月前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
79 2