Python Flask框架(3)

HTTP状态码

当访问一个网站时,浏览人的浏览器会向网站发送请求,浏览器接收并显示网页前,网页服务器会返回一个包含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

string

@app.route('/getcity/') #key是个变量名,默认是字符串类型,也可以以这种形式指定类型
def index5(key):
    return data.get(key)

Python Flask框架(3)_第1张图片

int

@app.route('/add/') 
def add(num):
    result=num+10
    return str(result)

float

@app.route('/add1/') 
def add(num):
    result=num+10
    return str(result)

**需要注意下,int和float实例代码中,return都使用了str类型转换,相信原因见下边

path

@app.route('/index/')   #type(p)的话是string,适用于是路径的情况
def get_path(p):
    print(p)
    return p

UUID

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中的-

Python Flask框架(3)_第2张图片

return支持的类型

view函数只能return string,dict,tuple,respnse instance or WSGI callable,不能是int,故上边示例中如果不加str转换就会报错

string

@app.route('/index1')
def index1():
    return '

北京

'

Python Flask框架(3)_第3张图片
**这里留一个小小的疑问,content-Type为什么不是string而是text/html

dict

@app.route('/index')
def index():
    return {'a':'

北京

','b':'南京','c':'上海'} #在这里加

起不到网页端改变字体格式的作用。因为是json格式。只有text/html类型的话可以

Python Flask框架(3)_第4张图片

tuple

包含两个或者三个元素,分别是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)  

Python Flask框架(3)_第5张图片

即关于返回元组怎么返回是规定好的,且返回的顺序不能改变。

Resonse

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)

Python Flask框架(3)_第6张图片
可以观察到,貌似跟用string没什么区别,但实际上响应都需要传入response,当用字符串时,其实底层自动将字符串传入了resonse对象再扔出来(这也就是用字符串返回的类型是text/html的原因,因为response对象默认类型就是text/html);

也就是说其实view函数是需要返回response对象的,对于string、dict、tuple,flask会自动帮你封装好。

唯一的URL/重定向行为

以下两条规则的不同之处在于是否使用尾部斜杠:

[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博客

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