python flask学习第2天 URL中两种方式传参
新创建项目

自己写个url映射到自定义的视图函数



在url中传递参数
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello World!'
#自定义访问返回结果
@app.route('/list/')
def article_list():
    return 'article list'
#带参数传递
@app.route('/article/<id>/')
def article(id):
    return '%s article' % id
if __name__ == '__main__':
    app.run()
运行访问

其中<id>,尖括号是固定写法,语法为<variable>,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_for):
一般我们通过一个URL就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个URL呢?url_for函数就可以帮我们实现这个功能。url_for()函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出现其他的参数,则会添加到URL的后面作为查询参数。
通过构建URL的方式而选择直接在代码中拼URL的原因有两点:
- 将来如果修改了
URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。 url_for()函数会转义一些特殊字符和unicode字符串,这些事情url_for会自动的帮我们搞定。

from flask import Flask,url_for
app = Flask(__name__)
@app.route('/')
def hello_world():
    #将my_list函数名以字符串方式传到url_for里面
    print(url_for('my_list'))
    return 'Hello World!'
@app.route('/list/')
def my_list():
    return 'my_list'
if __name__ == '__main__':
    app.run()
运行,访问浏览器查看结果

在控制台打印出了如下结果:

在url_for添加参数,会自动添加到url后面

以后不管你原来的url如何修改,我都能通过url_for返回你修改过的正确url
# url_for笔记:
### `url_for`的基本使用:
`url_for`第一个参数,应该是视图函数的名字的字符串。后面的参数就是传递给`url`。
如果传递的参数之前在`url`中已经定义了,那么这个参数就会被当成`path`的形式给
`url`。如果这个参数之前没有在`url`中定义,那么将变成查询字符串的形式放到`url`中。
```python
@app.route('/post/list/<page>/')
def my_list(page):
    return 'my list'
print(url_for('my_list',page=1,count=2))
# 构建出来的url:/my_list/1/?count=2
```
### 为什么需要`url_for`:
1. 将来如果修改了`URL`,但没有修改该URL对应的函数名,就不用到处去替换URL了。
2. `url_for`会自动的处理那些特殊的字符,不需要手动去处理。
    ```python
    url = url_for('login',next='/')
    # 会自动的将/编码,不需要手动去处理。
    # url=/login/?next=%2F
    ```
### 强烈建议以后在使用url的时候,使用`url_for`来反转url。
python flask学习第2天 URL中两种方式传参的更多相关文章
- python利用mongodb上传图片数据 : GridFS 与 bson两种方式
		
利用mongodb保存图片通常有两种方法,一种是将图片数据转化为二进制作为字典的键值对进行保存,另一种是利用mongodb提供的GridFS进行保存,两者各有利弊.性能方面的优劣未曾测试,无法进行评价 ...
 - python 之 并发编程(开启子进程的两种方式,进程对象的属性)
		
第九章并发编程 同一个程序执行多次是多个进程 import time import os  print('爹是:',os.getppid()) #父进程PID,(pycharm) print('me ...
 - 使用python读取配置文件并从mysql数据库中获取数据进行传参(基于Httprunner)
		
最近在使用httprunner进行接口测试,在传参时,用到了三种方法:(1)从csv文件中获取:(2)在config中声名然后进行引用:(3)从函数中获取.在测试过程中,往往有些参数是需要从数据库中获 ...
 - Splinter学习--初探3,两种方式登录QQ邮箱
		
目前,qq邮箱的登录方式有: 1.利用账号.密码登录 2.快捷登录,前提是你本地已有qq账号登录中 和前面一样,还是先到qq邮箱登录首页,审查页面元素,找到我们进行登录操作所相关的链接.按钮或是输入框 ...
 - android中两种方式打开网页
		
一.你要打开一个网页你可以自己写一个webview,在自己的程序中就可以打开. wv = (WebView) findViewById(R.id.webView1); wv.getSettings() ...
 - C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
		
使用gmtime函数或localtime函数将time_t类型的时间日期转换为structtm类型: 使用time函数返回的是一个long值,该值对用户的意义不大,一般不能根据其值确定具体的年.月.日 ...
 - Pytho中两种方式导入模块的差别
		
1.使用import module,只是把模块导入,访问模块中的函数名或者是属性是必须使用点运算符(.)来访问,否则直接访问会提示找不到这些函数或者属性. 2.使用from numpy import ...
 - Linux学习笔记21——线程同步的两种方式
		
一 用信号量同步 1 信号量函数的名字都以sem_开头,线程中使用的基本信号量函数有4个 2 创建信号量 #include<semaphore.h> int sem_init(sem_t ...
 - hadoop中两种上传文件方式
		
记录如何将本地文件上传至HDFS中 前提是已经启动了hadoop成功(nodedate都成功启动) ①先切换到HDFS用户 ②创建一个user件夹 bin/hdfs dfs -mkdir /user ...
 
随机推荐
- 总结spring
			
通过对spring的学习 什么是spring Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是 ...
 - textarea存起来的数据把空格也存起来
			
textarea的属性wrap="hard"可以把换行的内容也存起来. <html> <head> <title>这是一个小测试</tit ...
 - CSS改变placeholder的颜色
			
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #a1a1a1; } ::-moz-placeholder { /* Mozilla ...
 - (九)JavaScript之【JS函数(定义、参数、调用、【闭包】、call(),apply())】[较深,胆小勿进]
			
一].定义: /** * 函数表达式 * * Function() 构造函数 * * 函数提升(Hoisting) * JavaScript默认将当前作用域提升到前面去 * Hoisting应用在变量 ...
 - C++基础--sizeof和strlen的区别
			
首先,来运行一段程序: #include "stdafx.h" #include <stdio.h> #include <string.h> int mai ...
 - C++常用字符串分割方法(转)
			
1.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串, ...
 - springboot项目搭建:结构和入门程序
			
Spring Boot 推荐目录结构 代码层的结构 根目录:com.springboot 1.工程启动类(ApplicationServer.java)置于com.springboot.build包下 ...
 - NFS笔记(一)NFS服务器工作原理及详细配置
			
一.NFS工作原理 1.什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不同的操作系统可以共享彼此的文件. NFS服务器可以让P ...
 - jquery中$.ajax()方法使用详解
			
1.url 说明:发送请求的地址(默认为当前页面),要求是String类型的参数,比如是.net下,"~wexin(控制器)/getweinxinmenu(动作)", 2.type ...
 - 笨办法学Python(一)
			
习题 1: 第一个程序 你应该在练习 0 中花了不少的时间,学会了如何安装文本编辑器.运行文本编辑器.以及如何运行命令行终端,而且你已经花时间熟悉了这些工具.请不要跳过前一个练习的内容直接进行下面的内 ...