MySQL Proxy实现读写分离
工作图: MySQL Proxy有一项强大功能是实现“读写分离”,基本原理是让主数据库处理写方面事务,让从库处理SELECT查询。 Amoeba for MySQL是一款优秀的中间件软件,同样可以实现读写分离,负载均衡等功能,并且稳定性也高于MySQL Proxy,有兴趣的可以测试一下。 环境描述: 操作系统:CentOS6.3_x64 主服务器Master:192.168.0.202 从服务器Slave:192.168.0.203 调度服务器MySQL-Proxy:192.168.0.204
Python Flask,上传文件,request.files
demo.py(上传文件):
# coding:utf-8
from flask import Flask, request # 导入request对象
app = Flask(__name__)
@app.route("/upload", methods=["POST"])
def upload():
file_obj = request.files.get("pic") # "pic"对应前端表单name属性
if file_obj is None:
Python Flask,abort函数
demo.py(abort函数):
# coding:utf-8
from flask import Flask, abort, Response
app = Flask(__name__)
@app.route("/login", methods=["GET"])
def login():
name = ""
pwd = ""
if name != "zhangsan" or pwd != "admin":
# abort函数可以立即终止视图
Python Flask,捕获异常,捕获404错误,errorhandler(),自定义异常处理函数
demo.py(捕获异常,自定义异常处理函数):
# coding:utf-8
from flask import Flask
app = Flask(__name__)
# 捕获404异常错误
@app.errorhandler(404)
# 当发生404错误时,会被该路由匹配
def handle_404_error(err_msg):
"""自定义的异常处理函数"""
# 这个函数的返回值就是前端用户看到的最终结果 (404错误页面)
return u"
Python Flask,自定义响应信息,自定义状态码、响应头
demo.py(自定义响应信息):
# coding:utf-8
from flask import Flask, make_response
app = Flask(__name__)
@app.route("/index")
def index():
# 1 使用元组,返回自定义的响应信息
# 响应体 状态码 响应头
# return "index page", 400, [("Name", "pyton"), ("City
Python Flask,Json,返回Json数据,jsonify
demo.py(返回Json数据):
# coding:utf-8
from flask import Flask, jsonify
import json
app = Flask(__name__)
# 第一种方式:手动返回Json字符串
@app.route("/index")
def index():
data = {
"name": "python",
"age": 24
}
# json.dumps(字典) # 将
Python Flask,cookie,设置、获取、删除cookie
demo.py(设置、获取、删除cookie):
# coding:utf-8
from flask import Flask, make_response, request
app = Flask(__name__)
# 设置cookie
@app.route("/set_cookie")
def set_cookie():
resp = make_response("success") # "success"是响应体
# 设置cookie, 默认有效期是临时co
Python Flask,session
demo.py(session):
# coding:utf-8
from flask import Flask, session # 导入session
app = Flask(__name__)
# flask的session需要用到的秘钥字符串 (如果用到session 必须配置该项)
app.config["SECRET_KEY"] = "Flask的秘钥字符串"
# flask默认把session保存到了cookie中 (不安全,所以要配置SECRET_KEY)
# 设
Python Flask,请求上下文,应用上下文
请求上下文(request context) request和session都属于请求上下文对象。 应用上下文(application context) current_app和g都属于应用上下文对象。 current_app:表示当前运行程序文件的程序实例。 g:处理请求时,用于临时存储对象,每次请求都会重设这个变量。 from flask import current_app, g
Python Flask,请求钩子(hook),(类似Django中间件)
请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: before_first_request:在处理第一个请求前运行。 before_request:在每次请求前运行(视图函数执行前)。 after_request:如果没有未处理的异常抛出,在每次请求后运行(视图函数执行后)。 teardown_request:在每次请求后运行,即使有未处理的异常抛出。 demo.py(请求钩子):
# coding:utf-8
from flask import Flask, reques
Python Flask,flask_script,扩展脚本,扩展命令行。命令行中启动Flask
安装flask_script包: pip install Flask-Script demo.py(flask_script):
# coding:utf-8
from flask import Flask
from flask_script import Manager # 启动命令的管理类
app = Flask(__name__)
# 创建Manager管理类的对象
manager = Manager(app)
@app.route("/index")
def inde
Python Flask,模板,Jinja2模板,模板变量,过滤器
demo.py(模板变量,过滤器):
# coding:utf-8
from flask import Flask, render_template # 导入render_template
app = Flask(__name__)
@app.route("/index")
def index():
data = {
"name": "python",
"age": 18,
"my_dict": {"city": "sz"}
Python Flask,Jinja2模板,自定义过滤器
demo.py(自定义过滤器):
# coding:utf-8
from flask import Flask, render_template # 导入render_template
app = Flask(__name__)
@app.route("/index")
def index():
my_list = [1, 2, 3, 4, 5]
return render_template("index.html", my_list = my_list) #
Python Flask,Jinja2模板,控制语句,if、for
if语句 {% if %} {% else %} {% endif %} for语句 {% for item in samples %} {% endfor %}
Python Flask,Flask-WTF,表单验证,CSRF验证
使用Flask-WTF表单扩展,1、可以帮助进行CSRF验证。2、帮助我们快速定义表单模板。3、而且可以帮助我们在视图中验证表单的数据 安装Flask-WTF: pip install Flask-WTF demo.py(Flask-WTF,定义表单模型类,定义视图):
# coding:utf-8
from flask import Flask, render_template, redirect, url_for, session
from flask_wtf import Flask
Python Flask,Jinja2模板,宏,macro
宏类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余(一次定义,多次使用)。 templates/index.html(模板,定义宏,使用宏):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>宏</title>
</head>
<body>
<!-- 定义宏(不带参数) -->
{% macro input() %}
Python Flask,Jinja2模板,模板继承,模板包含
模板继承与Django中的模板继承一样。 参考:https://blog.csdn.net/houyanhua1/article/details/85004048 templates/base.html(模板,父模板):
{% block top %}
顶部菜单(子模板可以使用父模板中的默认内容,也可以重写)
{% endblock top %}
{% block content %}
{% endblock content %}
{% block botto
Python Flask,Jinja2模板,模板中使用特殊变量及函数,闪现信息,get_flashed_messages()
在渲染模板时,不需要手动分配,可以直接在模板中使用的模板变量及函数:config、request、url_for()、get_flashed_messages() 在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。 config 对象: config 对象就是Flask的config对象,也就是 app.config 对象。
{{ config.SQLALCHEMY_DATABASE_URI }}
request 对象: 就是 Flask 中表示当前请求的 reques
Python Flask,数据库,SQLAlchemy,模型类的定义,数据库添加
SQLAlchemy是一个ORM框架。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。 安装flask-sqlalchemy: pip install flask-sqlalchemy 安装Mysql驱动: pip install MySQL-python # Python2中安装MySQL-python,Python3中安装 PyMySQL demo.py(模型类的定义,数据库的添加):
# coding:utf-8
from flask impor
Python Flask,数据库,SQLAlchemy,数据库查询
数据库的增、删、改通过 db.session 的会话对象,数据库的查询一般通过 模型类名.query() (也可以通过session会话查询) demo.py(数据库查询):
import User # 导入模型类
# 通过query查询
# 查询所有。 (User是模型类名)
user_list = User.query.all() # 返回列表
# 查询第一个
user1 = User.query.first() # 返回模型类对象。 不存在返回None
# 根据主键id查
今日推荐
周排行