美文网首页
路由、变量规则与响应体详解

路由、变量规则与响应体详解

作者: 小志Codings | 来源:发表于2021-05-04 09:35 被阅读0次

路由

一般我们设置web应用程序的URL,需要设置有意义的URL来帮助用户记忆。比如说,登录界面的URL可以设置为/login,而登出界面的URL可以设置为/logout。而不是设置一堆没有任何意义的字符串,那样只会恶心用户。

使用route装饰器将功能绑定到URL中。

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'

你也可以做更多,使部分URL动态化,并将多个规则附加到一个函数上。

大家还需要知道一个内容就是路由函数与装饰器

from flask import Flask

# 路由函数:add_url_rule与装饰器
app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello world'

def index():
    return 'hello everyone'

app.add_url_rule('/index', view_func=index)

if __name__ == '__main__':
    app.run()

通过add_url_rule这个函数将我们要访问的路径告诉服务器,那么服务器就会跳转到指定页面。

变量规则

我们可以使用变量标记各个部分,将动态部分添加到URL中,标记使用的是<>(一对尖括号)。

from flask import Flask
import settings

app = Flask(__name__)
app.config.from_object(settings)

data = {'a':'北京', 'b':'上海','c':'广州','d':'深圳'}

@app.route('/getcity/<key>')
def getcity(key):
    return data.get(key, '走丢了')
    
@app.route('/add/<int:num>')
def add(num):
    result = str(num + 10)
    return result

@app.route('/path/<path:subpath>')
def get_path(subpath):
    return subpath

@app.route('/uuid/<uuid:my_uuid>')
def get_uuid(my_uuid):
    return f'得到的uuid:{my_uuid}'


if __name__=='__main__':
    app.run()

除了字符串默认是str类型,其他整型、浮点型等都需要标记intfloat

要注意返回的值只能是字符串。

path

在上面的代码中你会发现有一个path类型的标记。那什么时候需要用到呢?

当后面的路径是一种动态变化的,那我们就可以通过这种方式来获取变化的URL。

uuid

uuid是一种通用的唯一识别码的缩写,是一种软件构建的标准,在这样的情况下,就不需要考虑数据库创建时名称重复的问题。

uuid是一个128bit的数值,这个数值可以通过一定的算法计算出来。uuid用来识别属性类型,在所有空间和时间上被视为唯一标识。

uuid的一般格式为xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx(8-4-4-12)。

同时,我们可以使用Python来生成uuid格式的数据

import uuid

uid = uuid.uuid4()
print(uid)

注意:若没有写出正确的uuid格式,访问该URL时会出现空白。

除了字符串和数字类型的数据,其他数据类型使用的比较少。

/ 的重要性

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


from flask import Flask
import settings


app = Flask(__name__)
app.config.from_object(settings)


@app.route('/project/')
def projects():
    return 'The project page'


@app.route('/about')
def about():
    return 'The about page'

if __name__ == '__main__':
    app.run()

上面的代码中有两个路径,第一个为/project/,第二个路径为/about

第一个路径的尾部是加了一条斜杠,而第二个路径的尾部是没有加斜杠的。

当我访问:

http://localhost:5000/project/

想必你应该很明确,返回的值肯定是The project page

当我访问的是:

http://localhost:5000/project

它会进行页面的跳转,然后再访问

http://localhost:5000/project/

project的URL是中规中矩的,尾部有一个斜杠,看起来就像一个文件夹。访问一个没有斜杠的URL结尾时,Flask会自动进行重定向,并在尾部加上一个斜杠。

about的URL尾部没有斜杠,因此其行为表现与文件类似,如果访问URL添加斜杠就会得到一个404错误。这样可以保持URL唯一,并帮助搜索引擎避免重复索引同一个页面。

Response对象

返回普通的字符串

flask视图函数的return可以不做转化的返回:字符串

app = Flask(__name__)
@app.route('/')
def index():
    return 'Hello World'

其实上面的返回是默认使用Response转换过来的,它和下面代码是一样的。

from flask import Flask, Response

app = Flask(__name__)
@app.route('/')
def index():
    return Response('Hello World')

json数据

如果你想要返回列表,字典之类的数据,就需要先转换为json数据返回。

from flask import Flask, jsonify

app = Flask(__name__)
@app.route('/')
def index():
    dict_data = {
        'name': '啃书君',
        'age': 20
    }
    return jsonify(dict_data)

返回元组

返回元组是有要求的,元组内容包括三个参数,response(响应体)、status_code(状态码,可以自定义)、headers(响应头)

from flask import Flask
import json

app = Flask(__name__)
@app.route('/')
def user():
    json_dict = {
        'name': '啃书君',
        'user_info': {'age': 20}
    }
    data = json.dumps(json_data)
    return data, 200, {"ContentType":"application/json"}

在这里headers是可以不写的,系统有默认的响应头。

获取该对象的基本信息

from flask import Flask, Response
import settings


app = Flask(__name__)
app.config.from_object(settings)

@app.route('/index')
def index():
    response = Response('<h1>大家好,今天中午吃什么</h1>')
    print(response.content_type)
    print(response.headers)
    print(response.status_code)
    print(response.status)
    return response


if __name__=='__main__':
    app.run()

更多的基本信息与操作可以查询flask官网。

最后

啃书君说

文章的每一个字都是我用心敲出来的,只希望对得起每一位关注我的人。

点个[在看]【点赞】,让我知道,你们也在为自己的学习拼搏和努力。

路漫漫其修远兮,吾将上下而求索

我是啃书君,一个专注于学习的人,你懂的越多,你不懂的越多。更多精彩内容,我们下期再见!

相关文章

网友评论

      本文标题:路由、变量规则与响应体详解

      本文链接:https://www.haomeiwen.com/subject/etlcdltx.html