python中 对url处理函数

本文介绍了Python中URL编码的基本概念及其使用方法,包括quote、quote_plus和urlencode三个函数的具体应用,并通过实例展示了如何处理URL中的特殊字符及中文。

Python2 中urllib模块提供了一些函数操作URL本身。

一、quote(string[, safe])  

  它返回一个字符串,其中所有的特殊字符都已被对URL友好的字符所代替(就像用%7E代替了~)

  举例:假设接口测试中,要向一个url发送一串json格式的报文,服务器要接收时会对json数据进行解析,如果报文中有%@*?等特殊字符,很有可能服务器接收并解析后就不合法 出现空格等,我们可以使用这个函数将json数据编码。

  它对应的解码是unquote(string)。(结果跟网页版的urlencode是一样的)。


二、quote_plus(string[,safe])。

  功能和quote差不多,但用+代替空格。对应的解码函数是unquote_plus(string)

 

三、urlencode(query[,doseq]) 

  把映射(比如字典)或者包含两个元素的元组的序列——(key,value)这种形式——转换成URL格式编码的字符串,这样的字符串可以在CGI查询中使用。

  举例:当url地址含有中文,或者参数有中文的时候,url作为参数传递,需要处理一下。

>> data ={'No': '01', 'Name': '燕子'}
>> print(urlencode(data))

  结果:

>>Name=%E7%87%95%E5%AD%90&No=01

  注意 它对应的解码 是没有decode函数的,对应的还是unquote(string)

>>unquote("%E7%87%95%E5%AD%90")

  结果 >>燕子

 

 

(python3中,以上介绍的函数在urllib.parse模块中)

 

转载于:https://www.cnblogs.com/xiaobai-2017/p/8416815.html

<think>嗯,用户想了解Python中与URL相关的函数及其用法,特别是使用方法示例。首先,我需要回忆一下Python中处理URL的常用模块,比如urllib、Django的路由系统,可能还有Flask的相关函数。 首先,urllib模块是Python标准库里的,包含request、parse等子模块。比如urlparse可以用来解析URL,分解成协议、域名、路径等部分。应该举一个例子,用urllib.parse.urlparse来解析一个示例URL,比如'https://www.example.com/path?query=123',然后展示各个组成部分。 然后,urljoin函数也很实用,用于拼接基础URL和相对路径。例如,基础URL是'http://example.com/path/',相对路径是'subpage',合并后的结果应该是'http://example.com/path/subpage'。这需要示例代码说明。 接下来是Django框架中的path函数,用于URL路由配置。根据用户提供的引用[1],当Django匹配到路由时,会调用对应的视图函数,并传入HttpRequest对象和捕获的参数。需要给出一个简单的Django路由例子,比如path('article/<int:id>/', views.article_view),然后解释参数如何传递到视图函数。 然后是Flask的route装饰器,和Django类似,但语法不同。比如@app.route('/user/<username>'),然后视图函数接收username参数。这里需要示例代码,展示如何定义路由和处理参数。 另外,用户提到的引用[2]中的!r格式化,可能在示例中展示如何输出参数,比如在视图函数里使用repr形式记录日志,但这点可能和URL处理关系不大,不过可以适当提及。 还要注意用户要求行内数学表达式用$...$,但这个问题可能不需要数学公式,但如果有涉及到变量,比如路径参数,可能需要用$...$包裹,比如路径参数<int:id>中的id变量。 需要检查是否有独立公式需要用$$...$$,但URL处理可能不需要,所以可能这部分可以忽略,但确保其他LaTeX语法正确。 生成的相关问题可能需要包括不同框架的处理方法,比如Django vs Flask,或者如何处理查询参数,或者URL编码的问题。比如用户可能想知道如何获取查询字符串中的参数,这时候在Django中是request.GET,Flask是request.args,需要举例说明。 还需要确保回答结构清晰,分点说明每个函数或模块的用法,并给出示例代码。可能的结构是按模块分,比如urllib、Django、Flask,每个部分下介绍相关函数,示例代码,然后注意事项。 检查是否有遗漏的重要函数,比如requests库中的URL处理,但用户可能更关注标准库和Web框架内置的函数。所以可能不需要涉及第三方库,除非用户特别提到。 最后,确保引用标记正确,比如引用[^1]对应Django的path函数说明,引用[^2]可能用于格式化输出的示例,但需要看是否相关。在示例中,如果引用了用户提供的引用内容,需要在相应位置添加标记。</think>### PythonURL处理函数及用法详解 在Python中,URL处理涉及解析、构建和路由等功能,常用的模块包括标准库`urllib`和Web框架(如Django、Flask)的路由系统。以下是具体函数及示例: --- #### 1. **`urllib.parse`模块** 用于解析和构建URL,包含多个实用函数: - **`urlparse()`**:分解URL为协议、域名、路径等组件 ```python from urllib.parse import urlparse url = 'https://www.example.com/path?query=123#fragment' parsed = urlparse(url) print(parsed.scheme) # 输出: https print(parsed.netloc) # 输出: www.example.com print(parsed.path) # 输出: /path ``` - **`urljoin()`**:合并基础URL与相对路径 ```python from urllib.parse import urljoin base = 'http://example.com/path/' relative = 'subpage' full_url = urljoin(base, relative) # 输出: http://example.com/path/subpage ``` --- #### 2. **Django框架的`path()`函数** 用于定义URL路由规则,将请求映射到视图函数[^1]: ```python # urls.py from django.urls import path from . import views urlpatterns = [ path('article/<int:id>/', views.article_view, name='article-detail'), ] # views.py def article_view(request, id): # 通过id查询文章数据 return HttpResponse(f"Article ID: {id}") ``` - **参数说明**:`<int:id>`表示捕获整数类型的`id`参数,并传递给视图函数。 --- #### 3. **Flask框架的`route()`装饰器** 通过装饰器定义路由规则,支持动态参数: ```python from flask import Flask app = Flask(__name__) @app.route('/user/<username>') def show_user_profile(username): return f'Username: {username}' @app.route('/post/<int:post_id>') def show_post(post_id): return f'Post ID: {post_id}' ``` - **动态参数**:`<username>`捕获字符串,`<int:post_id>`限制为整数。 --- #### 4. **处理查询参数** 在Web框架中获取URL的查询参数(如`?key=value`): - **Django**:通过`request.GET`字典 ```python def search(request): query = request.GET.get('q', '') # 获取参数q的值 return HttpResponse(f"Search query: {query}") ``` - **Flask**:通过`request.args`字典 ```python from flask import request @app.route('/search') def search(): query = request.args.get('q', '') return f"Search query: {query}" ``` --- ### 注意事项 - **URL编码**:使用`urllib.parse.quote()`处理特殊字符 ```python from urllib.parse import quote encoded = quote('Hello World!') # 输出: Hello%20World%21 ``` - **格式化输出**:使用`!r`确保字符串可安全拼接(参考示例) ```python print(f"URL: {url!r}") # 保留引号,便于调试 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值