这篇博客就是粘贴demo,后续在分析其中的源码执行流程
配置from_object
s1.py
from flask import Flask
app = Flask(__name__)
# 配置文件
app.config.from_object("settings.DevelopmentConfig")
@app.route('/index',methods=['GET','POST'])
def index():
return "index"
if __name__ == '__main__':
app.run()
settings.py
class BaseConfig(object):
DEBUG = True
SECRET_KEY = "asudflkjdfadjfakdf"
class ProductionConfig(BaseConfig):
DEBUG = False
class DevelopmentConfig(BaseConfig):
pass
class TestingConfig(BaseConfig):
pass
路由
url配置
from flask import Flask
app = Flask(__name__)
# 路由方式一(*):
@app.route('/index',methods=['GET','POST'])
def index():
return "Indexx"
# 路由方式二:
def order():
return 'Orderr'
app.add_url_rule('/order',view_func=order)
if __name__ == '__main__':
app.run()
url反向解析
from flask import Flask,url_for
app = Flask(__name__)
@app.route('/index',methods=['GET','POST'],endpoint='n1')
def index():
v1 = url_for('n1')
#默认函数名
v2 = url_for('login')
v3 = url_for('logoutt')
print(v1,v2,v3)
return "Index"
@app.route('/login',methods=['GET','POST'])
def login():
return "login"
@app.route('/logout',methods=['GET','POST'])
def logoutt():
return "logout"
if __name__ == '__main__':
app.run()
浏览器输入http://127.0.0.1:5000/index
控制台输出/index /login /logout
二级url
from flask import Flask,render_template,redirect,url_for
app = Flask(__name__)
@app.route('/index/<int:nid>',methods=['GET','POST'])
def index(nid):
print(nid,type(nid))
return "Index"
if __name__ == '__main__':
app.run()
浏览器输入http://127.0.0.1:5000/index/1
控制台输出1 <class 'int'>
自定义URL
from flask import Flask,render_template,redirect,url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
"""
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex
print("regex",regex)
def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
:param value:
:return:
"""
print("value", value)
return int(value)
def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
:param value:
:return:
"""
val = super(RegexConverter, self).to_url(value)
print("val", val)
return val
app.url_map.converters['xxx'] = RegexConverter
@app.route('/index/<xxx("\d+"):nid>',methods=['GET','POST'])
def index(nid):
print(nid,type(nid))
v = url_for('index',nid=999) # /index/999
print(v)
return "Index"
if __name__ == '__main__':
app.run()
启动该程序输出
regex \d+
浏览器输入http://127.0.0.1:5000/index/1
控制台输出
value 1
1 <class 'int'>
val 999
/index/999
redirect_to
from flask import Flask,render_template,redirect
app = Flask(__name__)
@app.route('/index',methods=['GET','POST'],redirect_to='/new')
def index():
return "老功能"
@app.route('/new',methods=['GET','POST'])
def new():
return '新功能'
if __name__ == '__main__':
app.run()
浏览器输入index、new
路径,页面都会渲染新功能
subdomain子域名
hosts文件
127.0.0.1 www.safly.com
from flask import Flask,render_template,redirect
app = Flask(__name__)
app.config['SERVER_NAME'] = 'safly.com:5000'
@app.route("/dynamic", subdomain="<username>")
def xxxxxxx(username):
print(username)
return 'xxxxx'
if __name__ == '__main__':
app.run()
输入浏览器http://www.safly.com:5000/dynamic
页面输出xxxxx
控制台输出www
扫描二维码关注公众号,回复:
59540 查看本文章
路由上使用装饰器
from flask import Flask,render_template,redirect
app = Flask(__name__)
import functools
def wapper(func):
@functools.wraps(func)
def inner(*args,**kwargs):
print('before')
return func(*args,**kwargs)
return inner
@app.route('/xxxx',methods=['GET','POST'])
@wapper
def index():
return "Index"
@app.route('/order',methods=['GET','POST'])
@wapper
def order():
return "order"
if __name__ == '__main__':
app.run()
视图
FBV方式
from flask import Flask,render_template,redirect,views
app = Flask(__name__)
import functools
def wapper(func):
@functools.wraps(func)
def inner(*args,**kwargs):
print('before')
return func(*args,**kwargs)
return inner
##########FBV模式#############
@app.route('/index',methods=['GET','POST'])
@wapper
def index():
print("index")
return "Index"
if __name__ == '__main__':
app.run()
浏览器输入http://127.0.0.1:5000/index
控制台输出
before
index
CBV方式
from flask import Flask,render_template,redirect,views
app = Flask(__name__)
import functools
def wapper(func):
@functools.wraps(func)
def inner(*args,**kwargs):
print('before')
return func(*args,**kwargs)
return inner
# #########CBV方式一############
class IndexView(views.View):
methods = ['GET']
decorators = [wapper, ]
def dispatch_request(self):
print('index1')
return 'index1!'
app.add_url_rule('/index1', view_func=IndexView.as_view(name='index1')) # name=endpoint
#########CBV方式二############
class IndexView(views.MethodView):
methods = ['GET']
decorators = [wapper, ]
def dispatch_request(self):
print('index2')
return 'index2!'
def get(self):
print("index2.GET")
return 'index2.GET'
def post(self):
return 'index2.POST'
app.add_url_rule('/index2', view_func=IndexView.as_view(name='index2')) # name=endpoint
if __name__ == '__main__':
app.run()
浏览器输入http://127.0.0.1:5000/index1
控制台
before
index1
http://127.0.0.1:5000/index2
控制台
before
index2