当访问一个网站时,浏览人的浏览器会向网站发送请求,浏览器接收并显示网页前,网页服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器请求。
常见的有以下几个状态码
1.200:请求成功
2.302:重定向
3.404:请求的资源(网页等)不存在
4.500:内部服务器错误,写的代码有问题,
(更具体的可见参考中的链接1:(23条消息) http response code(HTTP状态码对照表)_t_332741160的专栏-CSDN博客)
”A decorator that is used to register a view function for a given URL rule.This is the same thing as add_url_rule()but is intended for decorator usage.“(关于装饰器这里不做讲解,但是还是要了解下 装饰器其实是对add_url_rule()的调用)
@app.route('/test')
def index():
return ‘hh’
代码中的/test就是URL rule。
在路由中允许出现的变量即转换器接收的类型有:string,int,float,path(类似于string但可以包含斜杠),uuid
@app.route('/getcity/') #key是个变量名,默认是字符串类型,也可以以这种形式指定类型
def index5(key):
return data.get(key)
@app.route('/add/')
def add(num):
result=num+10
return str(result)
@app.route('/add1/')
def add(num):
result=num+10
return str(result)
**需要注意下,int和float实例代码中,return都使用了str类型转换,相信原因见下边
@app.route('/index/') #type(p)的话是string,适用于是路径的情况
def get_path(p):
print(p)
return p
universally Unique Identifier
通用唯一识别码,是一种软件建构的的标准,uuid不能人工生成,是通过算法计算出的唯一id,不能随便指定一个字符串,所以会404。
@app.route('/idtest/')
def get_path(id):
print(type(id))
return '获取唯一标识码'
#如果是随便人为编的UUID码,会报错的,必须传uuid格式。
一个获取UUID码的示例
import uuid
uid=uuid.uuid4()
print(uid)
print(type(uid))
uid1=str(uid)
uid1=uid1.replace('-','')
print(uid1)
#可以通过这种方法去掉uid中的-
view函数只能return string,dict,tuple,respnse instance or WSGI callable,不能是int,故上边示例中如果不加str转换就会报错
@app.route('/index1')
def index1():
return '北京'
**这里留一个小小的疑问,content-Type为什么不是string而是text/html
@app.route('/index')
def index():
return {'a':'北京','b':'南京','c':'上海'}
#在这里加起不到网页端改变字体格式的作用。因为是json格式。只有text/html类型的话可以
包含两个或者三个元素,分别是body内容,status状态码,headers响应头(字典类型)
@app.route('/testtuple')
def testtuple():
return tuple('wao','hh')
#这样是会报错的
@app.route('/testtuple')
def testtuple():
return 'wao',200
#状态码是可以指定的,如:402
@app.route('/test')
def test():
return 'wao,not found ei',404
app.run(port=8000)
即关于返回元组怎么返回是规定好的,且返回的顺序不能改变。
The response object that is used by default in Flask. Works like theresponse object from Werkzeug but is set to have an HTML mimetype by default.
from flask import Response
@app.route('/index3')
def index3():
return Response('resonse实例测试')
app.run(port=8000)
可以观察到,貌似跟用string没什么区别,但实际上响应都需要传入response,当用字符串时,其实底层自动将字符串传入了resonse对象再扔出来(这也就是用字符串返回的类型是text/html的原因,因为response对象默认类型就是text/html);
也就是说其实view函数是需要返回response对象的,对于string、dict、tuple,flask会自动帮你封装好。
以下两条规则的不同之处在于是否使用尾部斜杠:
[email protected]('/test')
def
[email protected]('/test1/')
def
当IP+/test访问1时可以成功,但若IP+/test/访问1时就会404;
当IP+/test1/访问2时可以成功,IP+/test1也可以成功;即IP+/test1时自动重定向了,即自动在尾部加上一个斜杠。
也就是说少了可以自动加,多了就错
如果是这样:
@app.route('/test/')
def
@app.route('/test')
def
当IP+/test访问时,会得到第一个定义对应的结果,这是因为路由按照定义顺序是从上往下找的,找到了就不会再进下一个了。
综上,在写代码的时候尽量不要重复,也尽量不用/test/引起重定向
参考:
(23条消息) http response code(HTTP状态码对照表)_t_332741160的专栏-CSDN博客