「Flask笔记」 URL知识点总结

栏目: Python · 发布时间: 5年前

内容简介:本来打算新开一篇,但是太短了,就整合到这里了用来反转

flask -- 第一个flask程序

本来打算新开一篇,但是太短了,就整合到这里了

第一个flask程序

from flask import Flask
import config

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

@app.route('/')       #定义一个路由
def hello_world():    #定义一个视图函数
    return 'Hello World!'


if __name__ == '__main__':
    app.run()
其中 config 文件时从配置文件中开启 debug
也可以在 app.run(debug=True) 这样开启 debug
因为后期链接数据库的配置卸载 config 中,所以这里使用配置文件开启 debug

这里有个坑,就是专业版的pycharm,创建一个flask项目的话 debug 要在 Configurations 下勾选 FLASK_DEBUG 不然开启不了

注意 在配置文件里 DEBUG 要大写

flask --URL

唯一URL

from flask import Flask
import config

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

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

#app.route('/hi/')
def hi_world():
    return 'hi World!'

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

url_for方法

用来反转 URL , url_for 这个方法的第一个参数是视图函数的名称,后面的是传递的参数,如果在视图函数中这个参数定义了,那么就会当成 path 传给这个 url ,如果没有定义,那么就会当成get请求,传入 url 中。

注意 url_for 会自动处理特殊字符,例如 /

当你访问 127.0.0.1/hello/ 的时候会 Not Found 但是访问 127.0.0.1/hi/ 不会,因为 127.0.0.1/hi/ 就相当于在访问的 127.0.0.1/hi 做了一个重定向,跳转到 127.0.0.1/hi/

URL传递参数

传递参数

传递参数的语法是: // 。然后再试图函数中,也要定义同名的参数。

get请求传递参数

@app.route('/get/')
def arg_get():
    wd = request.args.get('wd') #get请求参数
    return 'get请求的参数是%s' % wd

参数的数据类型

  1. 如果没有指定,那么默认就是 string
  2. 指定 int , float 就只能传递相应的数据类型
  3. path 类型,与 string 类型相似,但是可以传递路径,即可以出现 /
  4. uuid 类型,只接受uuid字符串,唯一的
  5. any 类型,可以指定多种路径,这个通过一个例子来说明
@app.route('/<any(blog,user):url_path>/<id>')
def detaol(url_path,id):
    if url_path=='blog':
        return '博客详情 %s' % id
    else:
        return '用户详情 %s' % id

意思就是,你可以选择传入的时 blog 还是 user

自定义URL转换器

自定义个url类型转换器

首先导入 from werkzeug.routing import BaseConverter 模块

ctrl+b进入源码,可以看到这里定义的 BaseConverter 类,下面的 PathConverter , NumberConverter 等,就是之前的参数数据类型都是继承了这个类,然后通过一些方法来定义的转换器,定义完成后加入到 DEFAULT_CONVERTERS 对应关系中。通过 app.url_map.converters['转换器名'] = 定义的转换规则 来加入到对应关系中

例1,定义一个简单的手机号码转换器

from flask import Flask
from werkzeug.routing import BaseConverter
import config

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

# 限定手机号码的格式
class TelConverter(BaseConverter):
    regex = r'1[85734]\d{9}'

#添加到转换器中
app.url_map.converters['tel'] = TelConverter

#使用定义的转换器
@app.route('/tel/<tel:my_tel>/')
def tel(my_tel):
    return 'your tel is %s' % my_tel

例2,定义一个按照规则分离出两个参数的转换器

介绍两种方法

to_python 方法:将传入的 value 返回到视图函数中做参数

to_url 方法:将传入的 value 调用url_for生成符合要求的url形式

然后定义一个转换器

class ListConverter(BaseConverter):
    def to_python(self, value):
        return value.split('+')
    def to_url(self, value):
        return '+'.join(value)
app.url_map.converters['list'] = ListConverter

@app.route('/')
def hello_world():
    url = url_for('postsa',broad=['a','b'])
    return url

@app.route('/posts/<list:broads>/')
def postsa(broads):
    return "your posts is %s"%broads

重定向

重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会重一个页面自动跳转另外一个页面,比如用户访问了一个需要权限的页面,但是该用户当前并没有登录,因此我们给它重定向到登录页面

永久性重定向:_http的状态码是301,多用于旧网址就废弃了要转到一个新的网址确保用户的访问www.jingdong.com ---> www.jd.com

暂时性重定向:http的状态码是302,表示页面的暂时性跳转。比如访问一个需要权限的网址,如果用户没有登录,应该重定向到登录页面,这种情况下,应该用暂时性重定向

在flask中,重定向是通过flask.redirect(location,code=302)这个函数来实现,location表示需要重定向的url,应该配合之前将的url_for()函数来使用,code表示采用那个重定向,默认是302即暂时性重定向,可以修改成301来实现永久性重定向

重定向方法

可以使用 redirect() 方法配合 url_for() 反转url来实现跳转

from flask import Flask,redirect,url_for
from datetime import datetime
app = Flask(__name__)

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

@app.route('/login/<username>')
def login(username):
    if username=='admin':
        return "hello %s" % username
    else:
        return redirect(url_for("index")) #重定向到index

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

以上所述就是小编给大家介绍的《「Flask笔记」 URL知识点总结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解深度学习

图解深度学习

[日] 山下隆义 / 张弥 / 人民邮电出版社 / 2018-5 / 59.00元

本书从深度学习的发展历程讲起,以丰富的图例从理论和实践两个层面介绍了深度学习的各种方法,以及深度学习在图像识别等领域的应用案例。内容涉及神经网络、卷积神经网络、受限玻尔兹曼机、自编码器、泛化能力的提高等。此外,还介绍了包括Theano、Pylearn2、Caffe、DIGITS、Chainer 和TensorFlow 在内的深度学习工具的安装和使用方法。 本书图例丰富,清晰直观,适合所有对深......一起来看看 《图解深度学习》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具