flask 中的链接管理器

今天又开始了flask的学习,编程浪子师傅 强调:

1. 链接管理器的重要性,并要求一定要掌握和使用 链接管理器

2. 当更换服务器框架的时候,链接管理器 可以帮我们省下很多时间。

问题1 : 链接管理器究竟是什么?

Flask中的  链接管理器  是一个用于 管理URL路由视图函数之间映射关系工具。它允许开发者定义 不同的 URL规则,并将它们与相应的 视图函数 关联起来。链接管理器可以帮助开发者更好地 组织 和 管理 应用程序 的 路由,使得 代码 更加清晰 易于维护

下面是一个使用Flask链接管理器的简单示例:

from flask import Flask

app = Flask(__name__)

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

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

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

在上面的示例中,我们使用@app.route()装饰器来定义了两个路由规则。@app.route('/')表示根路径,对应的视图函数是index()@app.route('/about')表示/about路径,对应的视图函数是about()。当用户访问对应的URL时,Flask会自动调用相应的视图函数并返回结果。

链接管理器  还支持  动态路由 ,可以通过在  路由规则中  使用  变量   来实现。例如:

@app.route('/user/')
def user_profile(username):
    return f'Hello, {username}!'

在上面的示例中,是一个动态变量,可以匹配任意字符串,并将其作为参数传递给user_profile()视图函数。

总结一下,Flask中的 链接管理器 是一个用于定义 URL路由规则视图函数之间映射关系工具,它可以帮助开发者 更好地组织管理应用程序的路由


下面再看一下编程浪子所说的 链接管理器 static/js/common.js

var common_ops = {
    init:function(){
        this.eventBind();
        this.setMenuIconHighLight();
    },

...,

 buildUrl:function( path, params){
        var url = ""+path;
        var _paramUrl = "";
        if( params ){
            _paramUrl = Object.keys( params).map( function (k){
                return [encodeURIComponent(k), encodeURIComponent( params[k])].join("=");
            }).join("&");
            _paramUrl = "?" +_paramUrl;
        }
        return url + _paramUrl;
    },
    buildPicUrl:function( img_key){
        var domain = $(".hidden_layout_wrap input[name=domain]").val();
        var prefix_url = $(".hidden_layout_wrap input[name=prefix_url]").val();
        return domain + prefix_url + img_key;
    }

};

该函数接受两个参数:pathparamspath是URL的路径部分,params是一个包含参数的对象。函数首先将path赋值给url变量,然后初始化_paramUrl为空字符串。

接下来,函数检查params是否存在。如果存在,函数使用Object.keys(params)获取params对象的所有键,并使用map循环方法对每个键进行处理。在处理过程中,函数使用encodeURIComponent方法对键和对应的值进行编码,并使用join("=")将它们连接起来。最后,使用join("&")将所有参数连接起来,并将结果赋值给_paramUrl

最后,函数将url_paramUrl连接起来,并返回构建好的URL

encodeURIComponent( params[k] ) 中的params[k] 是 k的值value 值

return返回的params值:

params = {
    a: "b",
    c: "d"
  };

 拼接结果是一个数组再用.join("&"):   a=b&c=d

然后再static/js/user/login.js中使用ajax使用

            $.ajax({
                url:common_ops.buildUrl("/user/login"),
                    type:'POST',
                    data:{'login_name':login_name, 'login_pwd':login_pwd},
                    dataType:'json',
                    success:function(res){
                        btn_target.removeClass("disabled");
                        var callback = null;
                        if(res.code == 200){
                            callback = function(){
                                window.location.href = common_ops.buildUrl('/');
                            }
                        }
                        common_ops.alert( res.msg, callback);
                }
            });

问题2: 中 的?作用是什么? 在ajax 调用buildUrl中并没有给params赋值,buildUrl是怎么完成if判断的 ?

在给定的代码中,?是用作URL中的查询字符串的分隔符。它用于将URL的路径和查询参数分开。在buildUrl函数中,如果params存在,则会将其转换为查询字符串,并将其添加到URL的末尾。如果params不存在,则不会添加查询字符串。

在ajax调用中,buildUrl函数没有给params赋值,这是因为在这个特定的例子中,params参数可能是可选的。如果没有提供params参数,buildUrl函数将返回一个不带查询字符串的URL。

问题3: 本段代码中 返回的_paramUrl 值是什么

变量_paramUrl的值是根据params对象构建的查询字符串。它将params对象的键和值进行URL编码,并使用等号和连接符&连接起来。最后,将查询字符串添加到url后面。所以_paramUrl的值是类似于?login_name=xxx&login_pwd=xxx的字符串。

问题4: 返回的_paramUrl 值是什么? return的 url + _paramUrl的值又是什么?

_paramUrl的值是一个字符串,它包含了通过params参数构建的URL查询参数。_paramUrl的格式是key1=value1&key2=value2&...其中key1value1params中的第一个键值对,key2value2params中的第二个键值对,以此类推。_paramUrl的值将作为URL的查询参数部分。

url + _paramUrl的值是将url_paramUrl拼接在一起形成的完整URL。其中,url是一个字符串,表示请求的路径,_paramUrl是一个字符串,表示URL的查询参数部分。拼接后的完整URL将用于发送AJAX请求。


ajax()相关的剖析:

$.ajax()函数是jQuery中用于发送异步请求的方法。其中,url参数指定请求的URL地址,type参数指定请求的类型(POST),data参数指定请求的数据(包括login_namelogin_pwd),dataType参数指定服务器返回的数据类型(JSON)。该方法会发送一个POST请求到指定的URL,并将login_namelogin_pwd作为请求的参数。请求成功后,会执行success回调函数,根据服务器返回的数据进行相应的处理。

详细解释如下:

  • url:common_ops.buildUrl("/user/login"):构建请求的URL,使用了common_ops.buildUrl()方法,将"/user/login"作为路径参数传入,该方法会将路径和参数拼接成完整的URL。
  • type:'POST':指定请求的类型为POST。
  • data:{'login_name':login_name, 'login_pwd':login_pwd}:指定请求的数据,包括login_namelogin_pwd两个参数,其值分别为变量login_namelogin_pwd的值。
  • dataType:'json':指定服务器返回的数据类型为JSON。


以及 /common/libs/UrlManager.py

# -*- coding: utf-8 -*-
import time
from application import app

class UrlManager(object):
    def __init__(self):
        pass

    @staticmethod
    def buildUrl( path ):
        return path

    @staticmethod
    #@staticmethod是一个装饰器,用于将类中的方法转换为静态方法。
    # 静态方法不需要访问类或实例的任何属性,因此可以直接从类中调用,而无需创建类的实例。
    def buildStaticUrl(path):
        ver = "%s"%( 22222222 )
        path =  "/static" + path + "?ver=" + ver
        return UrlManager.buildUrl( path )


    @staticmethod
    def buildImageUrl(path):
        app_config = app.config['APP']
        url = app_config['domain'] + app.config['UPLOAD']['prefix_url'] + path
        return url

你可能感兴趣的:(flask,python,后端)