一、路由系统

1.子域名的配置

"""
可传入的参数:
@app.route('/user/<username>')
@app.route('/post/<int:post_id>',methods=['GET',"POST"],endpoint='fff') - subdomain(配置子域名的方法)
www.baidu.com,
- 现在本地hosts文件中找IP C:\Windows\System32\drivers\etc /etc/hosts from flask import Flask,render_template,request,redirect,session,url_for app = Flask(__name__)
app.config['SERVER_NAME'] = 'bjg.com:5000' @app.route("/index",subdomain='<xxxxx>')
def index(xxxxx):
return "%s.bjg.com" %(xxxxx,) if __name__ == '__main__':
app.run() """
#py
from flask import Flask,render_template,request,redirect,session,url_for

app = Flask(__name__)
app.config['SERVER_NAME'] = 'bjg.com:5000'
@app.route('/index/<int:nid>',methods=['GET',"POST"],endpoint='fff',defaults={'cid':777},strict_slashes=False)
def index(nid,cid):
print(nid,cid)
# v = url_for('fff',nid=888)
# print(v)
return "xxxx" @app.route('/old',redirect_to='/new')
def old():
return "Old" # /new
@app.route('/new')
def new():
return 'New' admin.bjg.com:5000/index
@app.route("/index", subdomain="admin")
def admin_index():
return "admin.bjg.com" @app.route("/index",subdomain='www')
def index():
return "www.bjg.com" @app.route("/index",subdomain='<xxxxx>')
def index(xxxxx):
return "%s.bjg.com" %(xxxxx,) if __name__ == '__main__':
app.run()
 

2.支持正则表达式

'''
- 扩展Flask的路由系统,让他支持正则
from flask import Flask,url_for app = Flask(__name__) # 定义转换的类
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
""" def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
:param value:
:return:
"""
return int(value) def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
:param value:
:return:
"""
val = super(RegexConverter, self).to_url(value)
return val # 添加到converts中
app.url_map.converters['xxx'] = RegexConverter # 进行使用
@app.route('/index/<xxx("\d+"):nid>',endpoint='xx')
def index(nid):
url_for('xx',nid=123)
return "Index" if __name__ == '__main__':
app.run()
'''
#py
from flask import Flask,url_for

app = Flask(__name__)

# 定义转换的类
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
""" def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
:param value:
:return:
"""
return int(value) def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
:param value:
:return:
"""
val = super(RegexConverter, self).to_url(value)
return val # 添加到converts中
app.url_map.converters['xxx'] = RegexConverter # 进行使用
@app.route('/index/<xxx("\d+"):nid>',endpoint='xx')
def index(nid):
url_for('xx',nid=123)
return "Index" if __name__ == '__main__':
app.run()
 

二、视图函数

flask除了支持FBV还支持CBV(包括CBV的正则表达式配置)


from flask import Flask,url_for,views

app = Flask(__name__)

# 进行使用
# @app.route('/index',endpoint='xx')
# def index(nid):
##反向生成URL
# url_for('xx',nid=123)
# return "Index"
#
# app.add_url_rule('/index',index)
def auth(func):
def inner(*args, **kwargs):
result = func(*args, **kwargs)
return result
return inner class IndexView(views.MethodView):
# methods = ['POST']
  #装饰器在CBV中的使用
decorators = [auth,] def get(self):
v = url_for('index')
print(v)
return "GET" def post(self):
return "GET" app.add_url_rule('/index', view_func=IndexView.as_view(name='index')) if __name__ == '__main__':
app.run()
 

三、请求和响应

使用urllib转换网址上的中文,和16进制

from flask import Flask,url_for,request,redirect,render_template,jsonify,make_response
from urllib.parse import urlencode,quote,unquote
app = Flask(__name__) @app.route('/index',endpoint='xx')
def index():
from werkzeug.datastructures import ImmutableMultiDict
get_data = request.args
#转化成为字典
get_dict = get_data.to_dict()
get_dict['xx'] = ''
# 获取URL
url = urlencode(get_dict)
print(url) print(request.query_string)
print(request.args) val = "%E6%8A%8A%E5%87%A0%E4%B8%AA"
print(unquote(val))
#
# return "Index" # return "Index"
# return redirect()
# return render_template()
# return jsonify(name='alex',age='18') response = make_response('xxxxx')
response.headers['xxx'] = ''
return response if __name__ == '__main__':
# app.__call__
app.run()

四、模板语法

和Django基本相同,更贴近Django的基本语法,支持各种数据类型,还支持函数(自定义模板语法)

##################view视图
from flask import Flask,url_for,request,redirect,render_template,jsonify,make_response,Markup
from urllib.parse import urlencode,quote,unquote
app = Flask(__name__) def test(a1,a2):
return a1+a2 @app.template_global()
def sb(a1, a2):
return a1 + a2 + 100 @app.template_filter()
def db(a1, a2, a3):
return a1 + a2 + a3 @app.route('/index',endpoint='xx')
def index():
v1 = "字符串"
v2 = [11,22,33]
v3 = {'k1':'v1','k2':'v2'}
v4 = Markup("<input type='text' />")
return render_template('index.html',v1=v1,v2=v2,v3=v3,v4=v4,test=test) if __name__ == '__main__':
# app.__call__
app.run()
#########模板base###############
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>模板</h1>
{%block body %} {%endblock%} </body>
</html>
############继承模板的HTML#################
{% extends 'layout.html'%} {%block body %}
{{v1}} <ul>
{% for item in v2 %}
<li>{{item}}</li>
{% endfor %}
</ul>
{{v2.1}} <ul>
{% for k,v in v3.items() %}
<li>{{k}} {{v}}</li>
{% endfor %}
</ul>
{{v3.k1}}
{{v3.get('k1')}} {{v4}}
<!--{{v4|safe}}--> <h1>{{test(1,19)}}</h1> {{sb(1,2)}} {{ 1|db(2,3)}} {% macro xxxx(name, type='text', value='') %} 《鸿》
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %} {{ xxxx('n1') }} {%endblock%}

五、session

session的配置

from flask import Flask,session,Session
from urllib.parse import urlencode,quote,unquote
from werkzeug.local import LocalProxy
app = Flask(__name__)
app.secret_key ='sdfsdfsdf'
app.config['SESSION_COOKIE_NAME'] = 'session_lvning'
"""
'SESSION_COOKIE_NAME': 'session',
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_HTTPONLY': True,
'SESSION_COOKIE_SECURE': False,
'SESSION_REFRESH_EACH_REQUEST': True,
'PERMANENT_SESSION_LIFETIME': timedelta(days=31)
""" @app.route('/index',endpoint='xx')
def index():
# session本质上操作的是字典,假设session保存在数据库
# session['xxx'] = 123
# session['xx1'] = 123
# session['xx2'] = 123
# session['xx3'] = 123
# del session['xx2']
session['xx3'] = 123
return "xxx" if __name__ == '__main__':
# app.__call__
app.run()

六、闪现(flash)

传递到下一个跳转页面的数据,但只想保留一次,一般使用session的flash方法

from flask import Flask,session,Session,flash,get_flashed_messages,redirect,render_template,request
app = Flask(__name__)
app.secret_key ='sdfsdfsdf' @app.route('/users')
def users():
# msg = request.args.get('msg','')
# msg = session.get('msg')
# if msg:
# del session['msg'] v = get_flashed_messages()
print(v)
msg = ''
return render_template('users.html',msg=msg) @app.route('/useradd')
def user_add():
# 在数据库中添加一条数据
# 假设添加成功,在跳转到列表页面时,显示添加成功
# return redirect('/users?msg=添加成功')
# session['msg'] = '添加成功' flash('添加成功')
return redirect('/users') if __name__ == '__main__':
app.run()

七、类似中间件

from flask import Flask,session,Session,flash,get_flashed_messages,redirect,render_template,request
app = Flask(__name__)
app.secret_key ='sdfsdfsdf' @app.before_request
def process_request1():
print('process_request1') @app.after_request
def process_response1(response):
print('process_response1')
return response @app.before_request
def process_request2():
print('process_request2') @app.after_request
def process_response2(response):
print('process_response2')
return response @app.route('/index')
def index():
print('index')
return 'Index' @app.route('/order')
def order():
print('order')
return 'order' @app.route('/test')
def test():
print('test')
return 'test' if __name__ == '__main__':
app.run()

Flask的使用的更多相关文章

  1. flask+sqlite3+echarts2+ajax数据可视化

    前提: 准备Python + Flask+Sqlite3的平台环境(windows系统) 前面一节介绍flask怎么安装了,剩下sqlite3下载后解压,然后环境变量添加解压路径就行了 附加下载地址: ...

  2. flask+sqlite3+echarts2+ajax数据可视化报错:UnicodeDecodeError: 'utf8' codec can't decode byte解决方法

    flask+sqlite3+echarts2+ajax数据可视化报错: UnicodeDecodeError: 'utf8' codec can't decode byte 解决方法: 将 py文件和 ...

  3. Windows下快速安装Flask的一次经历

    前提: 1.已安装python版本(一般都是2.X) 2.已安装easy_install python安装,记得配置Python的环境变量,例如:我的直接在Path上加 G:\Python 验证安装P ...

  4. 使用Flask设计带认证token的RESTful API接口[翻译]

    上一篇文章, 使用python的Flask实现一个RESTful API服务器端  简单地演示了Flask实的现的api服务器,里面提到了因为无状态的原则,没有session cookies,如果访问 ...

  5. 使用python的Flask实现一个RESTful API服务器端[翻译]

    最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...

  6. python flask (一)

    from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World ...

  7. flask源码分析

    本flask源码分析不间断更新 而且我分析的源码全是我个人觉得是很beautiful的 1 flask-login 1.1 flask.ext.login.login_required(func),下 ...

  8. Python flask 基于 Flask 提供 RESTful Web 服务

    转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...

  9. Python flask @app.route

    转载自 http://python.jobbole.com/80956/ 下面是Flask主页给我们的第一个例子,我们现在就由它入手,深入理解“@app.route()”是如何工作的.         ...

  10. Flask 框架入门

    Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, We ...

随机推荐

  1. eclipse自定义工具栏

    设置:1.Window2.Customize Perspective说明:Tool Bar Visibility定义菜单栏,Shortcuts定义右键new菜单

  2. redis安全 (error) NOAUTH Authentication required

    Redis 安全 我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全. 实例 我们可以通过以下命令查看是否设置了 ...

  3. Filter功能

    在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest .根据需要检查HttpServletRequest,也可以修改HttpServletR ...

  4. 在window是下安装hadoop过程

    详细见http://www.cnblogs.com/kinglau/archive/2013/08/20/3270160.html

  5. 14-jQuery补充

    jquery内容补充 jquery除了咱们上面讲解的常用知识点之外,还有jquery 插件.jqueryUI知识点 jqueryUI 官网: https://jqueryui.com/ jqueryU ...

  6. Expm 9_1 有向图中环的判断问题

    [问题描述] 给定一个有向图,要求使用深度优先搜索策略,判断图中是否存在环. package org.xiu68.exp.exp9; public class Exp9_1 { //用深度优先搜索判断 ...

  7. OCM_第八天课程:Section4 —》数据管理

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  8. Jquery----对文档操作

    jquery对css操作: 1.CSS .css() - .css("color") -> 获取color css值 - .css("color", &q ...

  9. 区间dp好题cf149d 括号匹配

    见题解链接https://blog.csdn.net/sdjzping/article/details/19160013 #include<bits/stdc++.h> using nam ...

  10. linux 图形化与命令模式切换

    vim编辑/etc/inittab 文件如图: 找到红框里的一行.修改数字    3.表示命令模式     5表示图形模式!