补充Flask

1、路由

我们可以通过 url_map 来查看 所有的 路由映射。

/static 是映射到了 static目录下,可以在static目录中存放静态资源(图片、css、js)

2、命令启动服务

我们可以试验flask run 命令 来启动服务,这样子 默认 会在当前目录下找app.py文件,默认是 Environmen环境设置为 production

二、请求带参

1、路径中带参

标准格式

/path/<参数>

默认 参数 格式是字符串

但是我们还有其他的格式,可以做数据格式转换

flask提供了常见数据格式的转换

string、int、float、path、uuid

/path/<string:参数>     默认string可不写
​
/path/<int:参数>     会把参数 转成 整数  如果参数不是整数 会报错返回 404
​
/path/<float:参数>
  • 自定义 转换器

1、创建一个自定义转换器
自定义Converter类
class PhoneConverter(BaseConverter):
    # 重写 正则规则  查看参数是否匹配该正则 
    regex = r'1[3-9]\d{9}'
​
​
2、注册至converters容器  phone 转换器别名
app.url_map.converters['phone'] = PhoneConverter
​
​
3、使用自定义转换器
@app.route('/user/<phone:user_id>')
def user_info(user_id):
    return "手机号登录:{}".format(user_id)

三、处理请求

flask提供了视图函数,可以在视图函数中 处理请求

1、获取url后?参数

request.args.get("参数","默认值")
​
title = request.args.get("title", "没有")

2、form表单传参

title = request.form.get("title")
price = request.form.get("price")

3、 json格式传参

title = request.json.get("title")
price = request.json.get("price")

4、文件上传

file1 = request.files.get("file1")

可以获取文件名

file1.filename

保存文件

file1.save()

四、响应

1、返回字符串

默认就可以直接返回字符串,其实返回的还是网页,只不过内容是纯文本

return "返回图书集合"

2、返回模板网页

from flask import render_template

@app.route("/", methods=["GET", "POST"])
def hello_world():
    return render_template("home.html")

  • 扩展一点 Jinjia2 模板引擎

Jinjia2模板 和我们django 内置模板语法 基本一致, 我们简单了解

我们在 视图中 定义好 变量数据

@app.route("/", methods=["GET", "POST"])
def hello_world():
    new_list = ["新闻1", "新闻2", "新闻3", "新闻4"]

    return render_template("home.html", news={"news_list": new_list, "title": "我是新标题"})
    

在 模板中使用 定义好的变量数据

{{变量名}} 会展示变量的值

{% for 语句 %} 循环体 {% endfor %}

<body>
<h1>{{ news.title }}</h1>
<h1>《功勋-李延年》</h1>

{% for item in news.news_list %}
    <p>{{ item }}</p>
{% endfor %}


</body>

3、返回重定向地址

有的时候,资源不在当前 路径对应的视图中,而是在另外一个地方,我们就需要重定向,告诉浏览器你在访问 这个地方。

浏览器 其实访问了两遍

@app.route("/books", methods=["GET"])
def go_book():
    return redirect("/book")

  • url_for函数

我们在代码中 尽量避免 直接写路径,如果写的多了,想修改某路径的时候,那就需要修改很多地方。

我们使用endpoint 参数 给 路由 起别名, 使用别名代表 该用户

@app.route("/book", endpoint="book")
def book_list():
    title = request.args.get("title", "没有")

    return "返回图书集合"

url_for 传入别名 找到对应的路由

@app.route("/books", methods=["GET"])
def go_book():
    return redirect(url_for("book"))

4、返回json格式数据

我们要返回json格式数据,可以借助于 提供的函数 jsonify

from flask import jsonify

jsonify 会返回一个 Content-Type是 application/json 格式的 响应对象

5、返回元组响应

我们可以 同时she则 返回内容、响应码、响应头等信息

(响应内容,响应码,响应头)

@app.route("/book/add", methods=["POST"])
def book_add():

    return ("添加图书成功", 500, {"Content-Type": "application/json"})

6、make_reponse 返回

我们也可以自定义返回的内容,使用make_reponse 方法。

@app.route("/book/<int:id>/")
def book_one(id):
    print(type(id))

    resp = make_response("我要升天")
    resp.headers["Content-Type"] = "text/html"
    resp.status_code = 500
    resp.status = "500 error"

作业1:

创建一个 图书flask项目,在项目中 有 注册视图路由, 有注册模板页

输入 账号、密码、确认密码、昵称 等信息到 注册模板页,点击注册按钮 跳转到注册视图

在注册视图中 获取传递来的数据,并打印出来。

扩展1:

HEAD:

OPTIONS:

扩展2:

文件 存储到指定目录下 /images/目录下

扩展3:

说一说 常用的请求头

Host: localhost:5000 User-Agent: HTTPie/2.6.0 Accept-Encoding: gzip, deflate Accept: / Connection: keep-alive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值