Flask路由+视图补充

一、路由设置的两种方法

1、装饰器

@app.route(‘/index/‘)
def index():
    return ‘Hello World!‘

2、源码

route->decorator->add_url_rule(rule, endpoint, f, **options)

def index():
    return ‘Hello World!‘

app.add_url_rule(‘/index/‘, None, index)

注意:endpoint的值不能一致

二、参数

rule                            URL规则
view_func                   视图函数名称
endpoint=None             名称,用于反向生成URL,即: url_for(‘名称‘)
methods=None             允许的请求方式,如:["GET","POST"]
strict_slashes=None      对URL最后的 / 符号是否严格要求,
redirect_to=None          重定向到指定地址

defaults=None              默认值,当URL中无参数,函数需要参数时,使用defaults={‘k‘:‘v‘}为函数提供参数
subdomain=None,          子域名访问

endpoint、metods、前面有介绍

1、redirect_to 重定向

当访问rule时,重定向到目标网址

作用:网站升级维护时,用户通过此方法不用知道新网站的地址,就可以从旧网址跳到指定的网址

from flask import Flask

app = Flask(__name__)

@app.route(‘/index/‘, redirect_to=‘https://www.bootcss.com/‘)
def index():
    return ‘Hello World!‘

# app.add_url_rule(‘/index/‘, None, index)

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

2、strict_slashes

strict_slashes=Flask    # 对url最后一个斜杠要求不严

3、子域名(了解)

from flask import Flask

app = Flask(import_name=__name__)
app.config[‘SERVER_NAME‘] = ‘api.com:5000‘
"""
127.0.0.1   api.com
127.0.0.1   web.api.com
127.0.0.1   admin.api.com

"""

# http://admin.api.com:5000/admin
@app.route("/admin", subdomain="admin")
def admin_index():
    return "admin.your-domain.tld"

# http://web.api.com:5000/
@app.route("/", subdomain="web")
def web_index():
    return "web.your-domain.tld"

# http://sdsdf.api.com:5000/
# http://sdfsdf.api.com:5000/
# http://asdf.api.com:5000/

@app.route("/dynamic", subdomain="<username>")
def username_index(username):
    """Dynamic subdomains are also supported
    Try going to user1.your-domain.tld/dynamic"""
    return username + ".your-domain.tld"

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

三、CBV(几乎不用)

from functools import wraps
from flask import Flask, views
app = Flask(__name__)

# 4
def wrapper(func):
    @wraps(func)
    def inner(*args, **kwargs):
        return func(*args, **kwargs)

    return inner

# 1
class UserView(views.MethodView):
    # 3
    methods = [‘GET‘]
    decorators = [wrapper]

    def get(self, *args, **kwargs):
        return ‘GET‘

    def post(self, *args, **kwargs):
        return ‘POST‘

# 2
app.add_url_rule(‘/user/‘, None, UserView.as_view(‘endpoint‘))

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

四、自定义正则

from flask import Flask,url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)

# 步骤一:定制类
class RegexConverter(BaseConverter):
    """
    自定义URL匹配正则表达式
    """

    def __init__(self, map, regex):
        super(RegexConverter, self).__init__(map)
        self.regex = regex

    def to_python(self, value):
        """
        路由匹配时,匹配成功后传递给视图函数中参数的值
        :param value:
        :return:
        """
        return int(value)

    def to_url(self, value):
        """
        使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
        :param value:
        :return:
        """
        val = super(RegexConverter, self).to_url(value)
        return val

# 步骤二:添加到转换器
app.url_map.converters[‘reg‘] = RegexConverter

"""
1. 用户发送请求
2. flask内部进行正则匹配
3. 调用to_python(正则匹配的结果)方法
4. to_python方法的返回值会交给视图函数的参数

"""

# 步骤三:使用自定义正则
@app.route(‘/index/<reg("\d+"):nid>/‘)
def index(nid):
    print(nid, type(nid))   # 4 <class ‘int‘>
    print(url_for(‘index‘, nid=110))    # /index/110/
    return "index"

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

原文地址:https://www.cnblogs.com/wt7018/p/11601175.html

时间: 2024-11-09 06:25:49

Flask路由+视图补充的相关文章

flask路由和视图和cookie

什么是路由 """ 客户端(例如web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例. 程序实例需要知道对每个URL请求运行那些代码,所以保存了一个URL到Python函数的映射关系. 处理URL和函数之间关系的程序称之为路由. """ 看个简单完整的的例子 #!/usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask app = Flas

77-drf视图家族及路由层补充

目录 视图家族 一.views视图类 1.APIView类 2.GenericAPIView类(generics中) 二.mixins类:视图辅助工具 1.RetrieveModelMixin 2.ListModelMixin 3.CreateModelMixin 4.UpdateModelMixin 5.DestroyModelMixin 三.generics类:包含辅助工具的通用视图类 四.viewsets视图集 1.作用 2.如何使用 3.ModelViewSet的不合理之处及解决方法 路

【Flask路由系统】 -- 2019-08-11 19:11:52

目录 动态路由参数 路由参数 methods endpoint defaults strict_slashes redirect_to subdomain 原文: http://106.13.73.98/__/112/ @(Flask路由) *** 动态路由参数 三种用法 <int:xx> 要求输入的url必须是可转换为int类型的 <string:xx> 要求输入的url必须是可转换为String类型 <xx> 默认使用的是可转换为String类型的 开始测试 代码如

【Flask路由系统】 &#538110;

目录 动态路由参数 路由参数 methods endpoint defaults strict_slashes redirect_to subdomain 原文: http://blog.gqylpy.com/gqy/337 "@(Flask路由) *** 动态路由参数 三种用法 <int:xx> 要求输入的url必须是可转换为int类型的 <string:xx> 要求输入的url必须是可转换为String类型 <xx> 默认使用的是可转换为String类型的

Laravel教程 二:路由,视图,控制器工作流程

Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel的神奇世界了,主要是讲解Laravel的Router,Views,Controllers的工作流程,目的也就是让大家明白Laravel在处理一个get请求的时候是如何工作的. 在开始之前,我们首先得将我们的服务器启动起来,如果你使用Laravel的artisan,你可以直接: p

Flask的路由,视图和相关配置

第一个flask程序 from flask import Flask Flask函数接收一个参数__name__,它会指向程序所在的包 app = Flask(__name__) 装饰器的作用是将路由映射到视图函数 index,在程序运行过程中,程序实例中会使用 url_map 将装饰器路由和视图的对应关系保存起来 @app.route('/') def index(): return 'Hello World' Flask应用程序实例的 run 方法 启动 WEB 服务器 if __name_

flask如何设置模板语言Jinjia?如何查看路由视图函数映射?

首先flask的模板和静态文件命名必须是确定的templates和static pycharm的模板语言设置

Flask 给视图函数增加装饰器

在@app.route的情况下增加装饰器的写法: 1 from flask import Flask,request,render_template,redirect,session,url_for,views 2 from flask import render_template 3 4 app = Flask(__name__) #实例化flask对象 5 app.debug = True #能够随时更改自动重启,不加的话每次更改代码需要手动重启 6 app.config['SECRET_K

Flask路由

@app.route() methods:当前url地址,允许访问的请求方式 @app.route("/info", methods=["GET", "POST"]) def student_info(): stu_id = int(request.args.get("id")) return f"{stu_id}" # Python3.6的新特性 f"{变量名}" endpoint:反