web框架------flask介绍1

flask的基本介绍

1.1虚拟环境

在windows环境下安装

虚拟环境: 独立的python环境, 可以有效的避免框架的多版本冲突问题三个命令: 

  • 创建虚拟环境 mkvirtualenv -p python3 env20

  • 退出虚拟环境 deactivate

  • 进入虚拟环境 workon env20

  • 查看所有的虚拟环境 workon 双击tab

1.2使用

写一个简易的flask程序

from flask import Flask

# 1.创建web应用
app = Flask(__name__)

@app.route("/")   # 绑定路由: 当访问指定的URL时, 会调用对应的视图函数
def index():  # 首页展示
    a = 10 / 20
    return "首页"

if __name__ == '__main__':
    # 2. 运行web应用 (运行flask内置的测试服务器, 接收将请求并转发给web应用)
    # 参数: 1> 绑定的ip  2> 监听的端口  3> 是否开启调试模式
    # 万能ip  0.0.0.0  可以同时接收本机/局域网/外网的请求
    # 开启调试模式 1> 可以在网页上显示python错误  2> 更新代码后, 会自动重启服务器
    app.run(host="0.0.0.0", port=8000, debug=True)

 1.3路由的定义

@app.route('/', methods=['POST', 'GET']) # 路由必须以路径分隔符 / 开头

 

2.1请求

基本数据查询和请求

查询字符串:

# 获取查询字符串 一般用于GET传递数据 类字典对象

print(request.args.get("name"))

请求体:

  • 键值对数据 如form表单发出的默认post
 

print(request.form.get("name"))

文件 如照片, 头像

file = request.files.get("avatar") # type: FileStorage 

# 保存到本地

file.save("image1.jpg")

文本数据 如 html, json# 获取文本数据 bytes 类字符串对象 包含二进制数据

# 编码 文本数据 -> 二进制 str1.encode("utf-8") = bytes1

# 解码 二进制 -> 文本数据 bytes2.decode("utf-8") = str2

data = request.data

# print(data)

# print(type(data))

str1 = data.decode("utf-8")

print(str1)

print(type(str1))

响应

自定义响应对象:

# 视图函数返回值可以是str/bytes, 但最终都会被flask框架包装为Response响应对象

# return "index"

# 可以手动包装响应对象 作用: 自定义响应报文

response = make_response("index")

print(response.headers) # 类字典对象 可以取值和赋值

return response

重定向:

@app.route('/demo2')
def demo2():
    # return redirect("http://www.baidu.com")
    # return redirect("/demo1")

    # url_for获取视图函数的URL
    # url1 = url_for("demo")
    # print(url1)

    # return "demo2"

    # 开发中经常让redirect和url_for进行联用   有利于代码升级和重构
    return redirect(url_for("demo"))

异常处理

对于http错误的处理flask中已经封装好了处理方式---异常呢个处理和主动抛出

from flask import Flask, abort

app = Flask(__name__)

@app.route('/')
def index():
    # a = 10 / 0

    abort(404)   # 主动抛出http错误
    return "index"

# errorhandler可以捕获http错误, 还可以捕获系统内置错误
@app.errorhandler(404)
def error_404(e):  # 必须设置形参来接收具体的错误信息

    return "您访问的页面去浪迹天涯了... %s" % e

@app.errorhandler(ZeroDivisionError)
def error_zero(e):
    return "除数不能为0"

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask-Paginate是一个Flask扩展,它提供了一种简单的方法来实现分页功能。它基于SQLAlchemy,并且可以与任何SQLAlchemy支持的数据库一起使用。 首先,你需要安装Flask-Paginate扩展。可以通过以下命令来安装: ``` pip install Flask-Paginate ``` 然后,你需要导入Flask-Paginate扩展并创建一个分页器。以下是一个简单的示例: ```python from flask_paginate import Pagination, get_page_args @app.route('/') def index(): # 获取当前页码和每页显示的数量 page, per_page, offset = get_page_args(page_parameter='page', per_page_parameter='per_page') # 从数据库中获取数据 data = get_data_from_database(offset=offset, per_page=per_page) # 创建分页器 pagination = Pagination(page=page, per_page=per_page, total=count_total_items_in_database(), css_framework='bootstrap4') # 渲染模板 return render_template('index.html', data=data, pagination=pagination) ``` 在上面的示例中,我们首先使用`get_page_args`函数从请求参数中获取当前页码和每页显示的数量。然后,我们从数据库中获取数据,并使用`Pagination`类创建一个分页器对象。最后,我们将数据和分页器对象传递给模板进行渲染。 在模板中,你可以使用`prev_href`,`next_href`和`links`属性来生成分页器的HTML代码。以下是一个简单的示例: ```html <div class="pagination"> <a href="{{ pagination.prev_href() }}">Previous</a> {% for page in pagination.links %} {% if page == '...' %} <span class="ellipsis">...</span> {% elif page == pagination.page %} <span class="current">{{ page }}</span> {% else %} <a href="{{ page }}">{{ page }}</a> {% endif %} {% endfor %} <a href="{{ pagination.next_href() }}">Next</a> </div> ``` 上面的代码会生成一个类似于以下HTML代码的分页器: ```html <div class="pagination"> <a href="/?page=1&per_page=10">Previous</a> <a href="/?page=1&per_page=10">1</a> <a href="/?page=2&per_page=10">2</a> <a href="/?page=3&per_page=10">3</a> <a href="/?page=4&per_page=10">4</a> <a href="/?page=5&per_page=10">5</a> <span class="ellipsis">...</span> <a href="/?page=10&per_page=10">10</a> <a href="/?page=2&per_page=10">Next</a> </div> ``` 此外,你还可以使用`prev_disabled`和`next_disabled`属性来禁用“上一页”和“下一页”链接,如果当前页码是第一页或最后一页的话。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值