先和大家说一下常用的请求方法
get
:只是从服务器获取数据,不会对服务器的状态或数据产生任何影响;
get
方法的参数是放在URL中传递的。
post
:会对服务器的状态或数据产生影响;通过body
形式进行数据传递。
现在如果我们希望只能通过get
方法才能访问一个url(或者说调用一个函数)该怎么办呢?看下面的代码:
# coding: utf-8
from flask import Flask
from werkzeug.routing import BaseConverter
import flask
app = Flask(__name__) # type: Flask
app.debug = True
# 根目录
@app.route('/', methods=['GET'])
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
上面在app.route()
中传入了一个methods
参数,传的参数是数组(或元组),这样就对hello_world函数的访问进行了限制——只能使用get
方法才能请求到。
或者你也可以在methods
方法里传入两个参数methods=['GET', 'POST']
这样该方法就可以通过两种方式请求到了。如果不传递methods
参数,那么默认是只有GET
方法的。
URL的唯一性
之前已经有朋友问到了,就是@app.route('/list/')
这个装饰器里list
后面的/
是不是必须传的,其实大家可以自己试一下,现在我们新定义一个函数:
@app.route('/list')
def mylist():
return u'没有/的list'
然后访问该函数,可以看到当我们访问127.0.0.1/list/
时是访问不到的:
但是我们访问127.0.0.1/list
是可以访问到的:
但是如果我们这样写:
@app.route('/list/')
def mylist():
return u'有/的list'
我们访问127.0.0.1/list
,我们发现也是可以访问到的,因为浏览器自动给你加上/
(重定向)了。所以建议大家在定义url的时候都加上后面的斜杠/。
还有一点需要和大家说明,就是大家如果修改端口号app.run(port=2000)
这种操作时,port
后面传的端口号必须是Integer类型的,就是说必须是整型,这样传app.run(port='2000')
是不对的。
请关注公众号:自动化测试实战,查看清晰排版