逻辑Flask——URL与视图

本文详细介绍了Flask框架中URL与视图的映射,包括不带参数、带参数的URL映射,指定URL末尾斜杠,以及如何限定HTTP方法。此外,还讲解了网页跳转和重定向的使用,包括临时重定向302和永久重定向301的实现,以及它们在登录和网站域名变更场景中的应用。

学习目标
URL与视图
1、URL与函数的映射 2、构造URL 3、指定URL末尾的斜杠
4、指定HTTP方法 5、页面跳转和重定向
关于响应

一、URL与函数的映射

@装饰函数,路由就是url(统一资源定位符),路由映射到函数上,调用路由就是调用函数的运行结果

  • 不携带参数/list/
  • 不携带参数且以/作为结尾/list/ 若用户没有添加结尾/,浏览器会自动添加
  • 携带参数/list/<sid>
  • 给参数加上指定类型的限制 ,如/list/<int:sid>
  • path可以携带/的参数,如/list/<path:sid>'
  • any类型 指定多种类型
# 视图函数
@app.route('/')
def hello_python():
    return 'hello python'

@app.route('/list/<sid>')
def article(sid):
    return '这是第{}篇文章'.format(sid)

# 给参数加上指定类型的限制
# 1、int类型或float类型
@app.route('/list/<int:sid>')
def article(sid):
    return '这是第{}篇文章'.format(sid)

# 2、string类型中 / 是作为参数的分隔符 ,不能接收/的字符串
@app.route('/list/<string:sid>')
def article(sid):
    return '这是第{}篇文章'.format(sid)

# 注意:若是自己在末尾有写到/,那么以/作为严格的结尾,那么网页中若自己没写,可以自动补全
@app.route('/list/<int:sid>/')
def article(sid):
    return '这是第{}篇文章'.format(sid)

# 3、path可以接收/的字符串
@app.route('/list/<path:sid>')
def article(sid):
    return '这是第{}篇文章'.format(sid)
# http://127.0.0.1:5000/list/99/
# 这是第99/篇文章

# 4、any类型 可以指定多种路径
@app.route('/<any(dict,tuple):url_path>/')
def item(url_path):
    return url_path


@app.route('/ie')
def baidu():
    return request.args.get('name')
# url:输入  http://127.0.0.1:5000/ie?name=python
# 网页:输出  python

二、构造URL

from flask import Flask,url_for
# 创建app的实例
app = Flask(__name__)
@app.route('/')
def hello_world():
    # /article/1?page=1&name=1
    print(url_for('article',aid=1,page=1,name=1,age=18))
    # /article/1?page=1&name=1&age=18
    return 'hello girl'

# 尖括号是固定写法,默认数据类型是字符串 传参
@app.route('/article/<aid>')
def article(aid):
    return 'article {}'.format(aid)

三、指定URL末尾的斜杠

# 指定URL末尾的斜杠 与 末尾没有斜杠的url是两个路由
# 若用户没有输入末尾的/ ,浏览器会自动补全
@app.route('/article2/<aid>/')
def article2(aid):
    return 'article2 {}'.format(aid)

四、指定HTTP方法

4、指定HTTP方法(可以用postman查看)
默认路由为get请求 使用methods=[‘GET’,‘POST’]进行更改

from flask import Flask,request
# 创建app的实例
app = Flask(__name__)
@app.route('/',methods=['GET','POST'])
def hello_world():
    # 无论是post请求,还是get请求,均使用args
    # print(request.args.get('name'))
    # print(request.form.get('name'))
    return 'hello meimei'

@app.route('/article/<aid>')
def article(aid):
    return 'article {}'.format(aid)

# get请求,拼接在url上
# post请求,参数在form表单中
# 还有很多其它的请求

在这里插入图片描述

五、网页跳转和重定向

重定向:访问一个网页时,跳转到另一个网页
永久重定向:301 在url_for(‘函数名’,code=301) 中将默认的临时302改为301变成永久重定向即可。
临时重定向:302

重定向演示

from flask import Flask,request,redirect,url_for
# 创建app的实例
app = Flask(__name__)
@app.route('/')
def index():
    return '欢迎来到XX首页'

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

# 重定向  如果没有找到,就返回指定redirect的路径的虾
@app.route('/profile/')
def profile():
    name = request.args.get('name')
    if name:
        return name
    else:
        # return redirect('/')  # 相当于硬编码,若重定向的url改变了,这边会出错,因此采用url_for
        return redirect(url_for('login'))  # 写入要重定向的url所对应的函数的名称
        # 默认重定向是302临时重定向,code=301,改为永远重定向
        # return redirect(url_for('login'),code=301) 
        
# 如果url上拼接成功name值,则返回姓名
# http://127.0.0.1:8888/profile/?name=asa
# 打印:asa

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

若是url 上拼接上name的值
在这里插入图片描述
在这里插入图片描述

临时重定向
在这里插入图片描述
永久重定向
在这里插入图片描述

用途

登录–临时重定向
网页域名大改时-永久重定向

六、关于响应

return返回就是一个响应

# @Time:2021/12/21 17:54
from flask import Flask,request,redirect,url_for,Response,make_response # 导入返回的包Response或者make_response
'''
return返回就是一个响应
返回值可以是 : 字符串、模板、字典、元组
'''
# 创建app的实例
app = Flask(__name__)
@app.route('/')
def index():
    # return {"name":'python'}
    # return {"name":'小花花'}  # 中文会乱码
    # return 'asasa你好啊 '
    # return ('name','python')  # 只会显示第一个数据
    # return 'python',400  # 只要有一个, 就是元组
    # 继承的是flask的Response基类 返回的文件的格式mimetype为text/html
    # return Response('python',status=200,mimetype='text/html')
    return make_response('友情提示')
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值