内容简介:本来打算新开一篇,但是太短了,就整合到这里了用来反转
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
参数的数据类型
-
如果没有指定,那么默认就是
string
-
指定
int
,float
就只能传递相应的数据类型 -
path
类型,与string
类型相似,但是可以传递路径,即可以出现/
-
uuid
类型,只接受uuid字符串,唯一的 -
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知识点总结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。