Python轻量级Web框架Flask——Flask路由参数/Flask请求与响应/重定项/异常处理
Posted 疋瓞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python轻量级Web框架Flask——Flask路由参数/Flask请求与响应/重定项/异常处理相关的知识,希望对你有一定的参考价值。
1、Flask路由参数和methods参数:
-
路由其实就是一个路径,就是@a.route(‘/template_test/’)中的’/template_test/',每一个路由对应的是唯一的一个功能,如果要实现很多个功能,就需要很多个路由
-
methods参数就是用来设置支持GET和POST请求的
-
下面通过“Python轻量级Web框架Flask(2)”中的“Flask项目拆分的”模板参考链接,修改views.py当中的代码来进行Flask路由参数和methods参数的说明:
-
python代码如下:
# 在views.py中放路由和视图函数
from flask import Blueprint
from .models import * #后面是用views来控制数据库的,所以要在views中导入models文件
# 蓝图
blue = Blueprint('user', __name__)
@blue.route('/')
def index():
return 'index'
'''
《路由参数》
string 接收任何没有(‘/’)的字符串(默认)
int 接收整型
float 接收浮点型
path 接受路径,可接受(‘/’)
uuid 只接受uuid字符串,唯一码,一种生成规则
any 可以同时指定多种路径,进行限定
'''
# string 这是最重要的,后面项目中,所有传参其实都可以用string,然后用python转成对应数据类型
@blue.route('/str/<string:name>/')
def get_str(name):
print(type(name))
return name
# int
@blue.route('/int/<int:num>/')
def get_int(num):
print(type(num))
# 返回值如果不做转换,会报错:
# TypeError: The view function did not return a valid response.
# The return type must be a string, dict, list,
# tuple with headers or status, Response instance,
# or WSGI callable, but it was a int.
return str(num)
# int
@blue.route('/<float:num1>/')
def get_float(num1):
print(type(num1))
return str(num1)
# path 和string差不多,区别是可接受(‘/’)
@blue.route('/dd/<path:a>/')
def get_path(a):
print(type(a)) # str类型
return str(a)
# uuid 是一种特殊格式的数据
# 第一步:首先先通过导入uuid包获取下uuid的数据格式
@blue.route('/getuuid/')
def get_uuid():
import uuid
return str(uuid.uuid4())
# 第二步:通过第一步获取的数据传参测试(31230d57-49c4-48d0-9c86-313c23d08582)
@blue.route('/d/<uuid:id>/')
def get_uuid2(id):
print(type(id)) # <class 'uuid.UUID'>
return str(id)
# any 传参只能传any括号中有的选项
@blue.route('/any/<any(a,b,c):v>/')
def get_any(v):
print(type(v))
return str(v)
#《请求方式》,如果要同时支持GET和POST请求,就要设置methods参数,如下:
@blue.route('/methods/',methods=['GET','POST'])
def get_methods():
return 'methods'
- 结果如下:
2、Flask请求与响应 / 重定项 / 异常处理:
-
前言:本环节知识新建python项目框架如下(基于“Python轻量级Web框架Flask(2)”中的“Flask项目拆分的”模板参考链接):
-
注意:通过路由传参只是传参的一种方式
-
在这个知识点讲解中,通过python中spider_1来模拟前端请求
-
request参数列表
-
重定向:就是你的客户端发送访问请求时,不会直接调用数据给到你,而是会跳转别的页面。
-
views.py中的python代码
# 在views.py中放路由和视图函数
import requests
from flask import Blueprint, request, render_template, jsonify, make_response, Response, redirect, url_for, abort
from .models import * #后面是用views来控制数据库的,所以要在views中导入models文件
# 蓝图
blue = Blueprint('user', __name__) #user表示蓝图名称
@blue.route('/')
def index():
return 'index'
# 请求和响应
# request:请求(客户端发送给服务器)
# response:响应(服务器返回给客户端)
# http一次前后端交互:先请求,后响应
# Request:向服务器发送请求
@blue.route('/request/',methods=['GET','POST'])
def get_request():
pass
# print(request) #<Request 'http://127.0.0.1:5000/request/' [GET]>
# 重要属性
print(request.method) # 请求方式:GET或POST···
# GET请求的参数
# 返回的ImmutableMultiDict是类字典对象,可以当作字典来用,但是key值可以重复
# print(request.args) # ImmutableMultiDict([('name', 'zhangsan'), ('name', 'lisi'), ('age', '12')])
# print(request.args['name']) # 获取GET请求的参数法1:zhangsan
# print(request.args.get('name')) # 获取GET请求的参数法2:zhangsan
# print(request.args.getlist('name')) # 获取GET请求的参数法3:['zhangsan', 'lisi']
'''
常用的获取GET请求参数的是法2,法3用在有
重复key的参数的情况下。
'''
# POST请求的参数
# print(request.form) #ImmutableMultiDict([('name', 'a1'), ('age', '15')])
# print(request.form.get('age')) #15
# cokie
print(request.cookies) #ImmutableMultiDict([('name', 'hello')])
# 路径
print(request.path) # /request/
print(request.url) #
print(request.base_url)
print(request.host_url)
print(request.remote_addr) #客户端啊ip:127.0.0.1
print(request.files) # 网页传输文件内容:ImmutableMultiDict([])
print(request.headers) # 请求头
'''
Host: 127.0.0.1:5000
User-Agent: python-requests/2.28.2
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Cookie: name=hello
'''
# 后端反爬虫要用到的信息
print(request.user_agent) # 用户代理,包括浏览器操作系统的信息:python-requests/2.28.2
return 'request ok!'
# Response:服务器端向客户端发送的响应
@blue.route('/response/')
def get_response():
# pass
# 响应的几种方式
# 1、返回字符串(不常用)
# return 'response OK!'
# 2、模板渲染(前后端不分离)
# return render_template('index.html', name='xx', age=14)
# 3、返回json数据(前后端分离)
# data = 'name':'aa','age':44
# return data
# jsonify():序列化,字典——>字符串
# return jsonify(data)
# 4、字定义Response对象
html = render_template('index.html', name='xx', age=14)
print(html,type(html)) # 打印html文件中的内容,</html> <class 'str'>
# res = make_response(html,200)
res = Response(html) # 这种方式和上面效果一样
return res
# Redirect:重定项
@blue.route('/redirect/')
def make_redirect():
pass
# 重定项的几种方式
# 1、跳到外部网页
# return redirect('https://www.baidu.com')
# 2、跳到内部网页
# return redirect('/response/')
# 3、url_for():反向解析,通过视图函数名反过来找路由【正常是通过路由找视图函数】
# 语法:url_for('蓝图名称.视图函数名',参数···)
ret = url_for('user.get_request',name='aa',age=31)
print('ret:',ret) # ret: /request/?name=aa&age=31
return redirect(ret)
# 异常处理
# 抛出异常:abort
@blue.route('/abort/')
def make_abort():
# 主动抛出异常
abort(403) # Forbidden异常
return 'hello abort'
@blue.errorhandler(403) # 这里的异常要和前面抛出的异常对应,否则捕获不到!
def error_handle(e):
print('e:',e) # e: 403 Forbidden: You don't have the permission to access the requested resource. It is either read-protected or not readable by the server.
return '捕获异常:' + str(e)
总结:
- 以后再pycharm中写代码导包,就直接把包拼出来,然后等标红时,选中,然后alt+回车,自动导包,有的没有提示的就需要手动导包了。
- 对于Flask的学习,应该熟练掌握虚拟环境的搭建和使用(一种是直接在电脑上导入一个虚拟环境的库,然后创建虚拟环境,另一种是通过pycharm来搭虚拟环境)
- 熟悉Flask框架的特点及组成
- 掌握蓝图Blueprint的使用
- 掌握路由Route的使用
- 掌握请求Request和响应Response的使用
[ Flask ] 轻量级Python Web框架 学习笔记
点击 阅读原文 查看笔记
以上是关于Python轻量级Web框架Flask——Flask路由参数/Flask请求与响应/重定项/异常处理的主要内容,如果未能解决你的问题,请参考以下文章
Flask使用Python Web轻量级框架Flask实现登录功能